
CVE-2026-45250: FreeBSD 14.4 setcred تجاوز المخزن المؤقت للنواة (LPE)
يجمع هذا الدليل الفرعي الشرح (write-up) والاستغلالات (exploits) العاملة لـ تجاوز سعة المخزن المؤقت (stack buffer overflow) في دالة setcred(2) في نواة FreeBSD 14.x.
الثغرة نفسها موثقة بالكامل في setcred.txt. النسخة المختصرة: تستخدم kern_setcred_copyin_supp_groups() sizeof(*groups) حيث groups من النوع gid_t **، مما ينتج خطوة (stride) بحجم 8 بايت بدلاً من 4 لـ copyin() في مصفوفة kernel-stack ذات حجم ثابت. يمكن الوصول إلى التجاوز قبل أي فحص صلاحيات، من قبل أي مستخدم غير مميز.
يحتوي هذا المستودع على مسارين استغلاليين عاملين:
no-SMAP / no-SMEP — exp2_lpe_no_smap.c. استدعاء نظام واحد setcred(2) يقلب خيط الاستدعاء إلى uid=0 عن طريق توجيه البدائية المتسلسلة (chain primitive) عند amd64_syscall+0x155 إلى شيلكود (shellcode) في مساحة المستخدم عبر struct sysentvec مزيف.
مع تمكين SMAP/SMEP — exp_setcred_smap_zfs.c. يختطف إلى ZSTD_initCStream_advanced في zfs.ko الذي يكتب بداخله td_ucred = rcx+1. مع rcx = K1 = parent_pargs - 1 (كلمة رباعية (qword) مزروعة في slab pargs لطفل)، يهبط مؤشر الاعتماد (credential pointer) لخيط الاستدعاء داخل slab pargs الأب حيث زرعنا struct ucred مزيفًا يحتوي على cr_uid=0. يعمل على أي نظام FreeBSD 14.4 GENERIC مع تحميل zfs.ko (تكوين خادم نموذجي) ولا يتطلب بدائية تسريب معلومات (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) (أي مستخدم يتسبب في ذعر النواة) ورفع الامتياز الكامل (LPE) بدون SMAP/SMEP يمكن إعادة إنتاجهما بواسطة البرامج المقابلة في exploits/.
رفع الامتياز الكامل مع تمكين SMAP/SMEP يمكن إعادة إنتاجه عبر exp_setcred_smap_zfs.c على أي نظام FreeBSD 14.4 GENERIC مع تحميل zfs.ko. انظر setcred.txt للحصول على التقنية.
14.4-RELEASE / stable/14 لا تزال عرضة للثغرة حتى تاريخ التقرير. تم إصلاح الثغرة في الفرع الرئيسي (main) في 2025-11-27 (الالتزام 000d5b5) كأثر جانبي لإعادة هيكلة غير ذات صلة ولم يتم إرجاعه (backported) إلى الإصدارات المستقرة.