Un chercheur a trouvé un sérieux problème de sécurité dans ES File Explorer, l’une des applications les plus utilisées sur Android. Elle lance en effet un serveur web local en tâche de fond, permettant à quiconque sur le même réseau de nombreuses actions.
Le chercheur français Baptiste Robert, plus connu sous le pseudonyme Elliot Alderson (@fs0c131y) sur Twitter, a mis la main sur un trou béant de sécurité au sein de l’application ES File Explorer. Comptant aujourd’hui plus de 100 millions d’installations, elle sert à manipuler les données présentes sur l’appareil mobile.
Problème, comme l’explique Baptiste Robert dans une suite de tweets, l’application ouvre en arrière-plan un serveur web. Quelle que soit la raison de l’éditeur (EStrongs), ce composant peut être exploité pour lancer depuis un ordinateur sur le même réseau de multiples opérations : liste des applications, images, vidéos et sons présents sur le stockage (interne ou carte mémoire), téléchargement de ces données, voire lancement arbitraire de n’importe quelle application.
Il a publié ce matin son prototype d’exploitation (proof-of-concept) sous la forme d’un script Python sur un dépôt GitHub, accompagné d’une vidéo sur YouTube pour prouver ses dires.
Installer soi-même l’environnement de test de la faille
L’ampleur des possibilités n’est guère complexe à tester. Il suffit d’installer l’environnement Python, en récupérant l’exécutable depuis le site officiel puis en suivant simplement les instructions.
Une fois Python installé, rendez-vous dans le dépôt GitHub créé par le chercheur, puis on télécharge (bouton vert) l’archive Zip, que l’on décompresse ensuite dans un dossier spécifique. Ouvrez ensuite un terminal, PowerShell ou une invite de commande, selon le système utilisé, pour exécuter la commande suivante depuis le dossier du script :
pip install -r requirements.txt
Une petite phase d’installation commence, au terme de laquelle vous pourrez vérifier que le script est prêt via la commande :
python poc.py list
Si tout va bien, le script devrait renvoyer une liste de commandes à utiliser via des commutateurs.
Avant de se lancer dans ces tests, deux conseils liés au script, identifiés dans nos échanges avec Baptiste Robert. D’une part, à la ligne 8, vous trouverez le texte « network = '192.168.0.'
». Il faudra peut-être changer le 0 en 1 si votre réseau local utilise la plage d'adresses IP 192.168.1.
D’autre part, à la ligne 137, le texte « for ip in range(0, 255):
» définit la plage d’adresses IP qui va être scannée par le script pour chercher l’appareil Android. L'exécution de recherches aussi larges peut être longue. Si vous connaissez l’adresse IP de votre smartphone ou tablette, autant changer les valeurs dans le code. Par exemple, si elle se termine par 23, vous pourrez par exemple indiquer « range(22, 24)
». Les commandes renverront alors beaucoup plus rapidement leurs résultats.
S’essayer aux petits délices du serveur laissé par ES File Explorer
Une fois l’environnement en place, on peut s’amuser avec les commandes du script. Elles commencent toutes par python poc.py –cmd puis nécessitent le nom de commande. Par exemple :
Python poc.py --cmd getDeviceInfo
Si tout est installé correctement et que l’application a été ouverte au moins une fois sur l’appareil Android, la commande doit renvoyer le nom de l’appareil. Si celle-ci fonctionne, les autres en feront autant.
Sur la capture ci-dessus, on peut ainsi voir les différents résultats renvoyés par les commandes d’accès aux informations de l’appareil, aux applications installées, aux images présentes sur le stockage interne, ainsi que l’ordre de lancement arbitraire à une application, ici Discord puis Mattermost.
Dans le cas des fichiers, il devient alors possible de récupérer chaque adresse pour déclencher les téléchargements qui nous intéressent via la commande python poc.py -g XXX où XXX est le chemin copié depuis les résultats. La commande doit être répétée pour chaque fichier, qui s’enregistre alors dans le répertoire d’exécution du script. Évidemment, on peut envisager une application qui automatiserait le processus.
Notez qu’à partir du moment où ES File Explorer a été lancé au moins une fois, toutes ces commandes peuvent être exécutées quand le téléphone est verrouillé ou que l’application est en arrière-plan, y compris si elle n’a plus été lancée depuis des semaines. Le serveur web, lui, reste actif.
La question du pourquoi
Pour Baptiste Robert, il ne fait aucun doute que cette faille – qui porte désormais le numéro CVE-2019-6447 – est présente « à dessein ». Il s’agirait donc d’une volonté de l’éditeur de laisser en place un composant dont le détournement, au demeurant très simple, peut être lourd de conséquences.
Mais l’exploitation ne pouvant se faire que depuis le même réseau local, le problème n’est-il pas particulièrement circonscrit ? Non pour le chercheur, qui rappelle le cas simple des réseaux publics. En outre, l’éditeur EStrongs a été racheté il y a plusieurs années par un conglomérat chinois. « L’application a bien changé depuis », notamment à travers une déferlante de publicités pour les utilisateurs gratuits. L’histoire s’inscrit donc dans un contexte d’espionnage par la Chine bien difficile à prouver, mais qui fait le malheur de Huawei actuellement.
Il pourrait aussi s’agir d’une fonction parfaitement assumée pour autoriser les utilisateurs à manier facilement leurs données depuis un ordinateur relié au même réseau Wi-Fi. Dans ce cas, le développement viendrait se placer dans la même catégorie que SuperFish chez Lenovo : pas de réelle intention de nuire, juste une fonctionnalité très mal conçue, par un ou plusieurs développeurs ne faisant que peu de cas de la sécurité.
Nous avons interrogé l’entreprise sur cette découverte, mais elle ne nous a pas encore répondu. Nos confrères de TechCrunch n’ont pas eu plus de succès.
Notez enfin que le travail de Baptiste Robert fait déjà des émules. Lukas Stefanko, chercheur chez ESET, a déjà identifié une autre faille locale dans ES File Explorer, permettant des attaques de type MITM (par l’homme du milieu). Ce qui n’étonnera personne dans le cas d’un serveur échangeant ses données en clair, sans chiffrement du transport. Quant au chercheur français, il dit avoir trouvé depuis deux autres failles, aux détails encore confidentiels.