Important
Il est peu probable que RootMyTV travaille sur votre téléviseur. Découvrez pourquoi.
RootMyTV est un exploit convivial pour les téléviseurs intelligents LG WebOS de root / jailbreaking.
Il démarre l'installation du canal Homebrew WebOS et lui permet d'exécuter avec des privilèges élevés. Le Homebrew Channel est une application open source développée par la communauté, ce qui facilite le développement et l'installation de logiciels tiers. En savoir plus ici.
Si vous voulez tous les détails du fonctionnement de l'exploit, passez à notre rédaction.
Les vulnérabilités utilisées par RootMyTV (V1 et V2) ont été corrigées par LG. RootMyTV est peu susceptible de travailler sur le micrologiciel libéré depuis la mi-2022.
Important
Si vous obtenez une erreur "Denied method call "download" for category "/""
, votre téléviseur est corrigé. Si votre téléviseur redémarre la chaîne Homebrew n'est pas installée, il est probablement corrigé. Les rétrogradations du micrologiciel ne sont plus possibles sans avoir déjà eu un accès racine.
Le tableau suivant répertorie la première version WebOS pour les modèles de chaque année qui ne prend pas en charge RootMyTV:
Année de modèle de télévision | Version WebOS de base | Rootmytv patché depuis la version 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 |
Si votre version WebOS est égale ou supérieure à la version de la colonne "patchée depuis" pour l'année de modèle de votre téléviseur, votre téléviseur n'est pas vulnérable au rootmytv . Bien que ces versions et plus récents soient définitivement corrigés, les versions plus anciennes peuvent fonctionner ou non. RootMyTV n'a jamais travaillé sur les versions WebOS avant 3.4.0 ou tout téléviseur fourni avec WebOS 1, 2, 7 (22) ou 8 (23).
Selon l'année d'un téléviseur, il utilise une certaine gamme de numéros de version WebOS.
Les versions avant 2016 et après 2019 sont faciles à comprendre, car le premier chiffre n'est utilisé que pour une seule année (par exemple, chaque version 6.xy est pour un téléviseur 2021).
Cependant, LG a fait quelque chose d'inhabituel en 2017 et 2019 en n'utilisant pas un nouveau premier chiffre. Les téléviseurs de 2017 et 2019 ont commencé les versions WebOS 3.5 et 4.5, respectivement. Par exemple, les téléviseurs publiés en 2016 auront des versions webOS égales ou supérieures à 3,0,0 et inférieures à 3.5.0; Les téléviseurs publiés en 2017 utiliseront 3.5.0 jusqu'à (mais non l'inclusion) 4.0.0; et ainsi de suite.
Notez que lorsque vous essayez de déterminer quand une version WebOS a été publiée, vous ne devez le comparer qu'avec les numéros de version de la même année de modèle. Par exemple, il est sûr de supposer que la version 3.4.1 a été publiée après 3.3.0. Mais la version 3.4.2 aurait pu être (et en fait était) publiée après la version 4.0.0.
Avec WebOS 7 en 2022, LG a commencé à utiliser le nom de marketing "WebOS 22"; Il en va de même pour WebOS 8 ("WebOS 23").
Note
Ce versioning fait référence au champ "WebOS TV Version" dans le menu Paramètres, pas au champ "Version du logiciel".
Si vous souhaitez protéger votre téléviseur contre l'exploitation à distance, veuillez consulter la section pertinente de notre rédaction et / ou appliquer la dernière mise à jour du micrologiciel pour votre téléviseur.
Étape zéro (avertissement): Soyez conscient des risques. L'enracinement de votre téléviseur n'est (malheureusement) pas soutenu par LG, et bien que nous ayons fait de notre mieux pour minimiser le risque de dommages, nous ne pouvons faire aucune garantie. Cela peut annuler votre garantie.
Votre téléviseur devrait désormais installer l'application Homebrew Channel.
Par défaut, les mises à jour système et l'accès racine à distance sont désactivés lors de l'installation. Si vous souhaitez modifier ces paramètres, allez sur Homebrew Channel → Paramètres. Options Il y a une application après un redémarrage.
Pour exploiter les téléviseurs cassés, consultez les informations ici.
Accès illimité "Mode développeur"
Accès de l'utilisateur / application de niveau inférieur
Bien que nous ne puissions pas assumer la responsabilité de vos actions, nous n'avons rencontré aucune brique en raison de l'enracinement. Si vous n'utilisez que des logiciels de confiance du référentiel officiel des canaux Homebrew, vous devriez être en sécurité.
Ce n'est pas un conseil juridique. Au moins dans l'UE, l'enracinement et d'autres modifications de logiciels sont généralement jugées légales et ne devraient pas être une base pour annuler votre garantie.
La réinitialisation d'usine doit supprimer tous les fichiers de configuration liés à la racine.
Nous n'avons pas un outil pratique pour l'élimination des racines sans réinitialisation d'usine , bien qu'une personne bien informée puisse être en mesure de supprimer nos personnalisations manuellement.
Bien que les mises à jour soient techniquement possibles, si LG répare l'exploit, vous pourriez finir par "verrouillé" et incapable de ré-ré-ré-ré-inhabillez votre téléviseur si vous perdez l'accès d'une manière ou d'une autre. Nous ne pouvons pas non plus prédire comment les futures mises à jour affecteront nos techniques utilisées pour élever et utiliser l'application Homebrew Channel.
Non. Cela ne casse ni ne limite l'accès aux services d'abonnement ou à d'autres contenus DRMED.
Cependant, rester sur une version très ancienne du micrologiciel (qui peut être nécessaire pour garder l'accès root persistant) peut limiter votre accès aux installations, mises à jour des applications de contenu LG, ou rarement) lancements. Des solutions de contournement sont en préparation.
Si vous ne mettez pas à jour votre version de logiciel TV vers celui qui est déjà corrigé (la plupart 4.x + publié après 2021/06), il n'est pas nécessaire de mettre à jour. La nouvelle chaîne n'apporte pas de nouvelles fonctionnalités - la chose la plus sensée que vous puissiez faire est de mettre à jour votre application Homebrew Channel.
Si vous êtes déjà enraciné sur la version du firmware dégradé / avant 2021-06 et que vous souhaitez mettre à niveau davantage, faire une mise à jour logicielle officielle supprimera les fichiers racine existants et les applications Homebrew. L'exécution de rootmytv v2 réendera à nouveau l'accès root. Vous devrez réinstaller vous-même les applications supprimées.
Si vous savez ce que vous faites et souhaitez persister des applications installées, vous devez supprimer /media/cryptofs/apps/usr/palm/services/com.palmdts.devmode.service/start-devmode.sh
juste avant une mise à jour ( Sans redémarrer entre les deux), puis exécuter RootMyTV V2 directement sur le premier démarrage après la mise à jour du logiciel.
Si "Mode Failsafe" a été déclenché sur votre téléviseur et qu'il montre des notifications en colère, accédez à Homebrew Channel → Paramètres, changez "Mode Failsafe" OFF et appuyez sur "Reboot".
"Mode Failsafe" est un mode où aucune de nos personnalisations système n'est activée et seul un serveur d'accès à distance d'urgence ne se démarque.
Ce mode est activé automatiquement lorsque le téléviseur se bloque, obtient sa puissance supprimée ou est arrêté pendant le démarrage du système précoce. Afin de réduire les chances que cela se produise, nous vous recommandons d'activer le paramètre "Start +" dans les paramètres du système WebOS Tabage général. Cela ne fera passer le téléviseur que dans le "mode de sommeil" (qui ne prend pas beaucoup plus de puissance) au lieu de faire un arrêt complet, et n'aura pas besoin de redémarrer nos services à chaque suspension. Cela rendra également la startup télévisée beaucoup plus rapidement.
Notre script de démarrage exécute tous les fichiers exécutables dans /var/lib/webosbrew/init.d
sur démarrage (via run-parts
- les noms de fichiers peuvent ne contenir que les lettres a-zA-Z0-9-_
!) - Créez vos propres scripts.
Créez des personnalisations là-bas et ne modifiez pas les scripts de canal RootMyTV / HomeBrew existants, car ceux-ci peuvent être écrasés sur les futures mises à jour.
Si vous êtes un développeur HomeBrew - créez un lien symbolique à un script dans votre propre chemin d'application là-bas et ne y copiez rien.
Si vous le souhaitez, vous pouvez soutenir ce projet via les sponsors GitHub - voir le bouton "Sponsor" dans le coin supérieur droit.
Ne mettez pas à jour votre téléviseur. Bien que les mises à jour soient techniquement possibles, si LG répare l'exploit, vous pourriez finir par "verrouillé" et incapable de ré-ré-ré-ré-inhabillez votre téléviseur si vous perdez l'accès d'une manière ou d'une autre. Nous ne pouvons pas non plus prédire comment les futures mises à jour affecteront nos techniques utilisées pour élever et utiliser l'application Homebrew Channel. L'option "Block System Mises à jour" dans le canal Homebrew désactivera les vérifications de mise à jour du micrologiciel. Assurez-vous que l'option "Automatic System Mises à jour" dans les paramètres du système WebOS est également désactivée.
Il est nécessaire de supprimer l'application "Mode développeur" avant de rooter. Sinon, cela interférera avec le script de démarrage utilisé pour amorcer le jailbreak. Le service SSH exposé par Homebrew Channel est compatible avec l'outillage WebOS SDK.
Si vous avez besoin d'accès à la coque à distance distante et que vous savez utiliser SSH, vous pouvez l'activer dans les paramètres des canaux Homebrew. Le mot de passe par défaut est alpine
, mais nous vous recommandons de configurer l'authentification de la clé publique SSH en copiant votre clé publique SSH sur /home/root/.ssh/authorized_keys
sur le téléviseur. Cela désactivera l'authentification du mot de passe après un redémarrage.
Les touches enregistrées par l'utilisateur GitHub peuvent être installées à l'aide de l'extrait suivant:
mkdir -p ~ /.ssh && curl https://github.com/USERNAME.keys > ~ /.ssh/authorized_keys
L'option alternative est Telnet (peut être activée dans le canal Homebrew → Paramètres → Telnet) bien qu'il soit très découragé , car cela donne un shell racine non authentifié à n'importe qui sur un réseau local.
Il est recommandé d'avoir une fonctionnalité "Quick Start +" activée . Cela fera un bouton d'arrêt sur une éloignement ne fait pas un arrêt complet du système. Si vous allumez et éteignez rapidement le téléviseur sans démarrage rapide +, notre "mode de sécurité" peut être déclenché (qui est là pour empêcher les scripts de démarrage de briser le téléviseur) qui disparaîtront après le commutateur pertinent dans les paramètres de la chaîne Homebrew.
Dans le cas de tout problème, rejoignez le serveur OpenLGTV Discord et demandez de l'aide sur la chaîne #rootmytv
, demandez sur notre canal Matrix #openlgtv:netserve.live
, ou posez un problème GitHub.
Avant de demander un soutien, veuillez consulter notre guide de dépannage.
RootMyTV est une chaîne d'exploits. La découverte et le développement de ces exploits ont été un effort de collaboration, avec des contributions directes et indirectes de plusieurs chercheurs.
Le 05 octobre 2020, Andreas Lindh a signalé une vulnérabilité d'écrasement de dossiers à LG. Le 03 février 2021, Andreas a publié ses résultats, démontrant un exploit racine local contre l'émulateur WebOS (une partie du SDK du développement de LG). LG avait hardiment affirmé que ce problème n'avait pas affecté leurs appareils et qu'ils allaient corriger leur émulateur.
Le 15 février 2021, David Buchanan a signalé une vulnérabilité dans l'application "Thinq Login" de LG, qui a permis à l'application d'être détournée via une séquence spécifique d'entrées utilisateur, permettant à un attaquant d'appeler les API privilégiées. Le 23 mars 2021, David a publié un exploit de preuve de concept, qui a permis aux utilisateurs d'acquérir des privilèges root sur leurs téléviseurs intelligents LG. Cela a été rendu possible en le combinant avec la vulnérabilité des racines locales précédemment rapportée par Andreas (oui, la même que LG a dit n'a pas affecté leurs appareils!).
Vers le 28 mars 2021, Piotr Dobrowolski a découvert une vulnérabilité similaire dans l'application "Social Login", qui est présente dans une gamme plus large de versions WebOS. Plus important encore, cet exploit pourrait être facilement déclenché sur le réseau local, en utilisant SSAP (détails ci-dessous), ce qui le rend beaucoup plus fiable et convivial.
Au moment de la rédaction, le code de ce dépôt est l'œuvre combinée de David Buchanan (conception Web, exploitant initial du POC) et Piotr Dobrowolski (amélioration de la mise en œuvre "V1", des recherches et de la mise en œuvre "V1" ").
Nous tenons à remercier:
Andreas Lindh pour avoir publié ses recherches WebOS.
La communauté WebOS plus large, en particulier les forums XDA et la discorde OpenLGTV.
Tous les contributeurs (présents et futurs) au canal Homebrew et au développement d'autres applications et logiciels Homebrew.
LG, pour corriger les symptômes des insectes plutôt que des causes sous-jacentes ...
Au moment de la rédaction de l'exploit original (RootMyTV V1 - 2021-05-15), toutes les versions WebOS entre 3,4 et 6,0 que nous avons testées (TVS publiés entre la mi-2017 et le début de 2021) ont été pris en charge par cette chaîne d'exploitation. Vers juin-juillet 2021, LG a commencé à déployer des mises à jour qui ont ajouté quelques atténuations mineures qui ont brisé notre chaîne d'exploitation originale.
Lorsque RootMyTV V2 a été publié (2022-01-05), toutes les versions webOS entre 4.x et 6.2+ que nous avons testées (téléviseurs publiés entre début 2018 et fin 2021) ont été pris en charge par la chaîne d'exploitation V2.
Certaines versions entre 3,4 et 3,9 peuvent être prises en charge par RootMyTV V2, mais votre kilométrage peut varier.
WebOS, comme son nom l'indique, est un système d'exploitation Smart TV principalement basé sur les technologies Web. Les applications, le système et les externes sont exécutés dans un navigateur Web basé sur le chrome désarticulé ("WebAppMGR") ou dans QT QML Runtime. Presque toutes les applications système et externes s'exécutent dans des prisons basées sur le chroot comme couche de sécurité supplémentaire.
Les "applications Web", en dehors des technologies Web standard, ont également accès à une API pour communiquer avec "Luna Service Bus". Il s'agit d'un bus, similaire à D-BUS, utilisé pour échanger des messages et fournir divers services dans différents domaines de sécurité. Les clients de BUS peuvent exposer certaines méthodes RPC à d'autres applications (identifiées par Uris luna://service-name/prefix-maybe/method-name
) qui acceptent le message d'objet JSON comme paramètres d'appel, puis peuvent retourner un ou plusieurs messages. (Selon l'appel étant "abonné" ou non)
Bien que Luna Bus semble avoir une manipulation ACL étendue, compte tenu de l'histoire des transferts IP WebOS, il semble que peu d'ingénieurs comprennent parfaitement ses capacités. Une partie du bus est marquée comme «privée», qui n'est accessible que par certaines applications système, tandis que la plupart des autres appels sont «publics» et sont accessibles par toutes les applications.
De façon inattendue, l'un des services internes exposés dans un bus est "Lunadownloadmgr" qui fournit une API pratique pour le téléchargement de fichiers, le suivi des progrès, etc ... Ledit service a été recherché dans le passé et un bogue de confusion d'identité menant à une racine arbitraire sans serrée La vulnérabilité d'écriture de fichiers a été documentée publiquement.
Ceci en soi n'a pas été très utile dans le matériel de production, nous devions donc trouver un moyen d'appeler un service Luna arbitraire à partir d'une application avec un com.webos.
/ com.palm.
/ com.lge.
ID d'application.
Afin d'obtenir un contrôle programmatique initial de l'interface graphique TV, une interface appelée "LG Connect Apps" peut être utilisée. Son protocole, appelé "SSAP" (Simple Service Access Protocol), est un simple mécanisme RPC basé sur WebSocket qui peut être utilisé pour interagir indirectement avec Luna Service Bus, et a été largement documenté dans divers contextes liés à l'automation à domicile. Nous l'utilisons pour lancer une application système vulnérable qui n'est pas facilement accessible avec une interaction utilisateur normale.
L'API SSAP est censée être utilisée à partir d'une application mobile externe. Par souci de simplicité, cependant, nous voulions servir notre exploit en tant que page Web. Cela nous a amenés à remarquer que, naturellement, le serveur SSAP rejette explicitement toutes les connexions à partir d'origine HTTP (en clair). Cependant, il y avait une exception supplémentaire à cette règle, et apparemment les auteurs voulaient autoriser file://
origines, qui se présentent au serveur comme null
. Il s'avère qu'il y a une autre origine qui peut être utilisée qui est également représentée comme null
, et c'est data:
URIS.
Afin d'exploiter cela, nous avons créé une implémentation de proxy API Web minimale qui ouvre un iframe caché avec une charge utile JavaScript (qui s'exécute maintenant dans une origine data:
/ null
) et échange les messages avec le cadre du navigateur principal. Cela a été publié en tant que bibliothèque distincte.
Il y a un problème mineur dans l'établissement de la connexion avec le serveur SSAP WebSocket. Bien que nous croyions tous au chaos total, nous ne nous sentons pas très à l'aise de servir notre exploit sur HTTP en texte clair, ce qui serait le seul moyen d'éviter les politiques de prévention du contenu mixtes. (Par défaut, les origines HTTPS ne sont pas autorisées à communiquer avec les points de terminaison HTTP en texte clair)
Bien que certaines versions de chrome plus récentes permettent une communication de contenu mixte avec localhost
, ce n'était pas le cas lorsque Chromium 38 a été publié (utilisé dans WebOS 3.x). Heureusement, il semble que le navigateur système sur WebOS 3.x soit également vulnérable à quelque chose qui a été considéré comme un problème de sécurité dans la plupart des navigateurs depuis un certain temps maintenant - navigation vers data:
uris. Ainsi, le cas échéant, nos exploits tentent de s'ouvrir en tant que data:
URI codé en base64. Cela permet à notre navigateur de ne plus considérer l'origine sécurisée, et nous pouvons à nouveau accéder au serveur WebSocket Plain-HTTP.
Un lecteur attentif a peut-être remarqué que le service que nous utilisons est destiné à être utilisé à distance. Bien que la connexion elle-même ait besoin d'une confirmation à l'aide d'une télécommande, nous vous recommandons fortement de désactiver la fonctionnalité LG Connect Apps afin d'éviter l'exploitation à distance. Cependant, cette option ne semble être présente que sur les versions webOS plus anciennes que WebOS 4.x - dans de tels cas, les seules solutions consistent à garder le téléviseur sur un réseau séparé , soit à désactiver le service SSAP manuellement en utilisant la commande suivante après l'enracinement:
luna-send -n 1 ' palm://com.webos.settingsservice/setSystemSettings ' ' {"category":"network","settings":{"allowMobileDeviceAccess":false}} '
Ayant un contrôle programmatique initial du TV via SSAP, nous pouvons exécuter n'importe quelle application présente sur le téléviseur. Tous les lancements croisés peuvent contenir un objet JSON supplémentaire appelé launchParams
. Ceci est utilisé par exemple. Ouvrez un navigateur système avec un site spécifique ouvert ou lancez une vidéo YouTube prédéterminée. Il s'avère que cette fonctionnalité est également utilisée pour sélectionner le site Web social à utiliser dans com.webos.app.facebooklogin
, qui est l'ancien frère de com.webos.app.iot-thirdparty-login
utilisé dans l'exploit initial, présent sur toutes les versions WebOS Jusqu'à (au moins) 3.x.
Lors du lancement de la connexion sociale via la gestion du compte LG, cette application accepte un argument appelé server
. Cela s'avère faire partie de l'URL à laquelle le navigateur "Web App" est navigué. Ainsi, en utilisant un launchParams
correctement préparé, nous pouvons ouvrir une page Web arbitraire (avec la seule exigence étant qu'elle est servie sur https
) exécutant une application système considérée par LunaDownloadMgr
une application "système".
Étant donné que nous exécutons déjà en tant qu'application système, nous pouvons télécharger des fichiers (en toute sécurité sur HTTPS!) Dans des emplacements de système de fichiers non créés arbitraires en tant que root.
Nous l'utilisons pour télécharger les fichiers suivants:
stage3.sh
→ /media/cryptofs/apps/usr/palm/services/com.palmdts.devmode.service/start-devmode.sh
- Il s'agit du script exécuté au démarrage par /etc/init/devmode.conf
en tant que root, Afin d'exécuter le mode SSH en mode développeur.hbchannel.ipk
→ /media/internal/downloads/hbchannel.ipk
- Étant donné que notre objectif final est d'imposer l'application Homebrew Channel, nous pouvons également le télécharger pendant les étapes précédentes d'un exploit et confirmer qu'elle est en fait téléchargée.devmode_enabled
→ /var/luna/preferences/devmode_enabled
- Il s'agit de l'indicateur vérifié avant d'exécuter le script start-devmode.sh
, et n'est qu'un fichier factice. Le script stage3.sh
est un outil minimal qui, après avoir ouvert un shell Telnet d'urgence et se supprimer (au cas où quelque chose ne va pas et que l'utilisateur doit redémarrer un téléviseur - le script continue de fonctionner mais ne sera plus exécuté sur le démarrage suivant), installe le L'application HomeBrew Channel via des appels de service DevMode standard et élève son service pour s'exécuter sans serrage en tant que racine également.
Vers 2021/06, LG a commencé à déployer une version patchée qui impliquait des correctifs pour les astuces que nous avons utilisées dans cette chaîne:
public
/etc/palm/luna-downloadmgr/download.json
start-devmode.sh
est maintenant expédié avec une signature et est maintenant vérifié à l'aide openssl
sur chaque démarragestart-devmode.sh
, pendant laquelle les téléviseurs mis à jour n'ont pas été en mesure d'utiliser le mode développeur.La plupart de ces atténuations sont trop triviales pour contourner, nous considérons donc toujours cette chaîne non fixée.
start-devmode.sh
Notre estimation initiale pour résoudre ces problèmes dans notre chaîne a été "quelques heures" - les correctifs théorisés de notre côté le 2021/05/27 Postez les tests et publiez pendant quelques mois. Désolé. :)