
CVE-2026-45250: FreeBSD 14.4 setcred desbordamiento de búfer del kernel (LPE)
Este subdirectorio recopila el informe y los exploits funcionales para la
vulnerabilidad de desbordamiento de búfer en la pila de setcred(2) en el kernel de FreeBSD 14.x.
La vulnerabilidad en sí está completamente documentada en setcred.txt. La versión
resumida: kern_setcred_copyin_supp_groups() usa sizeof(*groups) donde
groups es gid_t **, generando un avance de 8 bytes en lugar de 4 para una
copyin() hacia un arreglo de tamaño fijo en la pila del kernel. El desbordamiento es alcanzable
antes de cualquier verificación de privilegios, por cualquier usuario no privilegiado.
Este repositorio captura dos rutas de exploit funcionales:
sin SMAP / sin SMEP — exp2_lpe_no_smap.c. Una sola
llamada al sistema setcred(2) cambia el hilo llamante a uid=0 mediante
redirigiendo la primitiva de cadena en amd64_syscall+0x155 hacia
shellcode de espacio de usuario a través de un struct sysentvec falso.
SMAP / SMEP habilitado — exp_setcred_smap_zfs.c. Secuestra hacia
ZSTD_initCStream_advanced en zfs.ko cuyo cuerpo escribe
td_ucred = rcx+1. Con rcx = K1 = parent_pargs - 1 (un
qword colocado en el slab pargs de un hijo), el puntero de credenciales del hilo llamante
termina dentro del slab pargs del padre donde
hemos colocado un struct ucred falso con cr_uid=0. Funciona
en cualquier sistema FreeBSD 14.4 GENERIC con zfs.ko cargado
(configuración típica de servidor) y no requiere ninguna
primitiva de fuga de información del kernel.
setcred/
+- setcred.txt Informe principal: vulnerabilidad, ambas técnicas de LPE
| punteros a PoC, ESTADO DE LA CORRECCIÓN, cronología.
| ASCII puro.
+- exploits/ Colección curada de exploits.
+- poc_dos.c PoC mínimo de DoS -- cualquier usuario
| provoca un pánico del kernel.
+- exp2_lpe_no_smap.c LPE completo en kernel sin SMAP/SMEP.
+- exp_setcred_smap_zfs.c LPE seguro con SMAP/SMEP mediante zfs.ko
| gadget ZSTD. Sin fuga de información.
+- wrapper.c Pequeño lanzador setuid-root → /bin/sh
| instalado en /tmp/rsh
| por exp_setcred_smap_zfs.
+- Makefile.setcred_smap_zfs Pipeline de compilación del lado invitado para
| la ruta SMAP/SMEP
| (all, install, clean).
+- README_setcred_smap_zfs.md Informe para usuario final sobre la
ruta SMAP/SMEP.
DoS (cualquier usuario provoca un pánico del kernel) y LPE completo sin SMAP/SMEP
son reproducibles mediante los programas correspondientes en exploits/.
LPE completo con SMAP/SMEP habilitado es reproducible mediante
exp_setcred_smap_zfs.c en cualquier sistema FreeBSD 14.4 GENERIC con
zfs.ko cargado. Consulte setcred.txt para conocer la técnica.
14.4-RELEASE / stable/14 permanecen vulnerables a la fecha del informe. La corrección llegó a main el 2025-11-27 (commit 000d5b5) como efecto secundario de una refactorización no relacionada y no fue retroportada.