
Sharp AQUOS R7(CVE-2026-43499)向けのデバイス固有Linux 5.10カーネルrootエクスプロイト。SELinuxをpermissiveにし、suデーモンとともに一時的なUID 0を付与します。
Sharp AQUOS R7 向けの GhostLock(CVE-2026-43499)のデバイス固有 Linux 5.10 ポート。検証済みのターゲットは、Android 14 ビルド 03.00.11、カーネル 5.10.237-android12-9-00013-gd09ef2e980e0-ab13968955(SM8450)を実行している AQUOS R7(Mineva、SGA202SH/A202SH)。以前の検証済みターゲットであるビルド 03.00.06 / カーネル 5.10.218-android12-9-00041-g124993efd06e-ab12385094 は、git タグ v1.0-030006 に保存されています。
これは aquos-r6-ghostlock(AQUOS R6、カーネル 5.4.61-qgki)のポートです。すべての定数 — KASLR の扱い、selinux_state のリークウィンドウ、task/cred のオフセット、ゼロ BSS スクラッチ領域 — は R7 カーネルに対して再導出および検証済みであり、R6 のスタックジオメトリは開始時の参考としてのみ使用しました。
実行に成功すると、SELinux が permissive の状態で UID 0 が得られ、小さな su コマンドデーモンが起動します。完全な Linux ケーパビリティセットは付与されず、変更は永続的ではありません。再起動すると純正カーネルの状態に戻ります。
aarch64-linux-android29 をターゲットとする Android NDK clang が必要です(NDK r30 でテスト済み):
make build/ghostlock510 # ~3.4 MB static binary
make strip # optional; ~0.6 MB, same behaviour
再現性(03.00.11 キャリブレーション):上記のツールチェーンでビルドされたこのソースは、オンデバイスの 03.00.11 テストで使用されたバイナリとバイト単位で同一(MD5 25fc1d5d0e92d36c56f00f983a49667d)です。リリースアセットは、まさにそのバイナリを llvm-strip した形式です(598,672 バイト、SHA-256 5c413a80e9fcc41032412f4e0e5183bc723dde9a2e0ace5a6d9c79681b04b9cd)。03.00.06 ビルドについてはタグ v1.0-030006 を参照してください(未ストリップの MD5 fa896ebd361519766b46cc2bab70dea2)。
バイナリ(リリースアセットまたは独自ビルド)をプッシュし、一度だけ実行します:
adb push ghostlock510 /data/local/tmp/ghostlock510
adb shell chmod 755 /data/local/tmp/ghostlock510
adb shell "setsid nohup /data/local/tmp/ghostlock510 --use-setattr --stamp3 --perm-pc --cred-swap --install-su --stamp-off 0xf0 --log /data/local/tmp/ghostlock510.log </dev/null >/dev/null 2>&1 &"
インストール済みの su クライアントを root コマンドに使用します(フルパスが必要):
adb shell "/data/local/tmp/su -c 'id; getenforce'"
# uid=0(root) gid=2000(shell) groups=2000(shell) context=u:r:kernel:s0
# Permissive
su はループバック TCP(ポート 9999)経由でエクスプロイトのデーモンと通信します。永続的な root シェルは接続されません。コマンドは行単位で処理され、su の中で su をネストすることはできません。対話型プログラム(vi、top など)は PTY を要求します。デーモンの上に対話型の su モードを実装することは今後の課題として残されています。
この正確なビルドで測定した結果(VERIFICATION.md を参照):
したがって、再起動して ghostlock510 を 1 回実行し、そのセッションが存続している間は再度実行しないでください。再起動がクリーンアップの手段です。
大規模な外部入力は、意図的にこのリポジトリに含めていません:
vmlinux/System.map から取得しました。デバイス上で実際に動作しているカーネルとのバイトレベルの同一性は、その boot_b イメージを介して検証しました(23 個の PT_LOAD セグメントすべてをセグメントごとに比較)。CVE 修正(5.10.y バックポート 2026-07-21)はこのツリー(HEAD 2025-08-20)より後のものであり、kernel/futex/core.c は 03.00.06 ビルドとバイナリレベルで同一です。つまり、脆弱性は依然として存在します。v1.0-030006):オフセットは Android CI カーネルビルド 12385094 から取得し、デバイスの boot_a イメージを介してバイト検証しました。--stamp3 / --use-setattr のアプローチはこれに着想を得ています(このリポジトリにはライセンスの記載はありません)。