Penting
RootMyTV tidak mungkin bekerja di TV Anda. Cari tahu mengapa.
RootMyTV adalah eksploitasi ramah pengguna untuk rooting/jailbreaking LG WebOS Smart TVs.
Bootstraps instalasi saluran homebrew WebOS, dan memungkinkannya berjalan dengan hak istimewa yang ditinggikan. Homebrew Channel adalah aplikasi open source yang dikembangkan komunitas, yang membuatnya lebih mudah untuk mengembangkan dan menginstal perangkat lunak pihak ke-3. Cari tahu lebih lanjut tentang itu di sini.
Jika Anda ingin detail lengkap tentang cara kerja eksploitasi, lewati ke depan ke penulisan kami.
Kerentanan yang digunakan oleh rootMyTV (baik V1 dan V2) telah ditambal oleh LG. RootMyTV tidak mungkin berfungsi pada firmware yang dirilis sejak pertengahan 2022.
Penting
Jika Anda mendapatkan kesalahan "Denied method call "download" for category "/""
, TV Anda ditambal. Jika TV Anda reboot tetapi Saluran Homebrew tidak diinstal, kemungkinan ditambal. Downgrade firmware tidak lagi mungkin tanpa memiliki akses root.
Tabel berikut mencantumkan versi WebOS pertama untuk model setiap tahun yang diketahui tidak mendukung rootMyTV:
Tahun model TV | Versi Basis WebOS | Rootmytv ditambal sejak versi webos |
---|---|---|
2016 | 3.0 | 3.4.2 |
2017 | 3.5 | 3.9.2 |
2018 | 4.0 | 4.4.2 |
2019 | 4.5 | 4.9.7 |
2020 | 5 | 5.4.0 |
2021 | 6 | 6.3.0 |
Jika versi WebOS Anda sama atau lebih besar dari versi dalam kolom "Patched Sejak" untuk tahun model TV Anda, TV Anda tidak rentan terhadap rootMyTV . Sementara versi ini dan yang lebih baru pasti ditambal, versi yang lebih lama mungkin atau mungkin tidak berfungsi. RootMyTV tidak pernah bekerja pada versi WebOS sebelum 3.4.0 atau TV apa pun yang datang dengan WebOS 1, 2, 7 (22), atau 8 (23).
Bergantung pada tahun, sebuah TV dirilis, ia menggunakan berbagai nomor versi WebOS.
Versi sebelum 2016 dan setelah 2019 mudah dimengerti, karena digit pertama hanya digunakan selama satu tahun (misalnya, setiap versi 6.XY adalah untuk TV 2021).
Namun, LG melakukan sesuatu yang tidak biasa pada tahun 2017 dan 2019 dengan tidak menggunakan digit pertama yang baru. TVS dari 2017 dan 2019 masing -masing dimulai dari versi WebOS 3.5 dan 4.5. Misalnya, TV yang dirilis pada tahun 2016 akan memiliki versi WebOS yang sama dengan atau lebih besar dari 3.0.0 dan kurang dari 3.5.0; TV yang dirilis pada 2017 akan menggunakan 3.5.0 hingga (tetapi tidak termasuk) 4.0.0; dan sebagainya.
Perhatikan bahwa ketika mencoba menentukan kapan versi WebOS yang diberikan dirilis, Anda hanya boleh membandingkannya dengan nomor versi dari tahun model yang sama. Misalnya, aman untuk mengasumsikan versi 3.4.1 dirilis setelah 3.3.0. Tetapi versi 3.4.2 bisa (dan pada kenyataannya) dirilis setelah versi 4.0.0.
Dengan WebOS 7 pada tahun 2022, LG mulai menggunakan nama pemasaran "WebOS 22"; Hal yang sama berlaku untuk WebOS 8 ("WebOS 23").
Catatan
Versi ini mengacu pada bidang "WebOS TV Version" di menu Pengaturan, bukan bidang "Versi Perangkat Lunak".
Jika Anda ingin melindungi TV Anda dari eksploitasi jarak jauh, silakan lihat bagian yang relevan dari penulisan kami dan/atau terapkan pembaruan firmware terbaru untuk TV Anda.
Langkah Nol (Penafian): Waspadai risiko. Rooting TV Anda (sayangnya) tidak didukung oleh LG, dan meskipun kami telah melakukan yang terbaik untuk meminimalkan risiko kerusakan, kami tidak dapat membuat jaminan. Ini dapat membatalkan garansi Anda.
TV Anda sekarang harus menginstal aplikasi saluran Homebrew.
Secara default sistem pembaruan dan akses root jarak jauh dinonaktifkan saat menginstal. Jika Anda ingin mengubah pengaturan ini, kunjungi saluran Homebrew → Pengaturan. Opsi di sana diterapkan setelah reboot.
Untuk mengeksploitasi TV yang rusak, lihat informasi di sini.
Akses "Mode Pengembang" tanpa batas
Akses pengguna/aplikasi tingkat bawah
Meskipun kami tidak dapat bertanggung jawab atas tindakan Anda, kami belum menemukan batu bata karena rooting. Jika Anda hanya menggunakan perangkat lunak tepercaya dari repositori saluran homebrew resmi, maka Anda harus aman.
Ini bukan nasihat hukum. Setidaknya di UE, rooting dan modifikasi perangkat lunak lainnya umumnya dianggap legal dan tidak boleh menjadi dasar untuk membatalkan garansi Anda.
Reset pabrik harus menghapus semua file konfigurasi terkait root.
Kami tidak memiliki alat yang nyaman untuk menghilangkan root tanpa reset pabrik , meskipun orang yang berpengetahuan mungkin dapat menghapus kustomisasi kami secara manual.
Meskipun pembaruan secara teknis dimungkinkan, jika LG menambal eksploitasi, Anda mungkin berakhir "terkunci" dan tidak dapat membaringkan kembali TV Anda jika Anda entah bagaimana kehilangan akses. Kami juga tidak dapat memprediksi bagaimana pembaruan di masa depan akan mempengaruhi teknik kami yang digunakan untuk meningkatkan dan mengoperasikan aplikasi Homebrew Channel.
Tidak. Ini tidak merusak atau membatasi akses ke layanan berlangganan atau konten DrMed lainnya.
Namun, tetap pada versi firmware yang sangat lama (yang mungkin diperlukan untuk menjaga akses root tetap ada) dapat membatasi akses Anda ke pemasangan aplikasi toko konten LG, pembaruan, atau (jarang) diluncurkan. Penanganan masalah untuk ini sedang dikerjakan.
Jika Anda tidak akan memperbarui versi perangkat lunak TV Anda ke versi yang sudah ditambal (sebagian besar 4.x+ dirilis setelah 2021/06) tidak perlu diperbarui. Rantai baru tidak membawa fitur baru - hal paling masuk akal yang dapat Anda lakukan adalah memperbarui aplikasi saluran homebrew Anda.
Jika Anda sudah di-root pada versi firmware yang diturunkan/pra-2021-06 dan ingin meningkatkan lebih lanjut, melakukan pembaruan perangkat lunak resmi akan menghapus file root yang ada dan aplikasi homebrew. Menjalankan rootmytv v2 kemudian akan reenable root Access lagi. Anda perlu menginstal ulang aplikasi yang dihapus sendiri.
Jika Anda tahu apa yang Anda lakukan dan ingin mempertahankan aplikasi yang diinstal, Anda perlu menghapus /media/cryptofs/apps/usr/palm/services/com.palmdts.devmode.service/start-devmode.sh
file tepat sebelum pembaruan ( Tanpa reboot di antara), dan kemudian jalankan rootmytv v2 tepat pada boot pertama setelah pembaruan perangkat lunak.
Jika "Failsafe Mode" tersandung di TV Anda dan itu menunjukkan pemberitahuan yang marah, buka Homebrew Channel → Pengaturan, Switch "FailSafe Mode" OFF dan tekan "Reboot".
"Failsafe Mode" adalah mode di mana tidak ada kustomisasi sistem kami yang diaktifkan dan hanya server akses jarak jauh darurat yang dimulai.
Mode ini diaktifkan secara otomatis ketika TV macet, menghilangkan daya atau dimatikan selama startup sistem awal. Untuk mengurangi peluang yang terjadi, kami sarankan untuk mengaktifkan pengaturan "Start Cepat+" di tab Sistem WebOS Tab Umum. Ini akan membuat TV hanya pergi ke "mode tidur" (yang tidak membutuhkan lebih banyak daya) daripada melakukan shutdown penuh, dan tidak perlu memulai kembali layanan kami pada setiap penangguhan. Ini juga akan membuat startup TV lebih cepat.
Script startup kami menjalankan semua file yang dapat dieksekusi di /var/lib/webosbrew/init.d
pada boot (melalui run-parts
-nama file mungkin hanya berisi huruf a-zA-Z0-9-_
!)-Buat skrip Anda sendiri di sana.
Buat kustomisasi apa pun di sana dan jangan memodifikasi skrip saluran rootMyTV/homebrew yang ada, karena ini mungkin ditimpa pada pembaruan di masa mendatang.
Jika Anda seorang pengembang homebrew - buat symlink ke skrip di jalur aplikasi Anda sendiri di sana, dan jangan menyalin apa pun di sana.
Jika Anda mau, Anda dapat mendukung proyek ini melalui tombol sponsor GitHub - lihat "Sponsor" di sudut kanan atas.
Jangan perbarui TV Anda. Meskipun pembaruan secara teknis dimungkinkan, jika LG menambal eksploitasi, Anda mungkin berakhir "terkunci" dan tidak dapat membaringkan kembali TV Anda jika Anda entah bagaimana kehilangan akses. Kami juga tidak dapat memprediksi bagaimana pembaruan di masa depan akan mempengaruhi teknik kami yang digunakan untuk meningkatkan dan mengoperasikan aplikasi Homebrew Channel. Opsi "Pembaruan Sistem Blok" di saluran Homebrew akan menonaktifkan pemeriksaan pembaruan firmware. Pastikan opsi "Pembaruan Sistem Otomatis" dalam pengaturan sistem WebOS juga dinonaktifkan.
Diperlukan untuk menghapus aplikasi "Mode Pengembang" sebelum rooting. Kalau tidak, itu akan mengganggu skrip startup yang digunakan untuk bootstrap jailbreak. Layanan SSH yang diekspos oleh Homebrew Channel kompatibel dengan Tooling WebOS SDK.
Jika Anda memerlukan akses shell root jarak jauh dan tahu cara menggunakan SSH, Anda dapat mengaktifkannya dalam pengaturan saluran Homebrew. Kata sandi default adalah alpine
, tetapi kami sarankan menyiapkan otentikasi kunci publik SSH dengan menyalin kunci publik SSH Anda ke /home/root/.ssh/authorized_keys
di TV. Ini akan menonaktifkan otentikasi kata sandi setelah reboot.
Kunci Terdaftar Pengguna GitHub dapat diinstal menggunakan cuplikan berikut:
mkdir -p ~ /.ssh && curl https://github.com/USERNAME.keys > ~ /.ssh/authorized_keys
Opsi alternatif adalah Telnet (dapat diaktifkan di Homebrew Channel → Pengaturan → Telnet) meskipun sangat tidak disarankan , karena ini memberikan shell root yang tidak terautentikasi kepada siapa pun di jaringan lokal.
Dianjurkan untuk mengaktifkan fungsionalitas "start cepat+". Ini akan membuat tombol shutdown pada remote tidak melakukan shutdown sistem lengkap. Jika Anda dengan cepat menyalakan dan mematikan TV tanpa start cepat+, "Mode Failsafe" kami dapat dipicu (yang ada di sana untuk mencegah skrip startup yang membumbui TV) yang akan hilang setelah beralih sakelar yang relevan dalam pengaturan saluran Homebrew.
Jika ada masalah, bergabunglah dengan OpenLGTV Discord Server dan minta bantuan pada saluran #rootmytv
, tanyakan pada saluran matriks #openlgtv:netserve.live
kami, atau ajukan masalah github.
Sebelum meminta dukungan, silakan berkonsultasi dengan panduan pemecahan masalah kami.
RootMyTV adalah rantai eksploitasi. Penemuan dan pengembangan eksploitasi ini telah menjadi upaya kolaboratif, dengan kontribusi langsung dan tidak langsung dari banyak peneliti.
Pada 05 Oktober 2020, Andreas Lindh melaporkan file root mengimpulasikan kerentanan dengan LG. Pada 03 Februari 2021, Andreas menerbitkan temuannya, menunjukkan eksploitasi root lokal terhadap emulator WebOS (bagian dari SDK pengembangan LG). LG dengan berani mengklaim bahwa masalah ini tidak mempengaruhi perangkat mereka, dan bahwa mereka akan menambal emulator mereka.
Pada 15 Februari 2021, David Buchanan melaporkan kerentanan dalam aplikasi "ThinQ Login" LG, yang memungkinkan aplikasi untuk dibajak melalui urutan spesifik input pengguna, memungkinkan penyerang memanggil API istimewa. Pada tanggal 23 Maret 2021, David menerbitkan Exploit Proof-of-Concept, yang memungkinkan pengguna untuk mendapatkan hak istimewa root di LG Smart TV mereka. Ini dimungkinkan dengan menggabungkannya dengan kerentanan akar lokal yang sebelumnya dilaporkan oleh Andreas (ya, yang sama seperti yang dikatakan LG tidak mempengaruhi perangkat mereka!).
Sekitar 28 Maret 2021, Piotr Dobrowolski menemukan kerentanan yang sama dalam aplikasi "Login Sosial", yang hadir di berbagai versi WebOS yang lebih luas. Lebih penting lagi, eksploitasi ini dapat dengan mudah dipicu melalui jaringan lokal, menggunakan SSAP (detail di bawah), membuatnya jauh lebih andal dan ramah pengguna.
Pada saat penulisan, kode dalam repo ini adalah karya gabungan David Buchanan (Desain Web, Eksploitasi POC awal) dan Piotr Dobrowolski (Penelitian dan Implementasi Eksploitasi "V1", Penelitian, dan Penelitian dan Implementasi "V2").
Kami ingin mengucapkan terima kasih:
Andreas Lindh untuk menerbitkan penelitian WebOS -nya.
Komunitas WebOS yang lebih luas, khususnya Forum XDA dan Perselisihan OpenLGTV.
Semua kontributor (sekarang dan masa depan) ke saluran homebrew, dan pengembangan aplikasi dan perangkat lunak homebrew lainnya.
LG, untuk menambal gejala bug daripada penyebab yang mendasarinya ...
Pada saat penulisan eksploitasi asli (RootMyTV V1-2021-05-15), semua versi WebOS antara 3,4 dan 6.0 yang kami uji (TV yang dirilis antara pertengahan 2017 dan awal 2021) didukung oleh rantai eksploitasi ini. Sekitar Juni-2021 LG mulai meluncurkan pembaruan yang menambahkan beberapa mitigasi kecil yang merusak rantai eksploitasi asli kami.
Ketika RootMyTV V2 dirilis (2022-01-05), semua versi WebOS antara 4.x dan 6.2+ yang kami uji (TV yang dirilis antara awal 2018 dan akhir 2021) didukung oleh rantai eksploit V2.
Beberapa versi antara 3.4 dan 3.9 dapat didukung oleh rootmytv v2, tetapi jarak tempuh Anda dapat bervariasi.
WebOS, seperti namanya, adalah sistem operasi TV pintar yang sebagian besar didasarkan pada teknologi web. Aplikasi, baik sistem dan eksternal dijalankan dalam browser web berbasis kromium yang dilucuti ("WebAppMgr") atau dalam runtime QT QML. Hampir semua sistem dan aplikasi eksternal berjalan di penjara berbasis chroot sebagai lapisan keamanan tambahan.
"Aplikasi Web", di luar teknologi web standar, juga mendapatkan akses ke API untuk berkomunikasi dengan "Luna Service Bus". Ini adalah bus, mirip dengan D-Bus, yang digunakan untuk bertukar pesan dan menyediakan berbagai layanan di berbagai domain keamanan. Klien bus dapat mengekspos beberapa metode RPC ke aplikasi lain (diidentifikasi oleh URIS luna://service-name/prefix-maybe/method-name
) yang menerima pesan objek JSON sebagai parameter panggilan mereka, dan kemudian dapat mengembalikan satu atau banyak pesan. (Tergantung pada panggilan yang "dapat berlangganan" atau tidak)
Sementara Luna Bus tampaknya memiliki penanganan ACL yang luas, mengingat sejarah transfer IP WebOS, sepertinya tidak banyak insinyur yang sepenuhnya memahami kemampuannya. Bagian dari bus ditandai sebagai "pribadi", yang hanya dapat diakses oleh aplikasi sistem tertentu, sementara sebagian besar panggilan lainnya adalah "publik" dan dapat diakses oleh semua aplikasi.
Unexpectedly, one of the internal services exposed on a bus is "LunaDownloadMgr" which provides a convenient API for file download, progress tracking, etc... Said service has been researched in the past and an identity confusion bug leading to an arbitrary unjailed root Kerentanan Write File telah didokumentasikan secara publik.
Ini sendiri tidak terlalu membantu dalam perangkat keras produksi, jadi kami perlu menemukan cara memanggil layanan Luna yang sewenang -wenang dari aplikasi dengan com.webos.
/ com.palm.
/ com.lge.
ID aplikasi.
Untuk mendapatkan kontrol terprogram awal dari GUI TV, antarmuka yang disebut "LG Connect Apps" dapat digunakan. Protokolnya, yang disebut "SSAP" (Protokol Akses Layanan Sederhana), adalah mekanisme RPC berbasis Websocket sederhana yang dapat digunakan untuk secara tidak langsung berinteraksi dengan Luna Service Bus, dan telah didokumentasikan secara luas dalam berbagai konteks terkait otomasi rumah. Kami menggunakannya untuk meluncurkan aplikasi sistem yang rentan yang tidak mudah diakses dengan interaksi pengguna normal.
API SSAP dimaksudkan untuk digunakan dari aplikasi seluler eksternal. Demi kesederhanaan, kami ingin melayani eksploitasi kami sebagai halaman web. Ini mengarahkan kami untuk memperhatikan bahwa, dapat dimengerti, server SSAP secara eksplisit menolak koneksi apa pun dari (plainxext) asal http. Namun, ada pengecualian tambahan untuk aturan itu, dan tampaknya penulis ingin mengizinkan file://
asal, yang menampilkan diri ke server sebagai null
. Ternyata ada satu asal lain yang dapat digunakan yang juga diulang sebagai null
, dan itu adalah data:
URI.
Untuk mengeksploitasi ini, kami telah membuat implementasi proxy Websocket API minimal yang membuka iframe tersembunyi dengan muatan JavaScript (yang sekarang berjalan dalam data:
/ null
asal) dan menukar pesan dengan bingkai browser utama. Ini telah dirilis sebagai perpustakaan terpisah.
Ada masalah kecil dengan membangun koneksi dengan SSAP Websocket Server. Sementara kita semua percaya pada kekacauan total, kami tidak merasa sangat nyaman dengan melayani eksploitasi kami atas HTTP Plaintext, yang akan menjadi satu -satunya cara untuk menghindari kebijakan pencegahan konten campuran. (Secara default, asal https tidak diperbolehkan berkomunikasi dengan titik akhir plaintext http)
Sementara beberapa versi kromium yang lebih baru memang memungkinkan komunikasi konten campuran dengan localhost
, itu tidak terjadi ketika Chromium 38 dirilis (digunakan dalam WebOS 3.x). Untungnya, sepertinya browser sistem di WebOS 3.x juga rentan terhadap sesuatu yang telah dianggap sebagai masalah keamanan di sebagian besar browser untuk sementara waktu sekarang - navigasi ke data:
URIS. Dengan demikian, ketika berlaku, eksploitasi kami berupaya untuk membuka dirinya sebagai data:
URI yang dikodekan basis64. Ini membuat browser kami tidak lagi menganggap asal usulnya aman, dan kami dapat kembali mengakses server Websocket polos-HTTP.
Pembaca yang jeli mungkin telah memperhatikan bahwa layanan yang kami gunakan dimaksudkan untuk digunakan dari jarak jauh. Sementara koneksi itu sendiri membutuhkan konfirmasi menggunakan remote, kami sangat merekomendasikan untuk menonaktifkan fungsionalitas aplikasi LG Connect untuk mencegah eksploitasi jarak jauh. Namun, opsi ini tampaknya hanya ada pada versi WebOS yang lebih tua dari WebOS 4.x - dalam kasus seperti itu satu -satunya solusi adalah menjaga TV di jaringan yang terpisah , atau menonaktifkan layanan SSAP secara manual menggunakan perintah berikut setelah rooting:
luna-send -n 1 ' palm://com.webos.settingsservice/setSystemSettings ' ' {"category":"network","settings":{"allowMobileDeviceAccess":false}} '
Memiliki beberapa kontrol terprogram awal TV melalui SSAP, kami dapat menjalankan aplikasi apa pun yang ada di TV. Semua peluncuran lintas-aplikasi dapat berisi objek JSON tambahan yang disebut launchParams
. Ini digunakan untuk misalnya. Buka browser sistem dengan situs tertentu terbuka, atau luncurkan video YouTube yang telah ditentukan. Ternyata fungsi ini juga digunakan untuk memilih situs web sosial mana yang akan digunakan di com.webos.app.facebooklogin
, yang merupakan saudara kandung yang lebih tua dari com.webos.app.iot-thirdparty-login
yang digunakan dalam eksploitasi awal, hadir di semua versi webos WebOS hingga (setidaknya) 3.x.
Saat meluncurkan login sosial melalui manajemen akun LG, aplikasi ini menerima argumen yang disebut server
. Ini ternyata menjadi bagian dari URL bahwa browser "aplikasi web" dinavigasi. Dengan demikian, menggunakan launchParams
yang disiapkan dengan benar, kami dapat membuka halaman web yang sewenang -wenang (dengan satu -satunya persyaratan adalah bahwa itu dilayani lebih dari https
) yang berjalan sebagai aplikasi sistem yang dipertimbangkan oleh aplikasi "Sistem" LunaDownloadMgr
a.
Karena kami sudah berjalan sebagai aplikasi sistem, kami dapat mengunduh file (dengan aman di atas https!) Ke dalam lokasi sistem file yang tidak ada secara sewenang -wenang sebagai root.
Kami menggunakannya untuk mengunduh file berikut:
stage3.sh
→ /media/cryptofs/apps/usr/palm/services/com.palmdts.devmode.service/start-devmode.sh
- ini adalah skrip yang dieksekusi saat startup oleh /etc/init/devmode.conf
sebagai root, Untuk menjalankan mode pengembang SSH Daemon.hbchannel.ipk
→ /media/internal/downloads/hbchannel.ipk
- Karena tujuan akhir kami melintasi aplikasi Homebrew Channel, kami juga dapat mengunduhnya selama tahap sebelumnya dari eksploitasi dan mengkonfirmasi itu benar -benar diunduh.devmode_enabled
→ /var/luna/preferences/devmode_enabled
- Ini adalah bendera yang diperiksa sebelum menjalankan skrip start-devmode.sh
, dan hanya file dummy. stage3.sh
Skrip adalah alat minimal yang, setelah membuka cangkang telnet darurat dan menghapus dirinya sendiri (jika terjadi kesalahan dan pengguna perlu me -reboot TV - skrip terus berjalan tetapi tidak akan lagi dieksekusi pada startup berikutnya), menginstal Aplikasi Homebrew Channel melalui panggilan layanan DevMode standar dan meningkatkan layanannya untuk berjalan tanpa jari sebagai root juga.
Sekitar 2021/06 LG mulai meluncurkan versi yang ditambal yang melibatkan beberapa perbaikan untuk trik yang kami gunakan dalam rantai ini:
public
/etc/palm/luna-downloadmgr/download.json
start-devmode.sh
skrip sekarang dikirimkan dengan tanda tangan dan sekarang diverifikasi menggunakan openssl
pada setiap bootstart-devmode.sh
yang ditandatangani, selama waktu yang diperbarui TV tidak dapat menggunakan mode pengembang sama sekali.Sebagian besar mitigasi ini terlalu sepele untuk dikerjakan, jadi kami masih menganggap rantai ini tidak terikat.
start-devmode.sh
Perkiraan awal kami untuk memperbaiki masalah ini dalam rantai kami adalah "beberapa jam" - tambalan berteori di pihak kami pada 2021/05/27 ternyata benar, tetapi karena beberapa pilihan strategis dan kurangnya waktu pribadi, kami memutuskan untuk melakukannya Tunda pengujian dan rilis selama beberapa bulan. Maaf. :)