一份针对三星 Galaxy S26 Ultra(SM-S948U1,代号 m3q)在固件 S948U1UES3AZF1(GKI 6.12.30-android16-5)上**可用的仅 SELinux 驻留(park)**研究快照。
此包并非完整的 root。它将 SELinux 切换为 Permissive,并维持回收(reclaim)足够长的时间以衔接后续工作。此处未实现主机 uid=0。
基于 GhostLock / CVE-2026-43499 系列工作构建:小米 popsicle preload 框架、三星 Root-My-Galaxy(包括 emerald 设备目标和 m3q 重定向),此处针对 AZF1 仅驻留(park-only)进行适配。参见致谢。
kptr_restrict / 同栈后续写入)。这些操作会内核 panic,并已在该设备上导致只能进入安全模式启动(RescueParty 级恢复);若继续解锁 / 恢复不当,还有恢复出厂设置的风险。bin/preload-4-s1.so 仅适用于 AZF1。其他固件需要重新生成的 target.h。sched_blocked_reason 调用者 → 镜像基址)。rt_mutex 等待者页(linear-map 虚拟地址)。selinux_state.enforcing(enforce 1→0)。WAIT_REQUEUE_PI 稳定,使驻留比裸 I4(延迟 KP)存活更久。LD_PRELOAD(/system/bin/true)下保持存活,维持回收;记录 S1_READY 日志。成功时的表现:
adb shell getenforce # Permissive
adb shell pidof true # non-empty (parked preload)
辅助脚本还会将本次启动(same-boot)的虚拟地址写入 finish_va.txt(KASLR、spray、静态 DATA 符号)。
GhostLock 在此固件上提供受限的任意写入(将 NULL 和 linear-map / spray 值写入可写的 .data — 不是以 STORE 值写入内核 text/rodata),外加 Permissive SELinux。软 root 仍然缺失:
| 需求 | 原因 |
|---|---|
| 信息泄露 / AR | 堆上的 task_struct* 或 /dev/uhid 的 inode 虚拟地址(shape-0 GhostLock 读取和多个 oracle 在 AZF1 上已失效) |
| Cred / 收尾 | 一旦获知 task:写入 init_cred(或 uid 字段)— 三星 KDP/RKP 可能阻止简单的指针替换;可用的 Knox root 通常需要主机 uid=0,然后再使用支持 KDP 的 KernelSU(ksud) |
| I4 之后的稳定写入 | I4+R1e 之后的额外 GhostLock 打击不安全(会进入 KP)。不要将“直接再 STORE 一次”视为收尾 |
一个独立的补充 CVE(尤其是 6 月 AZF1 上仍然存在的读原语)是当前的高 EV 路径;仅靠打磨 GhostLock 上的更多 W2 打击则不是。
target.h)adb、python3、Android NDK r29+(用于重新构建)LD_PRELOAD 方式运行 /system/bin/true# from a Linux/WSL host with the device attached
export SHARE="$PWD" # or path where this repo lives
bash park_cal_one.sh
adb shell getenforce # expect Permissive
park_cal_one.sh 默认将 SHARE 设为本仓库目录。如有需要可覆盖:
SHARE=/path/to/this/repo PRELOAD=/path/to/this/repo/bin/preload-4-s1.so bash park_cal_one.sh
不要干扰已驻留的 true 进程。不要串接来自其他分支的实验性第二次打击。
powershell -ExecutionPolicy Bypass -File .\build-park.ps1
如果 NDK 路径不同,请在脚本内设置 $ndkBin。
make -C source clean preload
# output: source/build/bin/preload.so (same I4+R1e park flags as preload-4-s1)
cp source/build/bin/preload.so bin/preload-4-s1.so
默认的 target.h 启用 Candidate I4 + R1e + S1 驻留(AZF1_R1_SECOND_WAIT、AZF1_R1_THEN_S1)。此包请勿启用 K3/K4/soft 二次打击标志。
bin/preload-4-s1.so prebuilt park payload (AZF1)
park_cal_one.sh push + run + VA parse
build-park.ps1 Windows NDK build (park only)
source/ preload sources + AZF1 target.h
generate_target.py optional retarget helper (needs your boot.img)
| 阶段 | 状态 |
|---|---|
SELinux enforce→0 + 驻留(I4+R1e) | 在 AZF1 实验室设备上有效 |
| 进一步的 GhostLock "W2" 打击 | 不要 — 会导致 KP;可能迫使设备只能进入安全模式启动 |
主机 uid=0 / KernelSU 安装 | 不在此包中 — 需要信息泄露 + Knox 感知的收尾 |
本快照建立在先前的公开与研究工作的基础之上。功劳归于应得之处:
| 项目 | 在本驻留(park)中的作用 |
|---|---|
| CVE-2026-43499-popsicle(小米 popsicle) | GhostLock 利用框架(chassis):LD_PRELOAD 载体(harness)、KernelSnitch 回收/喷射、fdset 编码的等待者、pselect 残留写入核心、generate_target.py / Makefile 布局 |
| Root-My-Galaxy + Root-My-Galaxy-Payloads | 三星软 root 框架(W1 park / W2 后续)、支持 Knox/KDP 的收尾方向、m3q / AZF1 目标材料,以及此处使用的 tracefs 优先 KASLR 方法(替代 popsicle 的 P0 boot_id 滑动) |
| emerald(RMG 设备目标) | 先前在 emerald 设备系列上的 GhostLock 移植,为 RMG 的三星内存几何(geometry)、滑动策略以及 W1 SELinux 驻留发布模式提供了参考;本 m3q/AZF1 驻留属于该系列,而非从头重写 |
漏洞: CVE-2026-43499(GhostLock — rt_mutex 优先级继承残留写入)。
本代码树: popsicle preload 源码的 AZF1 / m3q(SM-S948U1 / S948U1UES3AZF1)移植,带有 RMG/emerald 级别的三星适配,已裁剪为面向研究者自有硬件的仅 SELinux 驻留载体(harness)。并非合并回 Root-My-Galaxy emerald 产品目标。