
Recherche de chaîne d'exploitation ciblant CVE-2026-43499 sur Samsung Galaxy S21
Projet KernelSU fonctionnel et actif pour cet appareil : kurtulusakyuz/dfroot-s21 — commencez par là. Ce dépôt ne conserve que la recherche IonStack.
Charge utile IonStack spécifique à l'appareil pour le Samsung Galaxy S21 (o1s) sous
firmware G991BXXSJHZC2. Statut : recherche CLOSE — DoS déterministe
uniquement ; le chemin d'écriture noyau est prouvé impossible sur cette build.
Preuves complètes dans RESEARCH.md.
| Champ | Valeur |
|---|---|
| Modèle | SM-G991B |
| Appareil | o1s |
| Firmware | G991BXXSJHZC2 |
| Android | 15 / API 35 (AP3A.240905.015.A2, fingerprint samsung/o1sxeea/o1s) |
| Taille de page | 4096 |
| Noyau | 5.4.242-30958140-abG991BXXSJHZC2 |
| SoC | Exynos 2100 |
| Mitigations | CFI+PAC+PAN/UAO, KDP_CRED, SELinux enforcing, pas de userfaultfd |
Basé sur l'implémentation IonStack CVE-2026-43499 publiée dans
NebuSec/CyberMeowfia (amont b850d3bddc74c3328d5fbcc0568d21962b55d949)
et BuSung-dev/CVE-2026-43499-S25U, avec remerciements à F-19-F/IonStackQuest3.
Licence Apache 2.0 amont conservée dans LICENSE (voir NOTICE).
Le programme d'écriture GhostLock pour cet appareil est terminé et clos, non pas en pause. Ce qui a été prouvé, dans l'ordre :
remove_waiter() efface
current->pi_blocked_on au lieu de waiter->task->pi_blocked_on,
donc un rollback de FUTEX_CMP_REQUEUE_PI laisse un pointeur
pendant vers un rt_waiter sur la pile. Le correctif amont 3bfdc63
est absent de 5.4.242.sched_setattr consommateur reproduit un Oops identique à celui de l'appareil
(rt_mutex_adjust_prio_chain+0x108 → _raw_spin_trylock+0x1c,
VA fautif 0) à la fois dans un invité QEMU sans KDP et sur le téléphone lui-même
(lastkmsg 118/119). L'emplacement pendant est entièrement mappé
(sommet de pile E-0x328, cycle de vie caractérisé via QEMU+GDB).lock (+0x38) n'est JAMAIS contrôlé par l'attaquant
(15/15 dumps). Des ports indépendants (ASUS i005, route sigreturn AQUOS)
ont heurté le même mur. Géométrie, pas probabilité.Les voies connexes d'LPE noyau de 2026 ont également été fermées sur cette build par
la configuration du firmware (USER_NS, RDS, CRYPTO_USER_API_AEAD tous non définis ;
double-free MFC inatteignable avec MFC_USE_DMABUF_CONTAINER=n ;
AF_ALG/eBPF restreints pour le shell). Les artefacts post-écriture
(KernelSU .ko + ksud compilés pour ce firmware exact) sont préparés
séparément ; les en-têtes src/kernelsnitch/ dans cet arbre
restent préparés mais non compilés (aucun consommateur n'existe sans écriture).
Makefile build (NDK r27+, ANDROID_NDK_HOME)
src/ code source de l'exploit (profil o1s uniquement)
src/targets/o1s-G991BXXSJHZC2/ target.h + p0_fingerprint.h
src/kernelsnitch/ fuite mm_struct (collision de hash futex, préparé)
tools/ assistant de fingerprint p0
RESEARCH.md notes de recherche (géométrie, verdicts)
export ANDROID_NDK_HOME=/path/to/android-ndk
make clean all
# SLIDE_WRITER_SEL=1|2|3 sélectionne les writers mcast/sigreturn(défaut)/xattr.
# Non défini sélectionne le writer pselect expérimental (voir RESEARCH.md).
Sorties (build/o1s-G991BXXSJHZC2/) :
cve-2026-43499 (charge utile LD_PRELOAD), cve-2026-43499-app.so (charge utile app),
cve-2026-43499-root (assistant 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"
# en cas de succès :
adb shell "/data/local/tmp/cve-2026-43499-root -c 'id; getenforce'"
Gestion des attentes : sur cette build, « succès » désigne le parcours du déclencheur et sa sortie oracle — un parcours de verrou NULL redémarre l'appareil au lieu de donner root (voir « État final » ci-dessus). Root, s'il est un jour obtenu via une future primitive d'écriture, ne vit que jusqu'au redémarrage ; rien n'est flashé.
/data/local/tmp est effacé au redémarrage — repoussez
les binaires après chaque démarrage.