Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-31694-POC — Linux kernel FUSE readdir cache out-of-bounds write (CVE-2026-31694): a malicious FUSE server overflows a page-cache page by 24 bytes. PoC plus an unprivileged local-root exploit via /etc/passwd page-cache corruption. Run only inside a VM. | Kitploit
أدوات/GitHubGitHub/0xcyberstan/cve-2026-31694-poc
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالالتعلم والتعليماستغلال الملفات الثنائيةمختبرات وتدريب عملي
GitHub0xcyberstan/cve-2026-31694-poc

CVE-2026-31694-POC

Linux kernel FUSE readdir cache out-of-bounds write (CVE-2026-31694): a malicious FUSE server overflows a page-cache page by 24 bytes. PoC plus an unprivileged local-root exploit via /etc/passwd page-cache corruption. Run only inside a VM.

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
عرض المستودع
162منذ شهر واحدلم تتم المراجعة بعد

CVE-2026-31694: تجاوز كتابة خارج الحدود في ذاكرة التخزين المؤقت لـ readdir في FUSE

خلل في التحقق من الحدود في fs/fuse/readdir.c:fuse_add_dirent_to_cache(). يُرجع خادم FUSE اتجاهًا بقيمة namelen = 4095، والذي يُسلسل إلى سجل بحجم 4120 بايت. تنسخه النواة إلى صفحة واحدة بحجم 4096 بايت من ذاكرة التخزين المؤقت للصفحات، وتتجاوز بـ 24 بايت يتحكم بها الخادم إلى الصفحة المادية التالية.

يحتوي هذا المستودع على إثبات مفهوم (PoC) للكتابة الأولية، وتصعيد صلاحيات محلي يقوم بتهيئة التجاوز على نسخة ذاكرة التخزين المؤقت للصفحات من /etc/passwd ويجعل الجذر حسابًا بدون كلمة مرور.

  • المتأثر: لينكس 6.15+ (جعل رفع FUSE_NAME_MAX إلى PATH_MAX - 1 مسار readdir قابلًا للوصول)
  • تم الإصلاح بواسطة: 51a8de6c50bf9 "fuse: رفض الأدلة كبيرة الحجم في ذاكرة التخزين المؤقت للصفحات" (واحد من خمسة backports مستقرة)
  • CVE-2026-31694

تحذير: للآلة الافتراضية فقط، لا تقم بتشغيله على المعدن العاري

التجاوز هو كتابة kernel إلى أي صفحة مادية تقع مباشرة بعد صفحة ذاكرة التخزين المؤقت لـ FUSE. تهدف هذه التهيئة إلى توجيه الكتابة إلى صفحة محددة، لكنها احتمالية. في حالة الخطأ، يمكن أن تصيب الـ 24 بايت صفحة غير مرتبطة:

  • صفحات مخزنة مؤقتًا لملف آخر، بما في ذلك الصفحات المتسخة التي تُكتب مرة أخرى إلى القرص، مما يفسد الملفات الحقيقية،
  • بيانات kernel، مما قد يتسبب في ظهور خطأ kernel أو تلف صامت.

قم بتشغيله فقط داخل آلة افتراضية يمكن التخلص منها. دائمًا ما تقوم البرامج النصية هنا بتشغيل الاستغلال داخل QEMU/KVM، وليس على المضيف أبدًا.

التوزيع

root@kitploit:~
exploit.c                 إثبات المفهوم وتصعيد الصلاحيات المحلي (ملف واحد، بناء ثابت)
Makefile                  بناء ./exploit (ثابت)
vm/config.sh              جميع المسارات والإعدادات (قم بتحرير KERNEL_TREE)
vm/make_rootfs.sh         بناء صورة الضيف Ubuntu 24.04 (شغّل كجذر)
vm/build_vuln_kernel.sh   بناء bzImage معرضة للخطر من شجرة kernel الخاصة بك
vm/run_vm.sh              تشغيل الضيف بدون واجهة
vm/provision_guest.sh     إعداد داخل الضيف (يعمل عبر SSH)
vm/run_in_vm.sh           أمر واحد: تشغيل، إعداد، تنفيذ، تحقق

المتطلبات

المضيف: لينكس مع KVM (/dev/kvm موجود، المستخدم في مجموعة kvm)، و:

  • qemu-system-x86_64، sshpass، gcc، make
  • لـ make_rootfs.sh: debootstrap (وجذر)

تحتاج أيضًا إلى شجرة مصدر kernel لينكس لبناء kernel معرض للخطر.

الإعداد

  1. قم بتحرير vm/config.sh. القيمة الوحيدة التي يجب تعيينها هي KERNEL_TREE: المسار إلى نسخة من شجرة لينكس. استخدم مراجعة قبل الإصلاح 51a8de6c50bf9 (أي نسخة 6.15..7.0 بها الخلل). إذا كانت الشجرة تحتوي بالفعل على الإصلاح، فإن build_vuln_kernel.sh يزيل الحاجز من أجل البناء ثم يستعيد الملف بعد ذلك. كل شيء آخر (الذاكرة، وحدات المعالجة المركزية، منفذ SSH، مسارات الصور) له إعداد افتراضي يمكنك تركه. يمكن تعيين أي قيمة أيضًا من البيئة، على سبيل المثال KERNEL_TREE=/path/to/linux vm/run_in_vm.sh.

  2. قم ببناء صورة الضيف (Ubuntu 24.04، يحتاج إلى صلاحيات جذر لـ debootstrap):

    root@kitploit:~
    sudo vm/make_rootfs.sh
    

    يؤدي هذا إلى إنشاء مستخدم sudo test:test، ووحدة تحكم تسلسلية، ومصادقة كلمة مرور ssh، و fuse3.

  3. قم ببناء kernel المعرض للخطر:

    root@kitploit:~
    vm/build_vuln_kernel.sh
    

التشغيل

من البداية إلى النهاية (تشغيل، إعداد، إثبات المفهوم العلامة، تصعيد الصلاحيات المحلي، التحقق من uid 0):

root@kitploit:~
vm/run_in_vm.sh

يدويًا:

root@kitploit:~
vm/run_vm.sh &                 # تشغيل بدون واجهة؛ تذهب وحدة التحكم إلى vm/serial.log
make                           # بناء الاستغلال الثابت
# انسخ ./exploit إلى الضيف، ثم كمستخدم test:
./exploit --poc -n 20          # اختبار العلامة
./exploit                      # تسخين، ثم تصعيد الصلاحيات المحلي

إيقاف VM:

root@kitploit:~
pkill -f bzImage-fuse-vuln

خيارات exploit

root@kitploit:~
--poc      وضع العلامة فقط، بدون تغييرات /etc/passwd
-n N       عدد الجولات
(بدون وسائط)  5 جولات تسخين، ثم ما يصل إلى 200 محاولة تصعيد صلاحيات؛ عند النجاح يكتب
           سطر جذر بدون كلمة مرور إلى /etc/passwd ويمسح المخابئ

المخرجات المتوقعة

وضع العلامة يطبع عدد الضربات لكل جولة والإجمالي، على سبيل المثال 20/20 (100.0%).

وضع تصعيد الصلاحيات المحلي يطبع Warmup: 5/5، ثم سطر LPE n/200 ... HIT!، ويغير السطر الأول من /etc/passwd من root:x:0:0:root:/root:/bin/bash إلى root::0:0:root:/root:/bin/sh، ويؤدي su -s /bin/sh root التالي مع كلمة مرور فارغة إلى إرجاع uid 0.

كيف يعمل

يقوم مسار ذاكرة التخزين المؤقت لـ readdir بنسخ كل اتجاه إلى صفحة من ذاكرة التخزين المؤقت للصفحات. يتحقق التحقق من الحجم فقط مما إذا كان الاتجاه يتناسب مع المساحة المتبقية من الصفحة الحالية؛ لا يسأل أبدًا عما إذا كان الاتجاه يتناسب مع صفحة على الإطلاق. مع namelen = 4095 يكون السجل 4120 بايت، لذلك يمتد النسخ 24 بايت بعد نهاية صفحة جديدة.

يقوم الاستغلال بتفريغ قوائم الصفحات الحرة لكل CPU (PCP) بحيث يقوم الموزع بتسليم صفحات متجاورة فيزيائيًا من تقسيمات buddy، ثم يرتب صفحة ذاكرة التخزين المؤقت لـ readdir وصفحة ضحية لتكونا متجاورتين. بالنسبة لتصعيد الصلاحيات المحلي، الضحية هي نسخة ذاكرة التخزين المؤقت للصفحات من /etc/passwd: التجاوز بـ 24 بايت يعيد كتابة سطر الجذر بحيث يكون حقل كلمة المرور فارغًا، ومع nullok PAM (الإعداد الافتراضي لأوبونتو) ينجح su root بكلمة مرور فارغة.

الشرح الكامل: https://cyberstan.co.uk/fuse-readdir-oob/

الإفصاح

تم الإبلاغ عنه إلى المنبع بواسطة Qi Tang و Zijun Hu؛ تمت كتابة الإصلاح بواسطة Samuel Page. لقد وجدت هذا وأبلغت عنه بشكل مستقل. الفضل المنبع و CVE-2026-31694 ملك لهم. الخلل تم إصلاحه في السلسلة الرئيسية وفي الأشجار المستقرة.

الترخيص

MIT، انظر LICENSE. للأغراض التعليمية والاختبار المصرح به فقط.

تنزيل الأداة