
CVE-2026-45250: FreeBSD 14.4 setcred Kernel-Pufferüberlauf (LPE)
Dieses Unterverzeichnis enthält die Dokumentation und funktionierende Exploits für den Stack-Pufferüberlauf in setcred(2) im FreeBSD-14.x-Kernel.
Die Schwachstelle selbst ist in setcred.txt vollständig dokumentiert. Die Kurzfassung: kern_setcred_copyin_supp_groups() verwendet sizeof(*groups), wobei groups vom Typ gid_t ** ist, was für ein copyin() in ein Array fester Größe auf dem Kernel-Stack eine Schrittweite von 8 Bytes statt 4 Bytes ergibt. Der Überlauf ist vor jeder Privilegienprüfung durch jeden unprivilegierten Benutzer erreichbar.
Dieses Repository enthält zwei funktionierende Exploit-Pfade:
no-SMAP / no-SMEP — exp2_lpe_no_smap.c. Ein einzelner
setcred(2)-Systemaufruf setzt die uid des aufrufenden Threads auf 0,
indem die Chain-Primitive bei amd64_syscall+0x155 über eine
gefälschte struct sysentvec auf User-Space-Shellcode umgeleitet
wird.
SMAP / SMEP aktiviert — exp_setcred_smap_zfs.c. Entführt den
Kontrollfluss zu ZSTD_initCStream_advanced in zfs.ko, dessen Rumpf
td_ucred = rcx+1 schreibt. Mit rcx = K1 = parent_pargs - 1 (einem
Qword, das in einem pargs-Slab eines Kindprozesses platziert wurde),
landet der Credential-Zeiger des aufrufenden Threads im pargs-Slab des
Elternprozesses, in dem eine gefälschte struct ucred mit cr_uid=0
platziert wurde. Funktioniert auf jedem FreeBSD-14.4-GENERIC-System
mit geladenem zfs.ko (typische Serverkonfiguration) und erfordert
keine Kernel-Info-Leak-Primitive.
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.
DoS (jeder Benutzer kann einen Kernel-Panic auslösen) und vollständiger LPE ohne SMAP/SMEP sind mit den entsprechenden Programmen in exploits/ reproduzierbar.
Vollständiger LPE mit aktiviertem SMAP/SMEP ist über exp_setcred_smap_zfs.c auf jedem FreeBSD-14.4-GENERIC-System mit geladenem zfs.ko reproduzierbar. Siehe setcred.txt für die Technik.
14.4-RELEASE / stable/14 bleiben zum Zeitpunkt des Berichts verwundbar. Der Fix landete am 2025-11-27 (Commit 000d5b5) als Nebeneffekt eines unabhängigen Refactorings in main und wurde nicht zurückportiert.