
Programme idéal pour voler toutes les informations d'un appareil à distance via l'application AirDroid. [CVE-2019-9599] (https://www.exploit-db.com/exploits/46337)
Vidéo PoC Exploit : https://www.youtube.com/watch?v=0QDM224_6DM
CVE : https://nvd.nist.gov/vuln/detail/CVE-2019-9599
Exploit-db : https://www.exploit-db.com/exploits/46337
AirDroid est l'un des outils les plus connus et utilisés pour contrôler à distance un ordinateur, notamment via le navigateur.
Pour contrôler et gérer l'appareil qui héberge le service, une phase préalable d'acceptation de la part du client est nécessaire, où apparaît une 'Message Box' comme celle présentée ci-dessous :
Une fois la connexion acceptée, le responsable de la session peut gérer l'appareil depuis le navigateur, et effectuer entre autres les tâches suivantes :
Bien que je ne partage pas le PoC qui permet de contourner la validation côté client, j'ai partagé quelques scripts utilitaires pour l'extraction d'informations privilégiées une fois la connexion acceptée.
De même, j'ai partagé les scripts 'airdroid_dos.sh' et 'airdroid_fast_dos.sh', qui effectuent une action de type 'Remote DoS Application & System Crash', permettant de corrompre le service à distance, ainsi que de geler l'appareil mobile en remplissant toute la mémoire jusqu'à le rendre inopérant :
Nous commençons par exécuter le script 'AirDroidPwner.py', où il sera nécessaire de fournir notre CLÉ Shodan pour trouver un grand nombre d'appareils avec le service AirDroid en cours d'exécution :
# Utilisez votre clé API Shodan
SHODAN_API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
api = shodan.Shodan(SHODAN_API_KEY)
L'exécution se fait de la manière suivante :
python AirDroidPwner.py
Comme on le voit, très complexe. Après son exécution, via l'API Shodan dans un premier temps, toutes les IP indexées par Shodan pour la recherche effectuée (ici le service AirDroid, port 8888) sont stockées dans un tableau.
Une fois trouvées, un processus de validation est effectué pour vérifier que les hôtes trouvés ont bien le service activé, en se basant sur le code d'état renvoyé par la réponse du serveur après une simple requête.
Après avoir obtenu le nouveau tableau avec les éléments correspondant aux hôtes actifs, ceux-ci sont exportés dans un fichier nommé 'ips'. Actuellement, il existe les modes de fonctionnement suivants :
Après l'acceptation de la connexion (la requête est lancée contre les hôtes et il suffit que l'un d'eux l'accepte [Malheureusement, vous verrez que beaucoup le font...]), l'identifiant de session est stocké dans le paramètre 7bb, à partir duquel les requêtes sont ensuite gérées :
def get_identifier(r_json):
identifier_session = r_json["7bb"]
return identifier_session
Si le client n'accepte pas la connexion, ils sont stockés dans un vecteur de connexions refusées pour lancer ensuite une attaque de type (L'attaquant peut choisir <y/n>) :
En utilisant les 'Message Box', via une boucle principale d'itérations modifiables (par défaut 10) ainsi que des sous-boucles effectuant 3 000 requêtes en fil sur les victimes, on parvient à remplir la mémoire RAM de l'appareil, provoquant non seulement un déni de service distant de l'application mais aussi un Remote System Crash, où l'appareil devient complètement inopérant, forçant un redémarrage du système.
Cette vulnérabilité affecte non seulement la dernière version d'AirDroid mais aussi toutes les versions précédentes.
Si la victime accepte la connexion, voici les opérations actuellement implémentées par l'outil :
De plus, nous pouvons également exécuter les scripts 'airdroid_dos.sh' et 'airdroid_fast_dos.sh'. La principale différence entre les deux est que le second va directement à l'attaque, tandis que le premier effectue une brève vérification initiale pour voir si l'hôte a le service actif, etc. (Côté plus commercial).
Si vous souhaitez gérer l'accès depuis le navigateur web, une fois le script 'AirDroidPwner.py' exécuté et la liste des ips exportée dans le fichier 'ips', il est possible d'exécuter le script 'web_browser.py' pour ouvrir tous les services actifs dans un navigateur.
Tâches :