
CVE-2026-45250: FreeBSD 14.4 setcred kernel buffer overflow (LPE)
Este subdiretório reúne a documentação e os exploits funcionais para a
vulnerabilidade de estouro de buffer de pilha setcred(2) no kernel FreeBSD 14.x.
A vulnerabilidade em si está totalmente documentada em setcred.txt. A versão
resumida: kern_setcred_copyin_supp_groups() usa sizeof(*groups) onde
groups é gid_t **, produzindo um passo de 8 bytes em vez de 4 para um
copyin() em um array de pilha do kernel de tamanho fixo. O estouro é acessível
antes de qualquer verificação de privilégio, por qualquer usuário não privilegiado.
Este repositório captura dois caminhos de exploit funcionais:
sem SMAP / sem SMEP — exp2_lpe_no_smap.c. Uma única
chamada de sistema setcred(2) altera a thread chamadora para uid=0 ao
redirecionar a primitiva de cadeia em amd64_syscall+0x155 para
shellcode em espaço de usuário através de uma struct sysentvec falsa.
SMAP / SMEP habilitado — exp_setcred_smap_zfs.c. Sequestra para
ZSTD_initCStream_advanced em zfs.ko cujo corpo escreve
td_ucred = rcx+1. Com rcx = K1 = parent_pargs - 1 (um
qword plantado no slab pargs de um filho), o ponteiro de credenciais da
thread chamadora cai dentro do slab pargs do pai onde
plantamos uma struct ucred falsa com cr_uid=0. Funciona
em qualquer sistema FreeBSD 14.4 GENERIC com zfs.ko carregado
(configuração típica de servidor) e não requer nenhuma
primitiva de vazamento de informações do kernel.
setcred/
+- setcred.txt Documentação principal: vulnerabilidade, ambas as técnicas de LPE,
| ponteiros de PoC, STATUS DA CORREÇÃO, cronograma.
| ASCII puro.
+- exploits/ Pacote de exploits selecionados.
+- poc_dos.c PoC mínimo de DoS -- qualquer usuário
| trava o kernel.
+- exp2_lpe_no_smap.c LPE completo em kernel sem SMAP/SMEP.
+- exp_setcred_smap_zfs.c LPE seguro com SMAP/SMEP via gadget ZSTD
| do zfs.ko. Sem vazamento de informações.
+- wrapper.c Pequeno lançador setuid-root → /bin/sh
| instalado em /tmp/rsh
| pelo exp_setcred_smap_zfs.
+- Makefile.setcred_smap_zfs Pipeline de compilação do lado convidado para
| o caminho SMAP/SMEP
| (all, install, clean).
+- README_setcred_smap_zfs.md Documentação do usuário final para o
caminho SMAP/SMEP.
DoS (qualquer usuário trava o kernel) e LPE completo sem SMAP/SMEP
são reproduzíveis pelos programas correspondentes em exploits/.
LPE completo com SMAP/SMEP habilitado é reproduzível via
exp_setcred_smap_zfs.c em qualquer sistema FreeBSD 14.4 GENERIC com
zfs.ko carregado. Consulte setcred.txt para a técnica.
14.4-RELEASE / stable/14 permanecem vulneráveis até a data do relatório. A correção foi enviada para o main em 2025-11-27 (commit 000d5b5) como um efeito colateral de uma refatoração não relacionada e não foi incorporada às versões anteriores.