
CVE-2026-45250 : débordement de tampon du noyau setcred de FreeBSD 14.4 (LPE)
Ce sous-répertoire rassemble le rapport et les exploits fonctionnels pour le débordement de tampon de pile de setcred(2) dans le noyau FreeBSD 14.x.
La vulnérabilité elle-même est entièrement documentée dans setcred.txt. La version courte : kern_setcred_copyin_supp_groups() utilise sizeof(*groups) où groups est gid_t **, produisant un pas de 8 octets au lieu de 4 pour un copyin() dans un tableau de pile noyau de taille fixe. Le débordement est accessible avant toute vérification de privilège, par tout utilisateur non privilégié.
Ce dépôt capture deux chemins d'exploit fonctionnels :
sans SMAP / sans SMEP — exp2_lpe_no_smap.c. Un seul appel système setcred(2) bascule le thread appelant vers uid=0 en redirigeant la primitive de chaîne à amd64_syscall+0x155 vers du shellcode en espace utilisateur via une fausse struct sysentvec.
SMAP / SMEP activé — exp_setcred_smap_zfs.c. Détourne vers ZSTD_initCStream_advanced dans zfs.ko dont le corps écrit td_ucred = rcx+1. Avec rcx = K1 = parent_pargs - 1 (un qword planté dans le slab pargs d'un enfant), le pointeur de credential du thread appelant atterrit à l'intérieur du slab pargs du parent où nous avons planté une fausse struct ucred avec cr_uid=0. Fonctionne sur tout système FreeBSD 14.4 GENERIC avec zfs.ko chargé (configuration serveur typique) et ne nécessite aucune primitive de fuite d'information du noyau.
setcred/
+- setcred.txt Primary write-up: vulnerability, both LPE
| techniques, PoC pointers, FIX STATUS, timeline.
| Pure ASCII.
+- exploits/ Curated exploit drop.
+- poc_dos.c Minimal DoS PoC -- any user
| panics kernel.
+- exp2_lpe_no_smap.c Full LPE on no-SMAP/SMEP kernel.
+- exp_setcred_smap_zfs.c SMAP/SMEP-safe LPE via zfs.ko
| ZSTD gadget. No info-leak.
+- wrapper.c Tiny setuid-root → /bin/sh
| launcher installed at /tmp/rsh
| by exp_setcred_smap_zfs.
+- Makefile.setcred_smap_zfs Guest-side build pipeline for
| the SMAP/SMEP path
| (all, install, clean).
+- README_setcred_smap_zfs.md End-user write-up for the
SMAP/SMEP path.
Le DoS (tout utilisateur fait paniquer le noyau) et l'élévation de privilèges complète sans SMAP/SMEP sont reproductibles par les programmes correspondants dans exploits/.
L'élévation de privilèges complète avec SMAP/SMEP activé est reproductible via exp_setcred_smap_zfs.c sur tout système FreeBSD 14.4 GENERIC avec zfs.ko chargé. Voir setcred.txt pour la technique.
14.4-RELEASE / stable/14 restent vulnérables à la date du rapport. Le correctif a atterri dans main le 2025-11-27 (commit 000d5b5) comme effet secondaire d'un refactoring non lié et n'a pas été rétroporté.