
Un outil pour récupérer les identifiants de connexion des caméras IP Netwave en utilisant une vulnérabilité de vidage mémoire (CVE-2018-17240)
Un outil permettant de récupérer les identifiants de connexion des caméras IP Netwave en exploitant une vulnérabilité de vidage mémoire (CVE-2018-17240). Ce projet s'inspire de expcamera et offre des améliorations en termes de performance et d'efficacité. Cet outil fonctionne sur toutes les plateformes car il n'utilise aucun outil CLI Linux via des commandes shell, contrairement à expcamera.
Sur les systèmes Linux, /proc/kcore est un fichier virtuel qui expose la mémoire système sous forme d'image core ELF. Ces caméras exécutent uClinux sur un cœur ARM7 sans MMU, il n'y a donc qu'un seul espace d'adressage plat - le vidage contient la mémoire de l'application de la caméra aux côtés de celle du noyau, y compris le blob de configuration qu'elle conserve dans une variable globale.
Il est accessible car le serveur web présente une lecture de fichier arbitraire non authentifiée : le gestionnaire de requêtes supprime exactement une barre oblique initiale et appelle fopen() sans filtrage de traversée, servant le résultat en tant que root. //proc/kcore se résout donc en /proc/kcore, c'est pourquoi le chemin de la requête comporte une double barre oblique initiale.
Le blob de configuration a une disposition fixe, les identifiants peuvent donc être lus directement à partir de celui-ci :
| Offset | Champ |
|---|---|
0x00 | uint32 magic, toujours 0x440C9ABD |
0x04 | uint32 checksum |
0x08 | uint32 length |
0x0C | char device_id[13] 12 caractères hexadécimaux majuscules plus un NUL |
0x36 | struct { char name[13]; char pwd[13]; uint8 pri; } users[8] |
L'outil lit en flux /proc/kcore et recherche le magic dans chaque bloc. Une fois trouvé, il renvoie le compte disposant des privilèges les plus élevés dans la table des utilisateurs.
Cet outil prend en charge deux manières différentes de spécifier les hôtes à vérifier pour la vulnérabilité. Les hôtes doivent être au format ip:port.
| Argument | Description |
|---|---|
--host | Un hôte à vérifier, peut être spécifié plusieurs fois |
--file | Un fichier contenant une liste d'hôtes à vérifier |
Cet outil prend en charge la récupération d'hôtes depuis Censys, Shodan et ZoomEye pour vérifier la vulnérabilité.
| Moteur de recherche IoT | Argument | Variables d'environnement requises |
|---|---|---|
| Censys | --censys | CENSYS_PERSONAL_ACCESS_TOKEN |
| Shodan | --shodan | SHODAN_API_KEY |
| ZoomEye | --zoomeye | ZOOMEYE_API_KEY |
Censys utilise l'API Platform. Créez un jeton d'accès personnel sur platform.censys.io ; définissez également CENSYS_ORGANIZATION_ID pour facturer la recherche à une organisation plutôt qu'à votre portefeuille gratuit. Notez que le point de terminaison de recherche de Platform nécessite un plan payant, car les comptes gratuits sont limités aux points de terminaison de lookup.
$ pip install -r requirements.txt
Usage: main.py [-h] (--host HOST | -f FILE | --censys | --shodan | --zoomeye) [-n NUMBER] [-c CONCURRENT] [-t TIMEOUT] [-o OUTPUT]
A tool for retrieving login credentials from Netwave IP cameras using a memory dump vulnerability (CVE-2018-17240)
Options:
-h, --help show this help message and exit
--host HOST A host to check, can be specified multiple times
-f, --file FILE A file containing the hosts to check
--censys Retrieve hosts from the Censys Platform API using the personal access token specified with the CENSYS_PERSONAL_ACCESS_TOKEN environment variable
--shodan Retrieve hosts from the Shodan API using the API key specified with the SHODAN_API_KEY environment variable
--zoomeye Retrieve hosts from the ZoomEye API using the API key specified with the ZOOMEYE_API_KEY environment variable
-n, --number NUMBER The number of hosts to retrieve from the IoT search engine, by default 100
-c, --concurrent CONCURRENT
The number of hosts to check concurrently, by default 25
-t, --timeout TIMEOUT
The timeout in seconds for retrieving the credentials from the memory dump of each host, by default 300
-o, --output OUTPUT The file to write the credentials to, by default credentials.txt
Cet outil est destiné à des fins éducatives uniquement. Les contributeurs de ce projet ne sauraient être tenus responsables des dommages ou problèmes juridiques pouvant découler de l'utilisation de cet outil. Utilisez-le à vos propres risques.