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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ghostlock-k419-adapter — GhostLock (CVE-2026-43499) アダプター(4.19.152-perf+ Android カーネル用) | Kitploit
ツール/GitHubGitHub/xiaobailovesstirring/ghostlock-k419-adapter
Androidセキュリティ特権昇格エクスプロイトフレームワークエクスプロイトポストエクスプロイトペネトレーションテストモバイルセキュリティペイロード開発バイナリエクスプロイト

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
GitHubxiaobailovesstirring/ghostlock-k419-adapter

ghostlock-k419-adapter

GhostLock (CVE-2026-43499) アダプター(4.19.152-perf+ Android カーネル用)

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

GhostLock — OnePlusのロック済みブートローダーのジェイルブレイク

ブートローダーがロックされたOnePlus/OPPO/realmeデバイス向けのカーネルエクスプロイト。ブートローダーのロック解除やブートイメージの改変なしに、root権限の取得とKernelSUのインストールを実現します。複数デバイスのオフセットテーブルにより、カーネルバージョンを実行時に自動検出します。

OnePlus Ace 6T上でKernelSU(LKM、ジェイルブレイクモード)とともに動作するGhostLock

脆弱性

CVE-2026-43499 — Futex PI(優先度継承)Use-After-Free

影響を受けるLinuxカーネル: 2.6.39〜7.1。メインライン7.1で修正済み(コミット3bfdc63936dd)。Android GKI 6.12.xは依然として脆弱です。

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

対応デバイス

検証済み

抽出済みオフセット(デバイステスト待ち)

デバイスSoCカーネル備考
OnePlus 15T (PLZ110)SM88456.12.38-...-ab14552068Ace 6Tと同じカーネル。QEMUでSP diff=-64を検証済み。

実現不可(スタックレイアウト非互換)

pselectスタックオーバーレイは、解放されたrt_mutex_waiterがstack_fdsバッファのユーザー制御可能な領域内に配置された場合にのみ機能します。ウェイターの配置場所はカーネルバージョンではなく、コンパイラの出力(PGO + LTO)によって決まります。詳細はスタックレイアウトを参照してください。

エクスプロイトの流れ

デバイスの機能に応じて自動選択される2つのrootパス:

パスA: UMH Root(推奨、C ashmem搭載デバイス)

off_ashmem_misc_fops != 0であること(BSSに静的miscdeviceを持つC ashmem)が必要です。

root@kitploit:~
PI write (mode=4)  →  redirect miscdevice fops to fake fops (via W0 pi_tree)
                      configfs r/w established
                   →  pipe physrw (1-byte precise kernel r/w)
                   →  SELinux enforcing = 0 (single byte, no policycap corruption)
                   →  UMH: inject work_struct into system_unbound_wq
                      kernel executes /data/local/tmp/a/e --umh as UID 0
                   →  root script → ksud late-load → KSU installed

パスBに対する利点:

  • 1バイトのSELinux書き込み — selinux_state.policycapを破損しない(OnePlus 13のネットワーク問題を修正)
  • perf_event_open不要 — seccomp制限下でも動作
  • credパッチ不要 — 稼働中のtask_structの変更を回避

現在利用可能なデバイス: OnePlus 13(カーネル6.6、C ashmem)。 Rust ashmem搭載デバイス(6.12 GKI)では利用不可 — miscdeviceがヒープ割り当てされ、コンパイル時にアドレスを予測できないためです。

パスB: ダイレクトPI書き込み(フォールバック、全デバイス)

UMHオフセットまたはC ashmemのmisc_fopsが利用できない場合に使用されます。

root@kitploit:~
Write 1 (mode=1)  →  SELinux enforcing = 0
                      (low byte of kernel ptr = 0x00, 8-byte write)

Write 2 (mode=2)  →  task->cred = init_cred
                      (uid=0, all capabilities)

Root shell         →  ksud late-load (KernelSU LKM)
                   →  su -c load_policy (fix SELinux policycap)
                   →  dynamic manager registration

ブートストラップモード(端末単独)

root@kitploit:~
App (seccomp)  →  Write 1 (no perf needed)
               →  mini-adb connect TCP (port from /data/local/tmp/a/adb_port, default 5555)
               →  adb shell: full exploit (perf works, no seccomp)
               →  root → KSU → network fix

自動起動(ReSukiSU統合経由)

root@kitploit:~
BOOT_COMPLETED → BootCompletedReceiver
  ├─ su available → skip (soft reboot / already rooted)
  └─ no root → GhostlockService → setsid exploit --bootstrap

スタックレイアウトの実現可能性

NFDS=320の場合、カーネルのcore_sys_selectは256バイトのstack_fdsバッファを割り当てます:

root@kitploit:~
stack_fds:  0    5    10   14 | 15   20   25   29
            ├─in─┤─out─┤─ex──┤ ├res_in┤res_out┤res_ex┤
            ◄── USER CONTROLLED ──►│◄── KERNEL ZEROED ──►

エクスプロイトは、偽のウェイターフィールド(task、lock)をfd_set入力ビットマップに書き込みます。これが機能するには、ウェイターのtaskフィールドとlockフィールドが制御可能ゾーン(word 0〜14)内に位置する必要があります。

root@kitploit:~
Ace 6T ✅ (waiter at word 2):
  ░░████████████████░░│░░░░░░░░░░░░░░░░░░
    ▲waiter      t  l │
    task/lock controllable

RMX5070 ❌ (waiter at word 13):
  ░░░░░░░░░░░░░████│██████████████░░░░░░
                 ▲  │    t     l
               waiter  task/lock ZEROED

実現可能性のルール: ウェイターword + 11(rt_waiter_node内のlockオフセット)は14以下でなければなりません。実現可能な最大ウェイターwordは3です。

ウェイターの位置は、コンパイラのスタックフレームレイアウト(PGO + LTO + BOLT最適化プロファイル)によって決まり、SoCブランチごとに異なります。同じカーネルバージョンでも、SoCが異なればレイアウトも異なる場合があります。

kernel_phys_load

すべてのカーネル書き込みは、イメージのリニアマップエイリアスを経由します:

root@kitploit:~
data_addr(x) = PAGE_OFFSET + (kernel_phys_load - PHYS_OFFSET) + (x - KIMAGE_TEXT_BASE)

ブートローダーがkernel_phys_loadを選択するため、SoCごとに異なり、boot.imgやDTには含まれません。struct kernel_offsets内のデバイス別フィールド。0の場合はtarget.hのデフォルトを使用します。

SoCkernel_phys_load
SM8845 (Ace 6T, 15T)0xa8000000
SM8750 (OnePlus 13, OPPO Pad 4 Pro)0xa8000000
SM8850 (OnePlus 15, Xiaomi 17)0xc7800000

誤った値は静かに失敗します — 書き込みは依然としてマップ済みRAMに到達するため、クラッシュも効果も発生しません。PSELECT_SHIFTの問題と混同しないでください。同じモデルのroot化済み端末で値を読み取ってください(Kernel codeは_stextから始まり、_textは0x10000低い位置にあります):

root@kitploit:~
su -c 'grep -i "Kernel code" /proc/iomem'   # c7810000-... -> 0xc7800000

PSELECT_SHIFT

カーネルによって、ウェイターは制御可能ゾーン内の異なる位置に配置されます。PSELECT_SHIFTを使用して調整してください:

root@kitploit:~
# Default (Ace 6T + OnePlus 15, 6.12): shift=0
/data/local/tmp/a/e

# OnePlus 13 (6.6): shift=-2
PSELECT_SHIFT=-2 /data/local/tmp/a/e

# Override kernel_phys_load for new SoCs (when /proc/iomem is not accessible):
KPHYS=0xc7800000 /data/local/tmp/a/e

check_feasibility.pyのウェイターwordは信頼できません。フレームの演算は正しいものの、ゼロストアから推測される構造体オフセットが正しくありません(OnePlus 15ではword 3と算出されますが、実測値はword 2です)。誤ったシフトは推測のたびにカーネルパニックを招くため、代わりにroot化済み端末で実測してください:

root@kitploit:~
echo 'p:ds do_select fdsin=+0(%x1)' >> /sys/kernel/tracing/kprobe_events
echo 'p:rw rt_mutex_wait_proxy_lock waiter=%x2' >> /sys/kernel/tracing/kprobe_events
# trigger FUTEX_CMP_REQUEUE_PI, then:
#   PSELECT_SHIFT = ((waiter & 0x3fff) - (fdsin & 0x3fff)) / 8 - 2

ビルド

root@kitploit:~
NDK=/path/to/android-ndk
$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android35-clang \
  -O2 -Wall -Isrc/core -Isrc/devices -DTARGET_CONFIG_H="target.h" \
  src/core/main.c src/core/util.c src/core/slide.c \
  src/core/fops.c src/core/pipe_physrw.c src/core/root.c \
  src/core/miniadb.c src/core/umh_root.c \
  -o ghostlock -fPIE -pie -pthread

前提条件

ksud(KSUインストールに必要)

GhostLockはroot権限のみを提供します。KernelSUのインストールはksudに依存します — 各KMIバージョン向けのkernelsu.koモジュールを内蔵したバイナリです。rootスクリプトはデバイス上のksudを検索し、ksud late-load --kmi android16-6.12を実行します。

方法手順
(推奨)

ksudがない場合、エクスプロイトはroot(uid=0)を取得しますが、KSUはインストールされず、suも永続化しません。

セットアップ(初回のみ)

root@kitploit:~
# Enable ADB TCP (use any port)
adb tcpip 5555

# Push exploit binary and ADB key
adb push ghostlock /data/local/tmp/a/e && adb shell chmod 755 /data/local/tmp/a/e
adb push ~/.android/adbkey /data/local/tmp/a/adbkey

# If using a non-default ADB port (e.g. 23946):
adb shell "echo 23946 > /data/local/tmp/a/adb_port"

最初のジェイルブレイク成功後、persist.adb.tcp.portがresetpropによって設定され、以降の起動は完全に自動化されます。

使用方法

root@kitploit:~
/data/local/tmp/a/e                        # Full exploit (adb shell)
/data/local/tmp/a/e --bootstrap            # Phone standalone (app context)
/data/local/tmp/a/e --write1               # SELinux disable only
PSELECT_SHIFT=-2 /data/local/tmp/a/e       # Override stack layout shift

重要: KernelSnitchのタイミング信頼性を最大限に高めるには、起動後30秒以内に実行してください。

新しいデバイス/カーネルバージョンの追加

必要なのはboot.imgのみ — root権限もデバイスへのアクセスも不要です。

boot.imgからオフセットを抽出

root@kitploit:~
# 1. Extract kernel
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. Global symbols (kallsyms)
python tools/extract_target.py    # 28 offsets, auto-validated

# 3. Struct fields (BTF)
python tools/extract_btf.py kernel  # 57 offsets, auto-validated

# 4. Add to offsets.h, rebuild

カバレッジ: boot.imgから抽出したオフセット103/103

OnePlus以外のデバイスへの適用

コアエクスプロイトはデバイスに依存しません。適用には以下が必要になる場合があります:

  • 異なるVA_BITS(48 vs 39)→ target.hのメモリレイアウトを更新
  • 異なるkernel_phys_load → /proc/iomemから読み取るかKPHYS=環境変数を使用
  • 異なるタイミングパラメータ → common.hを調整
  • 異なるashmem実装(C vs Rust)→ C ashmemではUMHパスが有効。Rust ashmemではW1+W2にフォールバック
  • 異なるPSELECT_SHIFT → QEMUのkprobeテストで決定
  • 異なる構造体オフセット(6.6 vs 6.12)→ デバイスエントリでSTRUCT_OFFSETS_6_6またはSTRUCT_OFFSETS_6_12を使用

UMH rootの要件

UMH(call_usermodehelper)rootパスには以下が必要です:

  • kallsymsからoff_system_unbound_wqとoff_call_usermodehelper_exec_workを取得
  • off_ashmem_misc_fops = ashmem_misc + 0x10(C ashmemのみ、BSS内のmiscdevice.fops)
  • Rust ashmem(GKI 6.12)はmiscdeviceをヒープに割り当てる → アドレスを予測不可 → UMH利用不可

ファイル

ライセンス

認可されたセキュリティ研究および教育目的のみに使用してください。

ツールをダウンロード
デバイスSoCカーネル状態
OnePlus Ace 6T (PLR110)SM88456.12.38-...-ab14275539動作確認済み
OnePlus Ace 6T (PLR110)SM88456.12.38-...-ab14552068動作確認済み
OnePlus 15 (CPH2749)SM88506.12.23-...-ab14541642動作確認済み
Xiaomi 17 (pudding)SM88506.12.23-...-abogki463945075動作確認済み
Xiaomi 17 (pudding)SM88506.12.69-...-abogki514973465動作確認済み(2026年8月アップデート)
OnePlus 13 (IN2060)SM87506.6.89-...-abogki446052083動作確認済み(PSELECT_SHIFT=-2)
OPPO Pad 4 ProSM87506.6.89-...-ab14358676動作確認済み(PSELECT_SHIFT=-2)
デバイスSoCカーネル理由
OPPO Find X9 UltraSM87506.12.58-android16-6PGOによりdo_futexフレームが消滅 → SP diff=+32、ウェイターword=14。安全なシフトは存在しません。
OPPO Find X7—6.1.1576.1 GKI: ウェイターはword 13(6.1の全OPLUS/GKIデバイス)
realme RMX5070SM66506.1.1416.1 GKI: ウェイターはword 13
realme RMX3852SM86356.1.141RMX5070と同じ6.1ブランチ
OnePlus 13R / Ace 5SM86506.1.x同じ6.1ブランチ
OnePlus 12SM86506.1.1416.1 GKI: do_futexがPGOによりインライン化、ウェイターword=13/19
OPPO Pad 5 (OPD2502)MT68786.1.134同じ6.1ブランチ
OPPO PKW110—5.15.180do_futexフレーム0x140(通常の4.5倍)→ ウェイターword=-29、到達不能
Motorola Edge 60 FusionMT68786.1.1456.1 GKI: ウェイターはword 13(OPLUS以外でも同じ結果)
iQOO Z9 5G—5.15.178do_futexフレームが大きすぎるためウェイターに到達不能。OPLUSデバイスではない(vivo)。
ReSukiSU APK
ReSukiSUまたはこのフォークをインストール。公式リリースにはlibksud.soが同梱されています。
CIリリースReSukiSU CIからksud-aarch64-linux-android.zipをダウンロード
ソース件数方法
kallsyms(グローバルシンボル)28extract_target.py
BTF(構造体フィールド)57extract_btf.py
派生(同じ構造体、別の用途)9自動
定数(固定値)12抽出不要
ファイル説明
src/core/main.cエクスプロイトのエントリポイント、Write 1/2、UMHパス、ブートストラップ、rootスクリプト
src/core/fops.cpselectルート、PI書き込み機構、CFIステージ
src/core/util.cヒープスプレー、kernelsnitch、スラブドレイン、ペイロードセットアップ
src/core/pipe_physrw.cパイプバッファベースの物理メモリ読み書き(configfsのr/wを拡張)
src/core/umh_root.cワークキューインジェクションと--umhハンドラによるUMH root
src/core/miniadb.cミニADBクライアント(TCP + RSA認証)
src/core/common.hタイミングパラメータ、マクロ
src/core/target.hメモリレイアウト、構造体フィールドのデフォルト値(6.12)
src/core/runtime_struct_offsets.hデバイス別の構造体フィールドオーバーライド(6.6 vs 6.12)
src/devices/offsets.h全デバイスのオフセットテーブルとSTRUCT_OFFSETS_*マクロを集約
src/devices/<device>/offsets.hデバイス別のカーネルオフセットエントリ
src/core/slide.cSLIDEカーネルアドレスリーク
src/core/root.crootシェルのセットアップ(pipe physrwによるダイレクトcredパッチ)
tools/extract_target.pykallsymsからのオフセット抽出
tools/extract_btf.pyBTFからの構造体オフセット抽出
tools/check_feasibility.pyスタックレイアウトの実現可能性チェッカー