
GhostLock (CVE-2026-43499) для Galaxy S25 FE (в разработке)
CVE-2026-43499, портированный на серию Samsung Galaxy S26 — Android 16 / GKI 6.12. Один бинарник, три строки ядра, динамическое сопоставление параметров во время выполнения: теоретически покрывает всю серию S26 без компиляции под каждую сборку.
Большинство попыток портирования GhostLock нацелены на одно устройство или одну прошивку. Этот репозиторий — свежий порт, который переписывает каждый механизм под цель S26 и, как ожидается, покроет всё семейство.
Поддерживая snothin/CyberMeowfia, я обнаружил, что исходный канал pipe physrw нестабилен (он обрывал сеть), поэтому я отказался от этого пути и исследовал альтернативы. Позже я выяснил, что monovibe продвинулся дальше по пути, который я исследовал, перенял подход, и после многократной отладки этот репозиторий обрёл форму.
uid=0(root) context=u:r:kernel:s0; постоянная
root-оболочка через su_daemon на абстрактном unix-сокете.work_struct на
system_unbound_wq, чья функция — call_usermodehelper_exec_work, поэтому ядро
выполняет наш демон с учётными данными init. Защита KDP на уровне EL2 для страниц учётных данных
никогда не срабатывает.гонка pselect + futex PI
→ одна выровненная qword запись за раунд
→ носитель атрибутов (два поддельных misc fd)
controller fd перенаправляет указатель данных
data fd читает/записывает любой адрес ядра
→ оракул сдвига (tracefs)
→ root через UMH (инъекция workqueue)
system_unbound_wq
шторм открытия/закрытия ptmx будит рабочий поток
ядро выполняет демон с учётными данными init
→ обход DEFEX (bind-mount)
→ su_daemon слушает на /data/local/tmp/temp_su.sock
Параметры сопоставляются по строке ядра (три строки: cn, intl, exynos), а не
по отдельной сборке. Неизвестные OTA-сборки откатываются к ближайшей известной строке по модели
и CSC. Полностью неизвестные модели отклоняются (fail-closed). Встроенный список
сборок является авторитетным в exploit/src/params_table.c.
См. PORTING.md для параметров, необходимых при портировании на новое
устройство или прошивку.
Требуется Android NDK (r26+). Просто запустите:
cd exploit
make preload
# создаёт build/bin/preload.so (эксплойт) и build/embed/su_daemon_aarch64_pie (встроенный демон)
Загрузите preload.so, su_daemon_aarch64_pie и ksud на устройство (запуск из
adb-сессии оболочки, uid 2000):
adb push exploit/build/bin/preload.so /data/local/tmp/
adb push exploit/build/embed/su_daemon_aarch64_pie /data/local/tmp/cve-2026-43499-root
adb push <ksud> /data/local/tmp/ksud
adb shell chmod 755 /data/local/tmp/cve-2026-43499-root /data/local/tmp/ksud
# Одиночная попытка:
adb shell "env LD_PRELOAD=/data/local/tmp/preload.so sh"
Эксплойт вероятностный (гонка) и обычно требует повторных попыток. При
успешном запуске su_daemon слушает на /data/local/tmp/temp_su.sock, и любой
локальный процесс может подключиться.
Защита от повторного запуска при загрузке (/data/local/tmp/ghostlock-boot.log) записывает результат
каждого запуска при загрузке; второй полный запуск цепочки в той же загрузке отклоняется (он может
привести к краху устройства). Удалите файл или установите BOOT_FORCE=1, чтобы переопределить.
exploit/src/kernelsnitch/)Этот репозиторий выпущен под лицензией Apache-2.0; см. LICENSE для полного текста и NOTICE для указания происхождения кода.
| Модель | Кодовое имя устройства | Протестированные сборки |
|---|
| SM-S942x (S26 Snapdragon) | m1q | S9420ZCS4AZG1, S942QOPU1AZDE, S942U1UES4AZG3, S942USQS4AZG3 |
| SM-S947x (S26+ Snapdragon) | m2q | S9470ZCS4AZG1, S947USQS4AZG3 |
| SM-S9480 (S26 Ultra CN) | m3q | S9480ZCS3AZF1, S9480ZCS4AZG1 (протестированная сборка) |
| SM-S948x (S26 Ultra) | m3q | S9480ZHS4AZG1, S948BXXS4AZG5/6, S948NKSS4AZG3, S948U1UES2AZE1, S948USQS4AZG3 |
| SM-S942B (S26 Exynos) | m1s | S942BXXS4AZG5 |
| SM-S947B (S26+ Exynos) | m2s | S947BXXS3AZF1, S947BXXS4AZG5 |