Android ADB: Shell Remoto Sem uma Chave Confiável

BARGHEST divulgou o CVE-2026-0073, uma vulnerabilidade de alta severidade no adbd do Android. Se o ADB sobre TCP estivesse habilitado em um dispositivo — por exemplo, via depuração sem fio — um atacante remoto poderia autenticar como um cliente ADB confiável sem possuir a chave privada de um computador anteriormente autorizado.
O problema estava localizado em adbd_tls_verify_cert. O Android comparava a chave pública RSA armazenada em /data/misc/adb/adb_keys com a chave extraída do certificado TLS do cliente:
if (EVP_PKEY_cmp(known_evp.get(), evp_pkey.get())) { verified = true; }
O problema é que EVP_PKEY_cmp não retorna um valor Booleano. Ele retorna:
1 se as chaves corresponderem 0 se chaves do mesmo tipo não corresponderem um valor negativo para erros ou tipos de chave incompatíveis
Se um atacante fornecesse um certificado não-RSA — por exemplo, usando EC P-256 ou Ed25519 — a comparação com a chave RSA armazenada retornava -1. Em C/C++, qualquer valor diferente de zero é avaliado como verdadeiro, fazendo com que o adbd trate o certificado como verificado com sucesso.
A exploração exigia implementar a lógica de um cliente ADB: conectar ao ADB-over-TCP, mudar a conexão para o modo TLS, apresentar um certificado não-RSA e então abrir um shell remoto após bypassar a verificação.
O shell resultante era executado com uid=2000 (shell) e permitia acesso a logs, informações de estado do pacote e execução de comandos como pm, am, settings e run-as.
💬 Discutir
Vulnerabilidades
8.8
CVE-2026-0073
Produto
Adb
Adbd
Android
Wireless Debugging
Publicado
2026-05-13, 11:33