
GhostLock (CVE-2026-43499) per Galaxy S25 FE (W.I.P)
CVE-2026-43499 portato alla serie Samsung Galaxy S26 — Android 16 / GKI 6.12. Un singolo binario, tre righe di kernel, corrispondenza dinamica dei parametri a runtime: teoricamente copre l'intera serie S26 senza compilazione per singola build.
La maggior parte degli sforzi di porting di GhostLock punta a un singolo dispositivo o a un singolo firmware. Questo repository è un porting nuovo che riscrive ogni meccanismo per il target S26 e si prevede che copra l'intera famiglia.
Mentre mantenevo snothin/CyberMeowfia, ho scoperto che il canale pipe physrw originale era instabile (interrompeva la rete), quindi ho abbandonato quella strada ed esplorato alternative. Successivamente ho scoperto che monovibe era andato oltre lungo il percorso che stavo esplorando, ho adottato l'approccio, e dopo ripetuti debug questo repository ha preso forma.
uid=0(root) context=u:r:kernel:s0; shell
root persistente tramite su_daemon su un socket unix astratto.work_struct su
system_unbound_wq la cui funzione è call_usermodehelper_exec_work, quindi il kernel
esegue il nostro daemon con le credenziali di init. La protezione EL2 di KDP sulle pagine delle credenziali non viene mai attivata.race pselect + futex PI
→ una scrittura allineata a qword per round
→ carrier attr (due fd misc falsi)
il controller fd reindirizza il puntatore ai dati
il data fd legge/scrive qualsiasi indirizzo kernel
→ oracolo slide (tracefs)
→ root UMH (iniezione workqueue)
system_unbound_wq
storm di open/close ptmx risveglia un worker
il kernel esegue il daemon con le credenziali di init
→ bypass DEFEX (bind-mount)
→ su_daemon resta in ascolto su /data/local/tmp/temp_su.sock
I parametri vengono abbinati per riga di kernel (tre righe: cn, intl, exynos), non
per singola build. Le build OTA sconosciute ricadono sulla riga nota più vicina in base al modello
e al CSC. I modelli completamente sconosciuti vengono rifiutati (fail-closed). L'elenco delle build
incorporato è autorevole in exploit/src/params_table.c.
Vedi PORTING.md per i parametri necessari quando si esegue il porting su un nuovo
dispositivo o firmware.
Richiede Android NDK (r26+). Basta eseguire:
cd exploit
make preload
# produce build/bin/preload.so (exploit) e build/embed/su_daemon_aarch64_pie (daemon incorporato)
Invia preload.so, su_daemon_aarch64_pie e ksud al dispositivo (esegui da una
sessione 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
# Singolo tentativo:
adb shell "env LD_PRELOAD=/data/local/tmp/preload.so sh"
L'exploit è probabilistico (una race) e di solito richiede tentativi ripetuti. In una
esecuzione riuscita, su_daemon resta in ascolto su /data/local/tmp/temp_su.sock, e qualsiasi
processo locale può connettersi.
La protezione boot-claim (/data/local/tmp/ghostlock-boot.log) registra l'esito di
ogni esecuzione per avvio; una seconda esecuzione dell'intera catena nello stesso avvio viene rifiutata (può causare il crash
del dispositivo). Cancella il file o imposta BOOT_FORCE=1 per ignorare la protezione.
exploit/src/kernelsnitch/)Questo repository è rilasciato sotto licenza Apache-2.0; vedi LICENSE per il testo completo e NOTICE per la provenienza del codice.
| Modello | Codename dispositivo | Build testate |
|---|
| 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 testata) |
| SM-S948x (S26 Ultra) | m3q | S9480ZHS4AZG1, S948BXXS4AZG5/6, S948NKSS4AZG3, S948U1UES2AZE1, S948USQS4AZG3 |
| SM-S942B (S26 Exynos) | m1s | S942BXXS4AZG5 |
| SM-S947B (S26+ Exynos) | m2s | S947BXXS3AZF1, S947BXXS4AZG5 |