Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
GhostLock-for-OnePlus — (CVE-2026-43499)ブートローダーがロック解除されていない OnePlus デバイス向けカーネルエクスプロイトプログラム。 | Kitploit
ツール/GitHubGitHub/p2p3p/ghostlock-for-oneplus
Androidセキュリティ特権昇格エクスプロイトポストエクスプロイト学習と教育ペイロード開発バイナリエクスプロイト
GitHubp2p3p/ghostlock-for-oneplus

GhostLock-for-OnePlus

(CVE-2026-43499)ブートローダーがロック解除されていない OnePlus デバイス向けカーネルエクスプロイトプログラム。

リポジトリを見る
3613191ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

GhostLock — OnePlus

中文

ロックされたブートローダーを搭載した OnePlus 端末を対象とするカーネルエクスプロイトです。CVE-2026-43499 を使用して、ブートローダーのロック解除や boot.img の変更なしに root 権限を取得します。

認可されたセキュリティ研究および教育目的のみに使用できます。


目次

  • 脆弱性の概要
  • 対応デバイス
  • 前提条件
  • ビルド
  • 使用方法
  • 実行モード
  • 技術詳細
  • ファイル構成
  • 新しいデバイスの追加
  • FAQ

脆弱性の概要

項目詳細
CVECVE-2026-43499
種別Futex PI(優先度継承)Use-After-Free
影響範囲Linux kernel 2.6.39 ~ 7.1
修正バージョンMainline 7.1(コミット 3bfdc63936dd)
Android の状態GKI 6.12.x は依然として脆弱

根本原因

pselect6 システムコールは fd_set をカーネルスタックにコピーします。futex PI ウェイター機構と組み合わせると、解放されたスタックフレームが rt_mutex_waiter 構造体として再割り当てされる可能性があります。PI チェーンの走査中に、rb-tree のリバランス処理によって制御されたデータが任意のカーネルアドレスに書き込まれます。

チェーン

root@kitploit:~
futex PI UAF (CVE-2026-43499)
  ├─ Forge rt_mutex_waiter object
  ├─ Control kernel stack via pselect/select fd_set layout
  ├─ Trigger rt_mutex PI operation for arbitrary write
  ├─ Write 1: selinux_state.enforcing = 0
  └─ Write 2: cred → init_cred (uid=0, full capabilities)

対応デバイス

同じ SoC ファミリー、Android 16、またはカーネル 6.12.x を搭載した他の OnePlus 端末は、boot.img のオフセット抽出によって対応できます。


前提条件

ksud(KernelSU に必須)

GhostLock は権限昇格を処理します。KernelSU のインストールには ksud が必要です(KMI 固有の kernelsu.ko に同梱されています)。

入手元備考
ReSukiSU APK(推奨)ReSukiSU をインストールしてください。APK には libksud.so がバンドルされています。

ksud がない場合、エクスプロイトは依然として uid=0 の root シェルを取得できますが、KernelSU はインストールされず、su は永続化されません。


ビルド

前提条件

  • Android NDK (r25+)
  • ANDROID_NDK_HOME または ANDROID_NDK_ROOT を設定します。

ビルド

root@kitploit:~
# Default (API 35)
make

# Specify API level
make API=34

# Specify NDK path
NDK=/path/to/android-ndk make

成果物

ghostlock — 静的リンクされた ARM64 ELF 実行ファイルです。


使用方法

初回セットアップ

root@kitploit:~
# 1. Enable ADB TCP mode
adb tcpip 5555

# 2. Push ADB key (required for bootstrap mode)
adb push ~/.android/adbkey /data/local/tmp/a/adbkey

# 3. Push the exploit
adb push ghostlock /data/local/tmp/a/e
adb shell chmod 755 /data/local/tmp/a/e

初回成功後、resetprop が自動的に persist.adb.tcp.port=5555 を設定するため、以降の再起動では完全自動実行が可能になります。


実行モード

フルエクスプロイト(ADB シェルコンテキスト)

root@kitploit:~
/data/local/tmp/a/e
  • perf が利用可能で、正確な子プロセスの task_struct リークが可能
  • 2段階: W1 で SELinux 無効化 → W2 で権限昇格 → KernelSU ロード

ブートストラップモード(アプリコンテキスト、seccomp 制限あり)

root@kitploit:~
/data/local/tmp/a/e --bootstrap
  1. Write 1 → SELinux を無効化
  2. 解放された権限を使用して setprop で ADB TCP 5555 を有効化
  3. 内蔵 Mini ADB クライアントが 127.0.0.1:5555 に接続
  4. 事前にプッシュされたキーによる RSA 認証
  5. ADB シェル経由でフルエクスプロイトを実行(seccomp なし)

Write 1 のみ

root@kitploit:~
/data/local/tmp/a/e --write1
  • 最大 20 回試行
  • デバッグや一時的な SELinux 無効化に有用

技術詳細

1. 実行時カーネルマッチング

オフセットは src/devices/offsets.h のルックアップテーブルに格納され、uname -r をキーとします。プログラムは起動時に自動マッチングを行い、未知のカーネルは拒否されます。

root@kitploit:~
static const struct kernel_offsets known_offsets[] = {
  OFFSETS_ENTRY("6.12.38-android16-5-...-ab14275539-4k", ...),
  OFFSETS_ENTRY("6.12.38-android16-5-...-ab14552068-4k", ...),
  OFFSETS_ENTRY("6.12.23-android16-5-...-ab14541642-4k", ...),
  { .uname_r = NULL }  /* sentinel */
};

オフセットのソース

BTF 検証済み構造体

2. KASLR バイパス

SLIDE モード — boot_id リーク

カーネルポインタが制限されている場合(kptr_restrict)、カーネルアドレスで上書きされた boot_id を介してベースアドレスをリークします。

root@kitploit:~
Read /proc/sys/kernel/random/boot_id
  └─ UUID contains nfulnl_logger address
      └─ KASLR slide = leaked_addr - image_offset
          └─ kaslr_base

FOPS/CFI モード — fops テーブルリーク

ashmem デバイスにアクセスできる場合、configfs の読み書きプリミティブを使用して ashmem fops テーブルから関数ポインタを読み取り、KASLR オフセットを計算します。

3. カーネルヒープスプレー

order-3(32KB)ページ上にカーネルオブジェクトを偽造します。

  • 偽の file_operations — ashmem miscdevice の fops ポインタを乗っ取ります
  • 偽の rt_mutex_waiter — PI チェーンのウェイターノードをシミュレートします
  • 偽の task_struct — PI 走査中のタスク参照
  • 偽の rt_mutex(ロック) — 正しいウェイター/オーナー情報

SKB(ソケットバッファ) + KernelSnitch を介して実装されます。

  • KernelSnitch — futex ハッシュ衝突による mm_struct アドレスのリーク
  • SKB スプレー — sendmsg によるカーネルヒープの充填

4. 物理メモリ読み書き(パイプ)

KASLR ベースを取得した後、パイプバッファを使用して物理レベルでのメモリアクセスを行います。

root@kitploit:~
1. Locate pipe buffer in physmap
2. Forge pipe_buffer ops table pointing to known pipe_buf_ops
3. Hijack pipe_buffer.page to target physical address
4. Arbitrary physical read/write via normal pipe operations

対応: pipe_read64、pipe_write64、pipe_phys_read_data、pipe_phys_write_data

5. 2段階書き込み

Write 1 — SELinux の無効化

root@kitploit:~
Target: selinux_state.enforcing (offset 0x00)
Method: child-node PI write → forge waiter __rb_parent_color
        pointing to selinux_enforcing - 8
        rb-tree rebalance writes 0x00

Write 2 — Root への権限昇格

root@kitploit:~
Target: child process cred pointer
Method: 1. fork child → perf_find_task() locate task_struct
        2. calculate cred field offset
        3. child-node PI write → cred = init_cred (uid=0, full caps)
        4. clear seccomp (TIF_SECCOMP + seccomp struct zeroed)

cred の上書き後に、ケーパビリティの読み戻し検証が実行されます。

6. 内蔵 Mini ADB クライアント

src/core/miniadb.c — ブートストラップモード用の軽量 ADB プロトコルクライアントです。

root@kitploit:~
1. TCP connect 127.0.0.1:5555
2. A_CNXN → connection request
3. A_AUTH → RSA token challenge
4. dlopen("libcrypto.so") → PEM_read_bio_RSAPrivateKey → RSA_sign
5. A_AUTH (AUTH_SIGNATURE) → signed response
6. A_CNXN → connection established
7. A_OPEN "shell:/data/local/tmp/a/e" → full exploit

SHA-1 および SHA-256 署名アルゴリズムに対応しています。


ファイル構成

root@kitploit:~
ghostlock-oneplus/
├── Makefile                        # Build configuration (NDK cross-compile)
├── README.md                       # Documentation
├── src/
│   ├── core/                       # Core exploit code
│   │   ├── main.c                  # Entry point: two-stage write + root shell
│   │   ├── fops.c                  # FOPS/CFI mode: pselect route, PI write, KASLR leak
│   │   ├── util.c                  # Utilities: heap spray, KASLR, kernel R/W primitives
│   │   ├── slide.c                 # SLIDE mode: boot_id KASLR leak + pselect route
│   │   ├── pipe.c                  # Pipe buffer physical memory R/W (physrw)
│   │   ├── root.c                  # Cred overwrite, seccomp clear, root child mgmt
│   │   ├── miniadb.c              # Built-in ADB client (TCP + RSA auth)
│   │   ├── common.h               # Global macros, structs, declarations, constants
│   │   ├── target.h               # Target memory layout / struct offsets / KASLR params
│   │   ├── offset.h               # Compile-time target config bridge (#include TARGET_CONFIG_H)
│   │   └── kernelsnitch/          # KernelSnitch — mm_struct address leak
│   │       ├── kernelsnitch.h     # Core algorithm: futex hash collision + brute-force
│   │       ├── futex_hash.h       # Futex hash function
│   │       ├── timeutils.h        # CPU timestamp measurement (RDTSC)
│   │       └── utils.h            # Helper macros (pr_info / SYSCHK / ASSERT etc.)
│   └── devices/                   # Device offset tables
│       ├── offsets.h              # Aggregate all device offsets (lookup table + sentinel)
│       ├── ace6t/offsets.h        # OnePlus Ace 6T offsets (2 kernel versions)
│       └── op15/offsets.h         # OnePlus 15 offsets (1 kernel version)
└── tools/                         # Offset extraction toolchain
    ├── extract_target.py          # Extract kallsyms global symbol offsets (28 items)
    └── extract_btf.py             # Extract BTF struct field offsets (57 items)

コアモジュール概要


新しいデバイスの追加

対象デバイスの boot.img のみが必要です。root やデバイスへのアクセスは不要です。

オフセットの抽出

root@kitploit:~
# 1. Extract kernel from boot.img
python -c "import struct; d=open('boot.img','rb').read(); \
           open('kernel','wb').write(d[4096:4096+struct.unpack_from('<I',d,8)[0]])"

# 2. Get kallsyms (root: adb shell su -c 'cat /proc/kallsyms' > kallsyms.txt)
#    Or from vmlinux: nm vmlinux > kallsyms.txt

# 3. Extract global symbol offsets
python tools/extract_target.py     # 28 offsets, auto-verified

# 4. Extract struct field offsets
python tools/extract_btf.py kernel  # 57 offsets, auto-verified

適用手順

  1. src/devices/<name>/offsets.h を作成します(ace6t/offsets.h を参照)
  2. それを src/devices/offsets.h に #include します
  3. 必要に応じて src/core/target.h の KIMAGE_TEXT_BASE とメモリレイアウトを更新します
  4. 再ビルドします

クロスデバイス調整

項目備考

FAQ

Q: 実行時に出力がありませんか?

ADB シェルで実行していることを確認してください。アプリコンテキストでは --bootstrap が必要です。

Q: "no offsets for this kernel" と表示されますか?

お使いのカーネルバージョンはまだサポートされていません。新しいデバイスの追加 に従ってオフセットを抽出し、再ビルドしてください。

Q: Write 1 が失敗し続けますか?

  • 正しい CPU コアにピン留めされていることを確認してください(CORE マクロ)
  • PSELECT_ENTER_DELAY_USEC のタイミングを調整してください
  • 干渉するプロセスがないか確認してください

Q: Write 2 で perf が 0 を返しますか?

  • seccomp が perf_event_open をブロックしていないか確認してください(アプリコンテキストでは --bootstrap を使用)
  • KASLR バイパスが成功したか確認してください(kaslr_base が有効)

Q: KernelSU がロードされませんか?

  • ksud が存在し、実行可能であることを確認してください
  • ネットワークポリシーファイルの整合性を確認してください(load_policy の修正)

ライセンス

認可されたセキュリティ研究および教育目的のみに使用できます。

ツールをダウンロード
デバイスコードネームSoCカーネルファームウェアステータス
OnePlus Ace 6TPLR110SM8845 (Snapdragon 8s Elite)6.12.38-android16-5-...-ab14275539-4kColorOS 16.0.2.403✅ 検証済み
OnePlus Ace 6TPLR110SM8845 (Snapdragon 8s Elite)6.12.38-android16-5-...-ab14552068-4kColorOS 16.0.8.301✅ 検証済み
OnePlus 15PLK110SM8845 (Snapdragon 8s Elite)6.12.23-android16-5-...-ab14541642-4k—✅ 検証済み
CI リリース
ReSukiSU CI からダウンロードします(ksud-aarch64-linux-android.zip)
種類数抽出方法
kallsyms グローバルシンボル28tools/extract_target.py
BTF 構造体フィールド57tools/extract_btf.py
導出値9自動計算
固定定数12ハードコード
構造体フィールド数目的
task_struct17プロセス記述子、cred、seccomp
rt_mutex_waiter6UAF 偽造対象
cred4資格情報、ケーパビリティ
seccomp3seccomp フィルタの状態
pipe_inode_info11パイプバッファ操作
file_operations13偽の fops テーブル
mm_struct1メモリ記述子の所有者
モジュールファイル役割
エントリmain.cCLI 解析、W1/W2 ディスパッチ、ブートストラップフロー
PI ルートfops.c / slide.cpselect/select スタックレイアウト、futex PI チェーン操作
KASLRutil.c / fops.c / slide.cデュアルモードバイパス: boot_id リーク + fops テーブルリーク
ヒープスプレーutil.corder-3 ページ割り当て、SKB スプレー、オブジェクトレイアウトの偽造
物理 R/Wpipe.cパイプバッファの乗っ取り、任意の物理メモリアクセス
権限昇格root.ccred の上書き、ケーパビリティ検証、seccomp クリア
ADBminiadb.c軽量 ADB プロトコルクライアント、RSA 認証
リークエンジンkernelsnitch/mm_struct 位置特定のための futex ハッシュ衝突
VA_BITS48 vs 39 → target.h のメモリレイアウトを更新
タイミングcommon.h の PSELECT_* パラメータを調整
AshmemC vs Rust 実装 → extract_target.py のシンボルマッチングを更新
SecureguardOnePlus 以外のデバイスでは展開が簡素化される場合があります