
Исследование цепочки эксплойтов, нацеленное на CVE-2026-43499 на Samsung Galaxy S21
Рабочий, активный проект KernelSU для этого устройства: kurtulusakyuz/dfroot-s21 — начните оттуда. Этот репозиторий содержит только исследование IonStack.
Специфичная для устройства полезная нагрузка IonStack для Samsung Galaxy S21 (o1s) на
прошивке G991BXXSJHZC2. Статус: исследование ЗАКРЫТО — детерминированный
DoS-only; путь записи в ядро доказанно невозможен на этой сборке.
Полные доказательства в RESEARCH.md.
| Поле | Значение |
|---|---|
| Модель | SM-G991B |
| Устройство | o1s |
| Прошивка | G991BXXSJHZC2 |
| Android | 15 / API 35 (AP3A.240905.015.A2, fingerprint samsung/o1sxeea/o1s) |
| Размер страницы | 4096 |
| Ядро | 5.4.242-30958140-abG991BXXSJHZC2 |
| SoC | Exynos 2100 |
| Митигации | CFI+PAC+PAN/UAO, KDP_CRED, SELinux enforcing, no userfaultfd |
Основано на реализации IonStack CVE-2026-43499, опубликованной в
NebuSec/CyberMeowfia (upstream b850d3bddc74c3328d5fbcc0568d21962b55d949)
и BuSung-dev/CVE-2026-43499-S25U, с благодарностью F-19-F/IonStackQuest3.
Оригинальная лицензия Apache License 2.0 сохранена в LICENSE (см. NOTICE).
Программа записи GhostLock для этого устройства завершена и закрыта, а не приостановлена. Что было доказано, по порядку:
remove_waiter() очищает
current->pi_blocked_on вместо waiter->task->pi_blocked_on,
поэтому откат FUTEX_CMP_REQUEUE_PI оставляет висячий указатель на
стековый rt_waiter. Upstream-исправление 3bfdc63 отсутствует в 5.4.242.sched_setattr воспроизводит идентичный устройству Oops
(rt_mutex_adjust_prio_chain+0x108 → _raw_spin_trylock+0x1c,
fault VA 0) как в KDP-less QEMU-госте, так и на самом телефоне
(lastkmsg 118/119). Висячий слот полностью отображён
(stack-top E-0x328, жизненный цикл охарактеризован через QEMU+GDB).lock (+0x38) НИКОГДА не контролируется атакующим
(15/15 дампов). Независимые порты (ASUS i005, маршрут sigreturn AQUOS)
упираются в ту же стену. Геометрия, а не вероятность.Связанные avenues LPE ядра 2026 года также были закрыты на этой сборке
конфигурацией прошивки (USER_NS, RDS, CRYPTO_USER_API_AEAD все не заданы;
MFC double-free недостижим при MFC_USE_DMABUF_CONTAINER=n;
AF_ALG/eBPF ограничены для shell). Артефакты после записи
(KernelSU .ko + ksud, собранные для этой точной прошивки) размещены
отдельно; заголовки src/kernelsnitch/ в этом дереве
остаются размещёнными, но несобранными (без записи потребитель не существует).
Makefile build (NDK r27+, ANDROID_NDK_HOME)
src/ exploit source (o1s profile only)
src/targets/o1s-G991BXXSJHZC2/ target.h + p0_fingerprint.h
src/kernelsnitch/ mm_struct leak (futex hash collision, staged)
tools/ p0 fingerprint helper
RESEARCH.md research notes (geometry, verdicts)
export ANDROID_NDK_HOME=/path/to/android-ndk
make clean all
# SLIDE_WRITER_SEL=1|2|3 selects mcast/sigreturn(default)/xattr writers.
# Unset selects the experimental pselect writer (see RESEARCH.md).
Выходные файлы (build/o1s-G991BXXSJHZC2/):
cve-2026-43499 (LD_PRELOAD payload), cve-2026-43499-app.so (app payload),
cve-2026-43499-root (root helper).
adb push build/o1s-G991BXXSJHZC2/cve-2026-43499 /data/local/tmp/cve-2026-43499
adb push build/o1s-G991BXXSJHZC2/cve-2026-43499-root /data/local/tmp/cve-2026-43499-root
adb shell chmod 755 /data/local/tmp/cve-2026-43499 /data/local/tmp/cve-2026-43499-root
adb shell "LD_PRELOAD=/data/local/tmp/cve-2026-43499 sh"
# on success:
adb shell "/data/local/tmp/cve-2026-43499-root -c 'id; getenforce'"
Управление ожиданиями: на этой сборке «успех» означает обход триггера и его вывод оракула — обход NULL-lock перезагружает устройство вместо получения root (см. «Финальное состояние» выше). Root, если он когда-либо будет достигнут через будущий примитив записи, живёт только до перезагрузки; ничего не прошивается.
/data/local/tmp очищается при перезагрузке — перезаливайте
бинарники после каждой загрузки.