CVE-2026-4747: ثغرة FreeBSD NFS اللي لازم تتعامل معاها دلوقتي
لو عندك FreeBSD server بيشغّل NFS مع Kerberos، الـ attacker بيقدر ياخد root عن بُعد بتذكرة Kerberos عادية من غير أي صلاحيات خاصة. الثغرة CVE-2026-4747 عمرها 17 سنة في الكود، واكتشفها Claude Mythos Preview في أبريل 2026. قرارك النهارده إنك تعمل patch أو تقفل الخدمة، مفيش خيار تالت.
المشكلة باختصار
الثغرة في svc_rpc_gss_validate() داخل الموديول kgssapi.ko. الدالة بتعيد بناء RPC header في buffer ثابت على الـ stack حجمه 128 بايت، وبعدين بتعمل memcpy لحقل oa_length اللي الـ attacker متحكم فيه من غير ما تتأكد إن الطول يدخل في الـ buffer. النتيجة: stack overflow كلاسيكي جوّا الـ kernel، استغلاله بيدي root shell عن بُعد من غير تفاعل من أي مستخدم.
مين معرّض فعلاً
مش كل FreeBSD box ينطبق عليه الخبر. اتحقق من النقط دي بالترتيب:
- الإصدار: 13.5 قبل p11، 14.3 قبل p10، 14.4 قبل p1، أو 15.0 قبل p5.
- الموديول
kgssapi.koمحمّل على الماكينة. - بورت 2049/TCP مكشوف على شبكة مش موثوقة بالكامل.
- الـ attacker يقدر يحصل على Kerberos ticket صالح لـ NFS service principal، حتى لو لـ user عادي من غير صلاحيات.
لو الأربع نقط اتحققوا مع بعض، انت في الـ blast radius المباشر. لو kgssapi.ko مش محمّل أصلاً عشان مش بتستخدم Kerberos، الهجوم مش قابل للتنفيذ حتى لو الـ kernel نفسه عنده الكود الهش.
الخطوة الفورية — خلال الساعة الأولى
- شغّل الأمر ده لحصر البيئة:
freebsd-version -k && kldstat | grep kgssapi. - لو الموديول شغّال على إصدار معرّض، طبّق FreeBSD-SA-26:08.rpcsec_gss فورًا.
- لو الـ patch محتاج ساعات، اقفل NFS من firewall على الشبكة العامة كـ mitigation مؤقت.
# 1. تحقق من الإصدار وتحميل الموديول
freebsd-version -k
kldstat | grep kgssapi
# 2. ثبّت آخر باتش (FreeBSD 14.4 كمثال)
freebsd-update fetch
freebsd-update install
reboot
# 3. mitigation مؤقت لو مش قادر تعمل reboot الليلة
# اقفل بورت 2049 على المنافذ غير الموثوقة
echo "block in quick proto tcp from any to any port 2049" >> /etc/pf.conf
service pf reload
# 4. لو مش بتستخدم Kerberos أصلاً، فرّغ الموديول كليًا
kldunload kgssapi
sysrc -f /boot/loader.conf kgssapi_load="NO"
الـ trade-offs اللي لازم تحسبها
عندك تلات خيارات، وكل واحد ليه تكلفته الواضحة:
- Patch + reboot فورًا: بتكسب إغلاق كامل للثغرة. بتخسر downtime في حدود 3–8 دقايق لكل node. مناسب لو عندك HA pair أو maintenance window قريب.
- Firewall mitigation مؤقت: بتكسب صفر downtime. بتخسر إن أي client خارج الـ allowlist بيفقد وصوله، وعندك نافذة هجوم لسه مفتوحة من داخل الشبكة لو attacker كسب foothold.
- Unload kgssapi.ko: بتكسب حل دائم من غير reboot. بتخسر Kerberos authentication لـ NFS بالكامل، وده ينفع فقط لو مش معتمد عليه.
الافتراض هنا إن عندك أقل من 100 NFS client، والـ authentication مش مربوط بنظام Active Directory حرج. لو البيئة أكبر من كده أو أكثر تعقيدًا، اتحرك في maintenance window مخطط بدل الحلول السريعة.
متى لا تستخدم الـ firewall mitigation
الـ block على بورت 2049 شكله حل سريع ومريح، لكنه بيفشل في حالتين محددتين:
- لو الـ attacker عنده foothold داخلي بالفعل (workstation مخترقة أو VPN كلمة السر مسرّبة)، الـ firewall بين الإنترنت والسيرفر مش هيحميك من حاجة.
- لو NFS مشارك بين segments داخلية كتير، الـ block هيكسر workflows إنتاجية بسرعة، وبتلاقي نفسك بترجع تفتح البورت من غير ما تعمل patch فعلاً.
الخلاصة: الـ firewall mitigation صالح لمدة 48–72 ساعة كحد أقصى. أبعد من كده، الـ patch هو الحل الوحيد الجدّي.
المصادر
- NIST NVD — تفاصيل CVE-2026-4747 الرسمية وتقييم CVSS.
- FreeBSD Security Advisory FreeBSD-SA-26:08.rpcsec_gss (patch levels لكل فرع).
- Anthropic — إعلان Claude Mythos Preview و Project Glasswing، 7 أبريل 2026.
- califio/publications على GitHub — write-up تقني كامل لـ MADBugs/CVE-2026-4747.
- The Hacker News — تغطية اكتشاف Mythos لآلاف الـ zero-days عبر أنظمة متعددة.
- Schneier on Security — تحليل Bruce Schneier لمعنى Mythos Preview على توازن الأمن السيبراني.
الخطوة التالية
افتح terminal على كل FreeBSD host إنتاجي عندك دلوقتي وشغّل kldstat | grep kgssapi && freebsd-version -k. لو النتيجة فيها kgssapi مع إصدار معرّض من اللي فوق، ابدأ الـ patch خلال 24 ساعة. لو الـ mitigation المؤقت هو الخيار الوحيد المتاح ليك حالاً، سجّل في التذكرة تاريخ لازم الـ patch يتركب فيه قبل نهاية الأسبوع؛ مفيش mitigation مؤقت بيستحمل أكتر من كده.