
CVE-2026-45250: overflow del buffer del kernel setcred in FreeBSD 14.4 (LPE)
Questa sottodirectory raccoglie il write-up e gli exploit funzionanti per
il buffer overflow nello stack di setcred(2) nel kernel FreeBSD 14.x.
La vulnerabilità è completamente documentata in setcred.txt. La versione
breve: kern_setcred_copyin_supp_groups() usa sizeof(*groups) dove
groups è gid_t **, producendo un passo di 8 byte invece di 4 per una
copyin() in un array a dimensione fissa nello stack del kernel. L'overflow
è raggiungibile prima di qualsiasi controllo dei privilegi, da qualsiasi
utente non privilegiato.
Questa repository cattura due percorsi di exploit funzionanti:
no-SMAP / no-SMEP — exp2_lpe_no_smap.c. Una singola
syscall setcred(2) porta il thread chiamante a uid=0
reindirizzando la primitiva di catena a amd64_syscall+0x155
verso shellcode in spazio utente tramite un falso struct sysentvec.
SMAP / SMEP abilitati — exp_setcred_smap_zfs.c. Dirotta verso
ZSTD_initCStream_advanced in zfs.ko, il cui corpo scrive
td_ucred = rcx+1. Con rcx = K1 = parent_pargs - 1 (una
qword piantata nello slab pargs di un figlio), il puntatore alle
credenziali del thread chiamante finisce dentro lo slab pargs del
genitore dove abbiamo piantato un falso struct ucred con cr_uid=0.
Funziona su qualsiasi sistema FreeBSD 14.4 GENERIC con zfs.ko
caricato (configurazione server tipica) e non richiede alcuna
primitiva di info-leak del kernel.
setcred/
+- setcred.txt Write-up principale: vulnerabilità, entrambe le
| tecniche LPE, riferimenti ai PoC, STATO DEL FIX, cronologia.
| Puro ASCII.
+- exploits/ Raccolta curata di exploit.
+- poc_dos.c PoC DoS minimale -- qualsiasi utente
| manda in panic il kernel.
+- exp2_lpe_no_smap.c LPE completo su kernel senza SMAP/SMEP.
+- exp_setcred_smap_zfs.c LPE compatibile con SMAP/SMEP via zfs.ko
| gadget ZSTD. Nessun info-leak.
+- wrapper.c Piccolo launcher setuid-root → /bin/sh
| installato in /tmp/rsh
| da exp_setcred_smap_zfs.
+- Makefile.setcred_smap_zfs Pipeline di build lato guest per
| il percorso SMAP/SMEP
| (all, install, clean).
+- README_setcred_smap_zfs.md Write-up per l'utente finale sul
percorso SMAP/SMEP.
Il DoS (qualsiasi utente manda in panic il kernel) e l'LPE completo
senza SMAP/SMEP sono riproducibili con i rispettivi programmi in exploits/.
L'LPE completo con SMAP/SMEP abilitati è riproducibile tramite
exp_setcred_smap_zfs.c su qualsiasi sistema FreeBSD 14.4 GENERIC con
zfs.ko caricato. Vedere setcred.txt per la tecnica.
14.4-RELEASE / stable/14 rimangono vulnerabili alla data del report. Il fix è arrivato in main il 2025-11-27 (commit 000d5b5) come effetto collaterale di un refactoring non correlato e non è stato backportato.