
CVE-2026-0073-Android-ADBD-bypass-POC汉化版
EVP_PKEY_cmp() путаница типов → неавторизованная ADB-оболочкаВ демоне ADB Android (adbd) обнаружена критическая уязвимость обхода аутентификации, позволяющая любому атакующему в локальной сети получить полный доступ к оболочке на целевом устройстве без авторизации пользователя.
Уязвимость находится в функции 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.
// Уязвимый шаблон кода в daemon/auth.cpp
if (EVP_PKEY_cmp(peer_key, stored_key)) { // ← ОШИБКА: -1 — это истина!
authorized = true;
}
pip install cryptography
# Интерактивная оболочка
python adb_tls_auth_bypass.py <ЦЕЛЕВОЙ_IP> <ПОРТ>
# Выполнение одной команды
python adb_tls_auth_bypass.py 192.168.1.42 37521 --cmd "id"
# Подробный режим (полный трассировка протокола)
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 до успеха.
Атакующий Цель (adbd)
│ │
│──── TCP-соединение ──────────────────►│
│──── CNXN (открытый текст) ────────►│
│◄─── STLS (запрос на повышение TLS)──│
│──── Ответ STLS ──────────────────►│
│ │
│════ Рукопожатие TLS 1.3 ════════│
│ (предоставлен клиентский сертификат EC P-256)│
│ EVP_PKEY_cmp(EC, RSA) → -1 │
│ -1 — истина → authorized=true │
│════════════════════════════════════│
│ │
│◄─── CNXN (информация об устройстве)──────│
│──── Открыть "shell:" ───────────────►│
│◄─── OK ────────────────────────│
│◄──► WRTE/OKAY (I/O оболочки)──────►│
│ │
[Полный доступ к оболочке]
| Требование |
|---|
⚠️ Важно: RSA-ключ должен находиться в файле /data/misc/adb/adb_keys, который заполняется через сопряжение USB-отладки (принятие диалога «Разрешить USB-отладку?»). Сопряжение через беспроводную отладку (adb pair) сохраняет ключ в другом месте (adb_known_hosts.pb), поэтому не подходит.
adb shell getprop ro.build.version.security_patch
Проверено и подтверждено на следующей конфигурации:
Ядро: 6.1.23-android14-4-00257-g7e35917775b8-ab9964412
Платформа: Android 14 (эмулятор Android Studio)
Этот форк включает следующие улучшения:
select() для кросс-платформенной поддержки-vCVE-2026-0073-Android-ADBD-bypass-POC/
├── adb_tls_auth_bypass.py # Основной скрипт эксплойта
└── README.md # Этот файл
Этот инструмент предназначен только для авторизованного тестирования безопасности и образовательных целей. Несанкционированный доступ к компьютерным системам является незаконным. Перед тестированием обязательно получите надлежащее разрешение. Авторы не несут ответственности за неправомерное использование данного программного обеспечения.
EVP_PKEY_cmpЕсли этот проект помог вашему исследованию, поставьте ⭐
EVP_PKEY_cmp() возвращает | Значение | Истина в C? | Результат |
|---|
1 | Ключи совпадают | ✅ | Авторизован (корректно) |
0 | Ключи различаются | ❌ | Отклонено (корректно) |
-1 | Несовпадение типов | ✅ | Авторизован (ОШИБКА) |
| Детали |
|---|
| Параметры разработчика | Включены на целевом устройстве |
| Беспроводная отладка | Включена (или ADB через TCP-порт 5555) |
| Сохранённый RSA-ключ | Устройство должно быть хотя бы один раз сопряжено через USB (/data/misc/adb/adb_keys) |
| Сетевой доступ | Атакующий должен иметь доступ к TCP-порту adbd |