
إثبات مفهوم (PoC) مكتوب بلغة Rust لثغرة تصعيد صلاحيات محلية في نواة لينكس، يستغل واجهة برمجة التشفير (Crypto API) ودالة splice لاستبدال محتوى ذاكرة التخزين المؤقت للصفحات وتعديل UID في ملف /etc/passwd للحصول على صلاحيات الجذر.
هذا المشروع هو إثبات مفهوم (PoC) مُنفَّذ بلغة Rust لثغرة تصعيد الامتيازات المحلية (LPE) (محاكاة لـ CVE-2026-31431). يوضح كيفية التلاعب بذاكرة التخزين المؤقت للصفحات في نواة لينكس من خلال استغلال Crypto API.[cite: 1, 2]
[!CAUTION] هذا الكود مخصص لأغراض البحث الأمني التعليمي والأخلاقي فقط. الاستخدام غير المصرح به لهذه الأداة ضد الأنظمة دون موافقة صريحة مسبقة يُعد غير قانوني. لا يتحمل المؤلف أي مسؤولية عن أي إساءة استخدام أو ضرر ناتج عن هذا البرنامج.
تستغل الأداة ثغرة مرتبطة بواجهة AF_ALG (واجهة التشفير في النواة) واستدعاء النظام splice.[cite: 2] تسمح لمستخدم غير مميز بالكتابة فوق 4 بايتات من ذاكرة التخزين المؤقت للصفحات لملف للقراءة فقط—وتحديدًا استهداف حقل UID في /etc/passwd لتغييره مؤقتًا إلى 0000 (الجذر).[cite: 1, 2]
main.rs للعثور على الإزاحة الدقيقة لملف UID الخاص بالمستخدم الحالي داخل /etc/passwd.[cite: 1, 2]AF_ALG مع خوارزمية authencesn(hmac(sha256),cbc(aes)).[cite: 2]setsockopt واستخدام splice، يعيد توجيه بيانات الملف عبر خط أنابيب التشفير.[cite: 2]0000).[cite: 2]--shell، يقوم بتنفيذ su <user>، والذي ينجح لأن النظام يرى الآن UID الخاص بالمستخدم كـ 0 في /etc/passwd المخزن مؤقتًا.[cite: 1]POSIX_FADV_DONTNEED لاستعادة سلامة النظام.[cite: 1]libc و nix (مع ميزات fs و socket و zerocopy و user).[cite: 3]cargo build --release
اختبار تصحيح ذاكرة التخزين المؤقت للصفحات دون فتح قشرة:
./target/release/cve-2026-31431
محاولة تصعيد الامتيازات إلى قشرة جذر:
./target/release/cve-2026-31431 --shell
main.rs: ينسق الهجوم، ويتعامل مع وسائط سطر الأوامر، وينفذ أمر القشرة النهائي.[cite: 1]modules.rs: يحتوي على منطق الاستغلال الأساسي، بما في ذلك التلاعب بمقبس AF_ALG والبحث عن إزاحة UID.[cite: 2]Cargo.toml: يحدد بيانات المشروع الوصفية وتبعيات الحزم الخارجية.[cite: 3]main.rs، modules.rs، Cargo.toml[cite: 1, 2, 3]socket، bind، sendmsg، splice، posix_fadvise.[cite: 1, 2]