
استغلال تصعيد الامتيازات في النواة لثغرة CVE-2026-31431، عبر إساءة استخدام واجهة AF_ALG لاستبدال /bin/su وتشغيل قشرة بصلاحيات الجذر. يتضمن تنفيذًا بلغة C ودليلًا لاستكشاف الأخطاء وإصلاحها.
المؤلف: 0xShe
اللغة / Language
دليل أداة تصعيد الصلاحيات على مستوى النواة CVE-2026-31431
0x01 بدء سريع
بعض البيئات المستهدفة لا تحتوي على Python مثبتًا، لذلك تمت إعادة كتابة منطق تصعيد الصلاحيات هذا بلغة C.
قم بتشغيل الأمر التالي على جهاز Linux أو WSL (يُوصى باستخدام -static لتجنب مشاكل إصدارات GLIBC):
gcc -static exploit.c -o exploit
2. النشر والتنفيذ
قم برفع الملف الثنائي المُنشأ إلى الجهاز المستهدف:
chmod +x exploit
./exploit
إذا نجح الاستغلال، سيقوم البرنامج تلقائيًا بتنفيذ su وسيفتح جلسة root مباشرة دون الحاجة إلى كلمة مرور.
0x02 منطق تصعيد الصلاحيات: كيف يعمل؟
يستغل هذا الاستغلال ثغرة منطقية في واجهة AF_ALG الخاصة بنواة Linux (Kernel Crypto API).
إنشاء مقبس تشفير (Crypto Socket) يقوم البرنامج بإنشاء مقبس AEAD (تشفير مصادق عليه مع بيانات مرتبطة) باستخدام socket(AF_ALG, ...).
حقن الذاكرة (Splice) من خلال الاستفادة من استدعاء نظام splice في Linux، يمكن إعادة توجيه البيانات من واصف ملف (في هذه الحالة /bin/su) مباشرة إلى مخزن التشفير في النواة.
استبدال الحمولة (Payload Overwrite) باستخدام إزاحات ذاكرة محددة، يستبدل الاستغلال جزءًا من منطق المصادقة في /bin/su بحمولة تصعيد صلاحيات (برنامج ELF صغير يقوم بتشغيل /bin/sh).
تشغيل تصعيد الصلاحيات بعد أن تكمل النواة سلسلة عمليات التشفير، تكون عملية su في الذاكرة قد تم العبث بها بالفعل. عند تنفيذ system("su") في النهاية، يقوم النظام فعليًا بتشغيل حمولة جذر معدلة بدلاً من ذلك.
0x03 دليل استكشاف الأخطاء: لماذا لا يزال يطلب كلمة مرور؟
أثناء التصحيح، إذا قام البرنامج بطباعة Exploit finished ولكن تشغيل su لا يزال يتطلب كلمة مرور، فعادةً ما تكون المشكلة ناتجة عن أحد التفاصيل التالية.
هذه هي نقطة الفشل الأكثر شيوعًا. يجب أن يتضمن استدعاء sendmsg علامة MSG_MORE.
السبب: تخبر هذه العلامة النواة بأن المزيد من البيانات قادمة وتمنع إنهاء مخزن التشفير في وقت مبكر جدًا.
النتيجة: بدون هذه العلامة، تقوم النواة بإغلاق سياق التشفير الحالي فورًا. ونتيجة لذلك، لا يمكن لحقن splice اللاحق الدخول إلى المخزن الصحيح في النواة، مما يجعل الاستبدال مستحيلًا.
النواة صارمة للغاية بشأن محاذاة وفحوصات الطول للبيانات المرتبطة في AEAD.
أثناء الحلقة التي تعدّل /bin/su، يجب أن تبدأ كل عملية splice القراءة من الإزاحة 0.
قد تكون بعض الأنظمة قد طبّقت بالفعل تصحيحات أمنية صامتة. تم تأكيد ذلك أثناء الاختبار على أجهزة متعددة — بعض الأهداف كانت قد تلقت بالفعل إصلاحات غير رسمية أو إصلاحات خلفية (backported).
0x04 ملاحظات
إصدار النواة: تؤثر هذه الثغرة بشكل أساسي على نواة Linux 5.x المبكرة (مثل الإصدار الأولي من Ubuntu 20.04). إذا كانت النواة قد تم تصحيحها بالفعل، فلن تعمل هذه الطريقة بعد الآن.
اختلافات المسار: قد تخزّن توزيعات Linux المختلفة su في مواقع مختلفة (/bin/su أو /usr/bin/su). يحاول الكود اكتشاف المسار الصحيح تلقائيًا، ولكن إذا لم يكن أي منهما موجودًا، فتحقق يدويًا باستخدام which su وعدّل الكود وفقًا لذلك.
إخلاء المسؤولية: هذه المقالة مخصصة حصريًا للبحث التقني و الأغراض التعليمية. لا تستخدمها في أنشطة غير قانونية. يتحمل المستخدمون وحدهم المسؤولية الكاملة عن أي عواقب قانونية ناتجة عن إساءة استخدام الأداة.