
إعادة كتابة بلغة Golang لاستغلال تصعيد الامتيازات المحلية Copy Fail (CVE-2026-31431)، حيث يتم إفساد ذاكرة التخزين المؤقت للصفحات للحصول على صلاحيات الجذر على أنظمة Linux.
732 بايت للوصول إلى صلاحيات الجذر على كل توزيعات لينكس الرئيسية
CVE-2026-31431 (فشل النسخ) هو خطأ منطقي في قالب التشفير authencesn في نواة لينكس. يسمح لمستخدم محلي غير مميز بتشغيل كتابة حتمية ومضبوطة بحجم 4 بايت في ذاكرة التخزين المؤقت للصفحات لأي ملف قابل للقراءة على النظام.
CONFIG_CRYPTO_AUTHENC (عمليًا جميع التوزيعات الرئيسية منذ 2017)الخطأ يربط سلوكين:
AF_ALG + splice: splice() ينقل صفحات ذاكرة التخزين المؤقت بالمرجع إلى قائمة التشتت الخاصة بمقبس AF_ALG. في وضع فك التشفير في المكان لـ AEAD، تبقى صفحات العلامة (من ذاكرة التخزين المؤقت للملف الهدف) مرتبطة بقائمة التشتت الناتجة عبر sg_chain().
كتابة مساحة مؤقتة في authencesn: crypto_authenc_esn_decrypt() يستخدم dst[assoclen + cryptlen] (بعد العلامة، داخل صفحات ذاكرة التخزين المؤقت) كمساحة مؤقتة لإعادة ترتيب رقم تسلسل ESN، ويكتب 4 بايت يتحكم بها المهاجم ولا يستعيدها أبدًا.
الصفحة التالفة لا تُعلَّم أبدًا كمتسخة، لذا يبقى الملف على القرص دون تغيير. لكن ذاكرة التخزين المؤقت للصفحات في الذاكرة هي ما يُقرأ فعليًا — مما يجعل التلف مرئيًا فورًا على مستوى النظام بأكمله.
الاستغلال يفسد ذاكرة التخزين المؤقت للصفحات لـ /usr/bin/su (أو أي ثنائي setuid) بحمولة شيلكود صغيرة، 4 بايت في كل مرة. بعد كل التكرارات، تشغيل su ينفذ الحمولة ويمنح صلاحيات جذر.
python3 exp.py
go run exp.go
go build -ldflags "-w -s" -trimpath -o exp exp.go
tinygo build -o exp exp.go
| الإمكانية | التفاصيل |
|---|---|
| قابلية النقل |
يُنشر هذا المستودع لأغراض تعليمية وبحثية دفاعية فقط. لا تستخدم هذا الكود على أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.
| نفس السكربت يعمل على Ubuntu وAmazon Linux وRHEL وSUSE والمزيد — بدون إزاحات خاصة بالتوزيعة |
| صغر الحجم | استغلال بايثون حوالي 732 بايت |
| الخفاء | يتجاوز مسار كتابة VFS؛ الصفحة لا تُعلَّم متسخة أبدًا؛ مجاميع الاختبار على القرص تبقى دون تغيير |
| عبر الحاويات | ذاكرة التخزين المؤقت للصفحات مشتركة بين الحاويات — ناقل هروب من الحاوية (انظر الجزء 2) |