
تقرير حول "Dirty Frag"، وهي سلسلة ثغرات تصعيد الامتيازات المحلية (LPE) في لينكس تسمح لمستخدم غير مميز بالحصول على صلاحيات الجذر.
يوثق هذا المستودع عملية إعادة الإنتاج الشاملة وهندسة الكشف والاستجابة للحوادث لسلسلة Dirty Frag لتصعيد الامتيازات المحلية (LPE) في نواة لينكس. تجمع Dirty Frag بين خطأين منطقيين حتميين—CVE‑2026‑43284 (xfrm/ESP) وCVE‑2026‑43500 (RxRPC)—للسماح لمستخدم محلي غير مميز بالكتابة فوق ذاكرة التخزين المؤقت للصفحات للملفات القابلة للقراءة فقط (مثل /usr/bin/su) والحصول على شل جذر.
Dirty Frag هي ثغرة منطقية، وليست تلفًا في الذاكرة. إنها حتمية، وتؤثر على كل توزيعات لينكس تقريبًا التي صدرت منذ 2017، وهي بدون ملفات تمامًا—لا تستطيع أنظمة مراقبة سلامة الملفات التقليدية (AIDE, Tripwire) رؤيتها. إثبات الاستغلال العام هو ملف C واحد يربط بين مسار ESP وRxRPC.
| المكون | التفاصيل |
|---|---|
| المُشغِّل الافتراضي | VirtualBox |
يبدأ المختبر بتأكيد أن الهدف يعمل بنواة قابلة للاستغلال.
cat /etc/os-release | head -3
uname -r
📸 screenshots/pre_exploit_id.png — تفاصيل إصدار Kali 2026.1 والنواة. يُظهر ناتج uname -r النواة الضعيفة 6.18.12+kali‑amd64. 2. التحقق من وجود الوحدات القابلة للاستغلال
يتطلب الاستغلال وجود وحدات esp4 وesp6 وrxrpc في النواة.
lsmod | grep -E "esp4|esp6|rxrpc"
modinfo esp4 esp6 rxrpc 2>/dev/null | grep -E "^(name|depends)"
📸 screenshots/module_mitigation.png — يؤكد lsmod وmodinfo توفر الوحدات القابلة للاستغلال. 3. إصدار بايثون
النسخة المعتمدة على بايثون من إثبات الاستغلال تحتاج إلى بايثون 3.10+. نتحقق من المفسر.
python3 --version
بايثون 3.12 مثبت وجاهز. 4. أداة التحقق من الثغرة (غير مدمرة)
قبل تشغيل الاستغلال الكامل، يقوم سكريبت فحص آمن بتأكيد أن النظام قابل للاستغلال.
python3 poc/check_vulnerable.py
يُبلغ الفاحص عن "ضعف محتمل"، مما يمهّد الطريق للاستغلال. 5. إنشاء مستخدم غير مميز
حساب testuser غير المميز يحاكي مهاجمًا بدون صلاحيات خاصة.
sudo useradd -m testuser
sudo passwd testuser
su - testuser
id
📸 id يُظهر UID 1001، مما يؤكد الوصول غير الجذري. 6. استنساخ وتنفيذ الاستغلال
يتم استنساخ إثبات الاستغلال الرسمي من V4bel وتجميعه من الحساب غير المميز.
git clone https://github.com/V4bel/dirtyfrag.git
cd dirtyfrag
gcc -O0 -Wall -o exp exp.c -lutil
./exp
📸 screenshots/exploit_execution.png — يستبدل الاستغلال ذاكرة التخزين المؤقت للصفحات لـ /usr/bin/su ويفجر الثنائي الفاسد.
📸 screenshots/post_exploit_root.png — يثبت كل من whoami وid تصعيد كامل للجذر. 7. التحقق من الطبيعة غير الملفية (لا تعديل على القرص)
الاستغلال يفسد فقط ذاكرة التخزين المؤقت للصفحات في الذاكرة. يحتفظ على القرص /usr/bin/su بمجمعه الأصلي.
sha256sum /usr/bin/su
يتطابق sha256sum مع تجزئة الحزمة الأصلية حتى بعد الاستغلال، مما يؤكد عدم وجود تعديل على القرص. 8. التنظيف بعد الاستغلال (حرج!)
بعد تشغيل الاستغلال، تكون ذاكرة التخزين المؤقت للصفحات ملوثة. قم دائمًا بمسحها:
echo 3 | sudo tee /proc/sys/vm/drop_caches
# أو أعد تشغيل النظام
لا يمكن كشف Dirty Frag من خلال مراقبة سلامة الملفات. بدلاً من ذلك، نركز على بدائيات مستوى استدعاءات النظام التي تستخدمها.
نقوم بنشر قواعد auditd مخصصة تُفعّل عند:
إنشاء مقبس socket(AF_ALG) من العائلة 38 و socket(AF_RXRPC) من العائلة 21
استخدام استدعاء النظام splice()
إنشاء مساحة أسماء unshare(CLONE_NEWUSER | CLONE_NEWNET)
وصول للقراءة إلى ثنائيات setuid بواسطة عمليات غير مميزة
# /etc/audit/rules.d/dirtyfrag.rules
-a always,exit -F arch=b64 -S socket -F a0=38 -F uid!=0 -k dirtyfrag_af_alg
-a always,exit -F arch=b64 -S socket -F a0=21 -F uid!=0 -k dirtyfrag_rxrpc
-a always,exit -F arch=b64 -S splice -F uid!=0 -k dirtyfrag_splice
-a always,exit -F arch=b64 -S unshare -F uid!=0 -k dirtyfrag_namespace
-w /usr/bin/su -p r -k dirtyfrag_suid_read
جميع القواعد المخصصة نشطة، تم التحقق منها باستخدام auditctl -l.
بعد تشغيل الاستغلال مرة ثانية، نرى تنبيهات لاستدعاءات النظام الدقيقة المستخدمة:
يظهر ausearch -k dirtyfrag_af_alg حدث إنشاء مقبس AF_ALG من عملية testuser
يظهر ausearch -k dirtyfrag_splice حدث splice() من نفس PID، ارتباط قوي
يظهر ausearch -k dirtyfrag_namespace إنشاء مساحة أسماء
تقوم قاعدة Sigma بترجمة نتائج auditd إلى تنسيق SIEM محايد للبائع.
الملف: detection/sigma/dirty_frag_exploit.yml
تساعد قاعدة YARA في تحديد كود استغلال Dirty Frag على القرص وفي الذاكرة.
الملف: detection/yara/dirty_frag_exploit.yar
يتوفر تقرير استجابة كامل للحوادث في reports/incident-dirtyfrag.md. يتضمن:
ملخص تنفيذي — تم رصد استغلال Dirty Frag
مؤشرات الاختراق (IoCs) — تنبيهات auditd لإنشاء مقبس AF_ALG/AF_RXRPC، استدعاءات splice()، أحداث unshare لمساحة الاسم، وتنفيذ ثنائيات SUID بواسطة عمليات غير جذرية
تعيين MITRE ATT&CK — T1068 (استغلال لتصعيد الامتيازات)، T1611 (الهروب إلى المضيف)
خطوات الاحتواء والاستئصال — حظر الوحدات، مسح ذاكرة التخزين المؤقت للصفحات، ترقية النواة
الدروس المستفادة بشأن الهجمات غير الملفية وأهمية تدقيق مستوى استدعاءات النظام
التخفيف الفوري (لا يتطلب إعادة تشغيل):
echo "install esp4 /bin/false" | sudo tee /etc/modprobe.d/dirtyfrag.conf
echo "install esp6 /bin/false" | sudo tee -a /etc/modprobe.d/dirtyfrag.conf
echo "install rxrpc /bin/false" | sudo tee -a /etc/modprobe.d/dirtyfrag.conf
sudo rmmod esp4 esp6 rxrpc 2>/dev/null
⚠️ التأثير: تعطيل هذه الوحدات يعطل شبكات IPsec VPN ووظائف نظام ملفات AFS.
سكريبت تخفيف جاهز للاستخدام موجود في mitigation/dirtyfrag_mitigation.sh.
الإصلاح الدائم: قم بترقية نواتك إلى إصدار مصحح.
| الجهاز الهدف |
| Kali Linux 2026.1 |
| النواة | 6.18.12+kali‑amd64 |
| إثبات الاستغلال | V4bel/dirtyfrag |
| الكشف | auditd, Sigma, YARA |
| الطبقة | ما تراه | الحالة |
|---|
| auditd | مقابس AF_ALG/AF_RXRPC + استدعاءات splice + unshare | ✅ مُطبَّقة |
| Sigma | أنماط استدعاءات النظام عبر SIEM | ✅ القاعدة جاهزة |
| YARA | كود إثبات الاستغلال على القرص/في الذاكرة | ✅ القاعدة جاهزة |
| FIM (AIDE/Tripwire) | تغييرات الملفات | ❌ أعمى – لا يحدث كتابة على القرص |