
LG Root Exploit
Exploit racine LG
Auteur : [email protected]
Remerciements particuliers : Juggie, pour avoir signalé un binaire étrange dans une mise à jour (spritebud), ce qui m'a conduit à découvrir cette vulnérabilité.
Sujet : Course critique (race condition) dans le logiciel de sauvegarde de Sprite Software, installé par l'OEM sur les appareils Android de LG.
Identifiant CVE : CVE-2013-3685
Effet : Vulnérabilité exploitée localement avec une interaction minimale de l'utilisateur de l'appareil, permettant d'exécuter du code en tant qu'utilisateur root. Dans des circonstances particulières, il est possible d'exploiter cette vulnérabilité à l'insu de l'utilisateur de l'appareil.
Produits : "Backup" "spritebud"
Fournisseurs : Sprite Software LG Electronics Potentiellement d'autres fournisseurs
Versions concernées : spritebud 1.3.24 backup 2.5.4105 Probablement d'autres versions également
Appareils concernés (selon la configuration du firmware) : LG-E971 LG Optimus G LG-E973 LG Optimus G LG-E975 LG Optimus G LG-E975K LG Optimus G LG-E975T LG Optimus G LG-E976 LG Optimus G LG-E977 LG Optimus G LG-F100K LG Optimus Vu LG-F100L LG Optimus Vu LG-F100S LG Optimus Vu LG-F120K LG Optimus Vu LG-F120L LG Optimus LTE Tag LG-F120S LG Optimus LTE Tag LG-F160K LG Optimus LTE 2 LG-F160L LG Optimus LTE 2 LG-F160LV LG Optimus LTE 2 LG-F160S LG Optimus LTE 2 LG-F180K LG Optimus G LG-F180L LG Optimus G LG-F180S LG Optimus G LG-F200K LG Optimus Vu 2 LG-F200L LG Optimus Vu 2 LG-F200S LG Optimus Vu 2 LG-F240K LG Optimus G Pro LG-F240L LG Optimus G Pro LG-F240S LG Optimus G Pro LG-F260K LG Optimus LTE 3 LG-F260L LG Optimus LTE 3 LG-F260S LG Optimus LTE 3 LG-L21 LG Optimus G LG-LG870 LG (inconnu) LG-LS860 LG Mach LG-LS970 LG Optimus G LG-P760 LG Optimus L9 LG-P769 LG Optimus L9 LG-P780 LG Optimus L7 LG-P875 LG Optimus F5 LG-P875h LG Optimus F5 LG-P880 LG Optimus 4X HD LG-P940 LG Prada LG-SU540 LG Prada 3.0 LG-SU870 LG Optimus 3D Cube LG-US780 LG Lollipop Potentiellement d'autres appareils également.
Informations sur le produit :
"Backup" et "spritebud" sont un système de sauvegarde/restauration des paramètres et des applications écrit par Sprite Software et déployé sur les smartphones Android de LG. "Backup" est l'application frontale destinée à l'utilisateur final, et "spritebud" est le service qui exécute les fonctions de sauvegarde et de restauration.
Détails :
Le démon "spritebud" est lancé par les scripts init et s'exécute en tant qu'utilisateur root. Écoutant sur un socket Unix, le démon accepte les instructions de l'application "Backup". En utilisant une sauvegarde spécialement conçue, nous pouvons écrire dans n'importe quel fichier, modifier ses permissions et changer son propriétaire, étant donné que "spritebud" s'exécute sous l'utilisateur root.
La sauvegarde spécialement conçue contient les données de restauration de notre application d'exploitation, "com.cunninglogic.lgpwn". Les données comprennent un fichier factice de 50 Mo (a) utilisé pour agrandir notre fenêtre d'exploitation, le binaire su (b), un script (c) pour installer su, et un fichier texte (d) contenant le chemin vers notre script. Tous les fichiers appartiennent à l'application et sont accessibles en écriture/lecture/exécution par tous. Tous les fichiers sont restaurés dans l'ordre alphabétique. L'ensemble de la sauvegarde, après compression, fait environ 2 Mo. La structure de cette sauvegarde est la suivante :
drwxrwxrwx u0_a114 u0_a114 2013-05-28 20:13 files
./files:
Avant la restauration, notre application d'exploitation s'exécute, surveille le processus et attend. Pendant la restauration, le démon spritebud crée d'abord le répertoire files, puis définit ses permissions et son propriétaire. Ensuite, il décompresse et restaure le fichier "a", notre fichier factice de 50 Mo. Pendant la restauration de "a", notre application d'exploitation a le temps de créer un lien symbolique entre "d", notre fichier texte contenant le chemin complet vers notre script (c), et /sys/kernel/uevent_helper. Lors de la restauration du fichier "d", notre chemin est écrit dans uevent_helper. Lorsqu'un événement hotplug se produit (ce qui arrive toutes les quelques secondes), le chemin contenu dans uevent_helper est exécuté par le noyau et notre script (c) est exécuté, ce qui installe le binaire su (b).