
CVE-2026-45250: FreeBSD 14.4 setcred kernel buffer overflow (LPE)
이 하위 디렉토리는 FreeBSD 14.x 커널의 setcred(2) 스택 버퍼 오버플로우에 대한 분석 문서와 작동하는 익스플로잇을 수집합니다.
취약점 자체는 setcred.txt에 완전히 문서화되어 있습니다. 간단히 말하면: kern_setcred_copyin_supp_groups()는 groups가 gid_t **일 때 sizeof(*groups)를 사용하여 고정 크기 커널 스택 배열로의 copyin()에 대해 4바이트가 아닌 8바이트 스트라이드를 생성합니다. 오버플로우는 권한 검사 전에 권한이 없는 사용자에 의해 도달 가능합니다.
이 저장소는 두 가지 작동하는 익스플로잇 경로를 포함합니다:
SMAP/SMEP 없음 — exp2_lpe_no_smap.c. 단일 setcred(2) 시스템 호출이 amd64_syscall+0x155에서 체인 프리미티브를 가짜 struct sysentvec을 통해 사용자 공간 셸코드로 리디렉션하여 호출 스레드를 uid=0으로 전환합니다.
SMAP/SMEP 활성화 — exp_setcred_smap_zfs.c. zfs.ko의 ZSTD_initCStream_advanced를 하이재킹하며, 해당 함수 본문은 td_ucred = rcx+1을 기록합니다. rcx = K1 = parent_pargs - 1 (자식의 pargs 슬래브에 심어진 qword)을 사용하면 호출 스레드의 credential 포인터가 부모의 pargs 슬래브 내부에 위치하게 되며, 여기에 cr_uid=0을 가진 가짜 struct ucred를 심었습니다. zfs.ko가 로드된 (일반적인 서버 구성) FreeBSD 14.4 GENERIC 시스템에서 작동하며 커널 정보 유출 프리미티브가 필요하지 않습니다.
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 (모든 사용자가 커널 패닉을 유발) 및 SMAP/SMEP 없는 전체 LPE는 exploits/의 해당 프로그램으로 재현 가능합니다.
SMAP/SMEP가 활성화된 상태의 전체 LPE는 zfs.ko가 로드된 FreeBSD 14.4 GENERIC 시스템에서 exp_setcred_smap_zfs.c을 통해 재현 가능합니다. 기술에 대해서는 setcred.txt를 참조하십시오.
14.4-RELEASE / stable/14는 보고일 기준으로 취약한 상태입니다. 수정은 2025-11-27에 메인 브랜치에 (커밋 000d5b5) 관련 없는 리팩토링의 부수 효과로 적용되었으며 백포트되지 않았습니다.