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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
GhostLock-for-OnePlus15T — (CVE-2026-43499)ブートローダー未解除のOnePlus 15T向けカーネルエクスプロイトプログラム | Kitploit
ツール/GitHubGitHub/cuteaplane/ghostlock-for-oneplus15t
Androidセキュリティ特権昇格脆弱性分析エクスプロイトモバイルセキュリティペイロード開発バイナリエクスプロイト
GitHubcuteaplane/ghostlock-for-oneplus15t

GhostLock-for-OnePlus15T

(CVE-2026-43499)ブートローダー未解除のOnePlus 15T向けカーネルエクスプロイトプログラム

リポジトリを見る
12127日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

GhostLock — OnePlus 15T

中文

ロック済みブートローダーを搭載した OnePlus 15T デバイスを対象としたカーネルエクスプロイトです。CVE-2026-43499 を使用して、ブートローダーのアンロックや boot.img の変更を行うことなく root アクセスを取得します。

許可されたセキュリティ研究および教育目的に限ります。

元の GhostLock-for-OnePlus リポジトリ を改変したもので、OnePlus 15T (PLZ110 / SM8850 / Snapdragon 8 Elite) の物理メモリレイアウトと CPU タイミングに適合させています。


目次

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

脆弱性の概要

項目詳細
CVECVE-2026-43499
タイプFutex PI (Priority Inheritance) Use-After-Free
影響範囲Linux カーネル 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カーネルファームウェアステータス
OnePlus 15TPLZ110SM8850 (Snapdragon 8 Elite)6.12.38-android16-5-g844001fb8721-ab14552068-4kColorOS 16.0.9.400✅ 検証済み

Ace 6T および OnePlus 15 については、元のリポジトリを参照してください。


前提条件

ksud (KernelSU に必要)

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

入手先備考
ReSukiSU APK (推奨)ReSukiSU をインストールします。APK には libksud.so が同梱されています
CI リリース

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. 物理メモリ R/W (パイプ)

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)

コアモジュール概要


新しいデバイスの追加

このリポジトリは改変されています。詳細は元のリポジトリを参照してください。


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 修正)

ライセンス

許可されたセキュリティ研究および教育目的に限ります。

ツールをダウンロード
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 ハッシュ衝突