
Ricerca sulla catena di exploit mirata a CVE-2026-43499 su Samsung Galaxy S21
Progetto KernelSU funzionante e attivo per questo dispositivo: kurtulusakyuz/dfroot-s21 — inizia da lì. Questo repo conserva solo la ricerca IonStack.
Payload IonStack specifico per il dispositivo Samsung Galaxy S21 (o1s) sul
firmware G991BXXSJHZC2. Stato: ricerca CHIUSA — solo DoS deterministico;
il percorso di scrittura del kernel è dimostrato impossibile su questa build.
Prove complete in RESEARCH.md.
| Campo | Valore |
|---|---|
| Modello | SM-G991B |
| Dispositivo | o1s |
| Firmware | G991BXXSJHZC2 |
| Android | 15 / API 35 (AP3A.240905.015.A2, fingerprint samsung/o1sxeea/o1s) |
| Dimensione pagina | 4096 |
| Kernel | 5.4.242-30958140-abG991BXXSJHZC2 |
| SoC | Exynos 2100 |
| Mitigazioni | CFI+PAC+PAN/UAO, KDP_CRED, SELinux enforcing, no userfaultfd |
Basato sull'implementazione IonStack CVE-2026-43499 pubblicata in
NebuSec/CyberMeowfia (upstream b850d3bddc74c3328d5fbcc0568d21962b55d949)
e BuSung-dev/CVE-2026-43499-S25U, con ringraziamenti a F-19-F/IonStackQuest3.
Licenza Apache 2.0 upstream conservata in LICENSE (vedi NOTICE).
Il programma di scrittura GhostLock per questo dispositivo è finito e chiuso, non in pausa. Cosa è stato dimostrato, in ordine:
remove_waiter() azzera
current->pi_blocked_on invece di waiter->task->pi_blocked_on,
quindi un rollback di FUTEX_CMP_REQUEUE_PI lascia un puntatore pendente a un
rt_waiter sullo stack. La correzione upstream 3bfdc63 è assente da 5.4.242.sched_setattr del consumer riproduce un Oops identico al dispositivo
(rt_mutex_adjust_prio_chain+0x108 → _raw_spin_trylock+0x1c,
fault VA 0) sia in un guest QEMU senza KDP sia sul telefono stesso
(lastkmsg 118/119). Lo slot pendente è completamente mappato
(stack-top E-0x328, ciclo di vita caratterizzato via QEMU+GDB).lock (+0x38) NON è
MAI controllato dall'attaccante (15/15 dump). Port indipendenti (ASUS i005,
rotta sigreturn AQUOS) incontrano lo stesso muro. Geometria, non probabilità.Anche le correlate vie di LPE del kernel 2026 sono state chiuse su questa build
dalla configurazione del firmware (USER_NS, RDS, CRYPTO_USER_API_AEAD tutti
non impostati; MFC double-free irraggiungibile con MFC_USE_DMABUF_CONTAINER=n;
AF_ALG/eBPF limitati per la shell). Gli artefatti post-scrittura
(KernelSU .ko + ksud compilati per questo esatto firmware) sono preparati
separatamente; gli header src/kernelsnitch/ in questo albero
restano preparati ma non compilati (nessun consumer esiste senza una scrittura).
Makefile build (NDK r27+, ANDROID_NDK_HOME)
src/ sorgente exploit (solo profilo o1s)
src/targets/o1s-G991BXXSJHZC2/ target.h + p0_fingerprint.h
src/kernelsnitch/ leak mm_struct (collisione hash futex, preparato)
tools/ helper fingerprint p0
RESEARCH.md note di ricerca (geometria, verdetti)
export ANDROID_NDK_HOME=/path/to/android-ndk
make clean all
# SLIDE_WRITER_SEL=1|2|3 seleziona i writer mcast/sigreturn(default)/xattr.
# Non impostato seleziona il writer pselect sperimentale (vedi RESEARCH.md).
Output (build/o1s-G991BXXSJHZC2/):
cve-2026-43499 (payload LD_PRELOAD), cve-2026-43499-app.so (payload app),
cve-2026-43499-root (helper root).
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"
# in caso di successo:
adb shell "/data/local/tmp/cve-2026-43499-root -c 'id; getenforce'"
Gestione delle aspettative: su questa build "successo" significa la camminata del trigger e il suo output oracle — una camminata NULL-lock riavvia il dispositivo invece di fornire root (vedi "Stato finale" sopra). Il root, se mai ottenuto tramite una futura primitiva di scrittura, vive solo fino al reboot; nulla viene flashato.
/data/local/tmp viene cancellata al reboot — ripushare
i binari dopo ogni avvio.