
استغلال لـ CVE-2023-5178
أداة استغلال CVE-2023-5178: ثغرة NVMe-oF-TCP، وهذه الثغرة عبارة عن خطأ منطقي في مشغّل NVMe-oF-TCP أثناء معالجة طلب Initialize Connection Request التالف. يؤدي ذلك إلى double-free ناتج عن حالة سباق في kmalloc-96، والذي يمكن استغلاله للحصول على LPE (انظر العرض التوضيحي أدناه).
تستهدف أداة الاستغلال نظام Ubuntu 23.10 مع نواة 6.5.0-9-generic (أحدث إصدار نواة متأثر).
v6 الأقدم عن طريق تغيير رموز النواة
وضبط سلسلة ropchain.v5 بعض التعديلات الطفيفة التي سأناقشها في الشرح. الاستغلال في نواة v5 أسهل (سأناقشه في الشرح) وأكثر موثوقية.تم اكتشاف الثغرة بواسطة Alon Zahavi. وقد نشر وصفًا جيدًا للثغرة في هذا مقال openwall.
شاهد الفيديو هنا.

nvmet و nvmet-tcp محمّلة في النواة.libfuse3-dev (إنه مثبّت افتراضيًا على Ubuntu، لكن على أي حال). إذا لم يكن لديك، فالفكرة الأفضل هي تنزيل وتجميع
الإصدار من github.
لقد استخدمت 3.14.0، لكنه سيعمل مع الإصدارات الأخرى أيضًا.SLUB، لكن حالة السباق (race condition) تجعل الأمور معقدة بعض الشيء. على أي حال، سأصف في الشرح كيفية تحسينها للتعامل مع الأجهزة متعددة المعالجات (multi-CPU).git clone https://github.com/rockrid3r/CVE-2023-5178
cd CVE-2023-5178
make
./build/xpl # run the exploit
libfuse3-dev، يجب عليك ربط مكتبة libfuse المترجمة يدويًا.
انظر Makefile لمعرفة كيفية التجميع. استبدل -lfuse3 بـ -l:path-to-libfuse.so. لا تنسَ إضافة مسار الملفات الرأسية باستخدام -I /path/to/libfuse-headers/.
شغّل أداة الاستغلال باستخدام:LD_PRELOAD_PATH=/path/to/libfuse.so ./build/exploit
لمن يريد اختبار ما إذا كانت الثغرة موجودة على أنظمتهم، يوجد ملف src/poc.c الذي يقوم ببساطة بتفعيل الثغرة.
يفترض التكوين القياسي لعنوان IP/المنفذ الخاص بـ NVMe-oF-TCP على نظامك.
يجب عليك تعديلها إذا كانت إعداداتك غير افتراضية:
#define NVME_SERVER_IP "0.0.0.0" // ip of vulnerable host in LAN (localhost here).
#define NVME_SERVER_PORT 4420 // port on which NVMe-oF-TCP is set up on vulnerable host
قم بتجميعه وتشغيله باستخدام:
make build/poc
./build/poc
يكفي أن تشغّله (ربما عدة مرات) ثم تنتظر قليلًا. إذا كانت الثغرة موجودة، فسيتعطل النظام.
انظر الشرح الكامل هنا.