
オリジナルのPythonエクスプロイトをCに変換する
CVE‑2026‑0073 は、Android の ADB デーモン (adbd) における論理バグであり、ワイヤレスデバッグが有効で、かつ一度でも任意のコンピューターとペアリングされたデバイスに対して、攻撃者が TLS 相互認証をバイパスしてリモートシェルを開くことを可能にします。根本原因は、単一の API の誤用です。OpenSSL の EVP_PKEY_cmp() の戻り値が、3 値の結果ではなくブール値として扱われます。
アンドロイドの開発者向けオプションからワイヤレスデバッグを有効にすると、デバイスはランダムな TCP ポートで待ち受ける adbd インスタンスを起動します。
注: この機能は Android 11 以降で導入されました。
プロトコルには 2 つのフェーズがあります。
adbd はクライアントに証明書の提示を要求しますadbd はその証明書から公開鍵を抽出します/data/misc/adb/adb_keys に保存されているすべての承認済み RSA 鍵と比較します。鍵は以前のペアリング中にそこに配置されます (このエクスプロイトでは、少なくとも 1 つの鍵がそこに存在する必要があります)shell ユーザーとしてシェルコマンドを送信できます
鍵の比較には OpenSSL の EVP_PKEY_cmp(key1, key2) が使用され、これは次の値を返します。ファイル daemon/auth.cpp 内の脆弱な関数 adb_tls_verify_cert() はおおよそ次のようになります。
int cmp = EVP_PKEY_cmp(stored_rsa_key, peer_key);
if (cmp) {
authorised = true;
}
if(cmp) は cmp が非ゼロである限り true を返すため、EVP_PKEY_cmp() が -1 を返すと認証が行われます。つまり、保存されている鍵が RSA であるため、クライアントが EC または ed25519 証明書を提示すると、関数は -1 を返し、攻撃者は承認されたアクセスを獲得します。
ターゲット: ワイヤレスデバッグが有効で、キーストアに少なくとも 1 つの RSA 鍵がある Android デバイス (誰かによって一度でもペアリングされている)。
クリアテキストハンドシェイク: 攻撃者は adbd の TCP ポートに接続し、CNXN/STLS を交換します。
EC 証明書を使用した TLS ハンドシェイク: 攻撃者は一時的な EC P‑256 鍵と自己署名証明書を生成します。この鍵は意図的に RSA ではありません。
欠陥のある比較: EVP_PKEY_cmp(RSA, EC) は ‑1 を返す → if (cmp) が true になる → adbd はトランスポートを承認済みとしてマークします。
TLS 後: 攻撃者はホスト CNXN (トランスポートをリセットする) の送信を回避し、大きな delayed_ack ウィンドウを持つ shell: ストリームを直接開きます。
結果: シェルユーザーとしてのリモートシェル。ユーザーの操作なし、通知なし、正当な秘密鍵を保持する必要もありません。
Python スクリプトは、攻撃マシンに python 3 インタープリターと cryptography ライブラリがインストールされている必要があります。C での実装は、システムの OpenSSL/libssl 以外の外部依存関係を持たないスタンドアロンのバイナリにコンパイルされます。OpenSSL/libssl は事実上すべての Linux システムにデフォルトで存在します。これにより、配備の障壁が劇的に下がります。さらに、C プログラムは任意のターゲットアーキテクチャ (x86_64、ARM、MIPS) 向けにクロスコンパイルできます。つまり、エクスプロイトはルーターや Raspberry Pi などの組み込みデバイス、あるいは攻撃者として動作する別の Android デバイス上でも、python 環境を必要とせずにコンパイルして実行できます。そして、コンパイルされた C バイナリはシンボルを除去したり、(UPX で) パックしたりできるため、逆アセンブラなしでは不透明であり、python スクリプトよりもステルス性が高くなります。
エクスプロイトの実行: ワイヤレスデバッグインターフェースの IP と PORT を指定すると、デバイス上でシェルを取得できます。
docker build -t adb_bypass .
docker run -it --network host adb_bypass <IP> <PORT>
電卓を起動する
am start -n com.sec.android.app.popupcalculator/com.sec.android.app.popupcalculator.Calculator
LLM はエクスプロイトを python から C に移植するために使用されました。元のエクスプロイトは こちら です。移植は 1:1 では正しくなく、多くの問題に直面したため、コード分析とやり取りを繰り返すループが、移植のバグを修正して完全に動作するエクスプロイトに到達するために必要でした。