
Используйте CVE-2026-43499 для отключения SELinux на Android
Извлечение только Write-1-only из
JoinChang/ghostlock-oneplus
для CVE-2026-43499. Он
отключает enforcing SELinux на поддерживаемых, уязвимых ядрах OnePlus с
заблокированным загрузчиком, и больше ничего не делает: никакой перезаписи cred, никакой root-оболочки, никакого
KernelSU, никакой загрузки и никакой утечки KASLR.
CVE-2026-43499 — это use-after-free в rtmutex ядра Linux в пути повторной постановки futex PI
пути. Во время отката proxy-lock, remove_waiter() работает с
current вместо задачи ожидающего, оставляя указатель pi_blocked_on ожидающего
висящим. Это исправлено в основной ветке Linux 6.12.86 и более новых версиях 6.12.
Одна запись PI для дочернего узла:
fake_right = base + 0x100 -> byte0 = 0 (enforcing), byte1 = 1
Он повторно использует кучу полного эксплойта и маршрут PI через pselect, но обходит KASLR
(kaslr_slide = 0). Он повторяет попытки до 20 раз (с очисткой slab между
попытками) и завершает работу, как только /sys/fs/selinux/enforce показывает 0.
Общий примитив (куча spray из util.c, маршрут pselect из fops.c,
kernelsnitch и таблицы смещений) сохранён.
См. src/devices/offsets.h, ключи по uname -r:
6.12.38-android16-5-...-ab14275539-4k6.12.38-android16-5-...-ab14552068-4k6.12.23-android16-5-...-ab14541642-4k (только смещения, не проверено)make # uses /opt/android-ndk (or $ANDROID_NDK_HOME)
Создаёт selinux_disabler, aarch64 PIE для Android API 35.
adb push selinux_disabler /data/local/tmp/a/e && chmod 755 /data/local/tmp/a/e
adb shell /data/local/tmp/a/e
Проверка:
adb shell cat /sys/fs/selinux/enforce # -> 0
Нужен только boot.img. Используйте утилиты извлечения из
директории tools проекта tools directory,
затем добавьте запись в src/devices/<device>/offsets.h и включите её через #include из
src/devices/offsets.h.
Только для авторизованных исследований в области безопасности и образовательных целей.
| Удалено | Причина |
|---|
slide.c | Утечка KASLR SLIDE — не нужна (slide = 0) |
pipe.c | Физическое чтение/запись на основе pipe — используется только на этапе CFI/root |
root.c | Патчинг cred / install_android_root — только Write 2 |
miniadb.c | Мини-клиент ADB для начальной загрузки — не используется |
try_cfi_stage, install_child_root, repair/refresh/leak/restore помощники (fops.c) | Этап CFI / утечки KASLR / pipe-physrw — никогда не достигается на пути пользовательской записи |
perf_find_task, spawn_child, write_root_script, run_exploit, run_bootstrap (main.c) | Write 2 (cred → init_cred), root-оболочка, KSU, начальная загрузка |