
تجاوز حماية مساحة التنفيذ في لينكس باستخدام أدوات عمرها أكثر من 20 عامًا (CVE-2022-25265).
يوضح هذا البرهان (POC) تنفيذ بايتات موجودة في منطقة يُفترض أنها غير قابلة للتنفيذ من الملف الثنائي، مما يؤدي بالتالي إلى تجاوز كامل لحماية مساحة التنفيذ.
يمكن العثور على السبب الجذري لهذا هنا: https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/elf.h#L280
كما يتبين، الملفات الثنائية التي تم بناؤها على أنظمة تفتقر إلى NX أو أنظمة IA32 مع NX، والتي لا تحتوي على رأس PT_GNU_STACK سيتم وضع علامة exec-all عليها.
هذا يسمح بصلاحيات RWX كاملة من/إلى أي مكان في الملف الثنائي.
لتحقيق ذلك، نستخدم أدوات بناء "تاريخية".
في هذه الحالة، gcc 3.2.2 يعمل على x86 Slackware9 مع Linux 2.4.20
سنحصل على ملف ثنائي يمكن تنفيذه على أنظمة لينكس الحديثة، في هذه الحالة Linux 5.16.1
قد يكون من الممكن تحقيق نفس التأثير باستخدام وسائط/نصوص رابط محددة، على الرغم من أنني لم أتحقق من ذلك.
الكود التالي سيقوم بنسخ البايتات المجمعة للدالة dummy() إلى مصفوفة الأحرف harmless_str_buf وتنفيذ المصفوفة الوجهة كدالة.
هذا العرض يخدم أغراضًا تعليمية فقط. لا يمكن تحت أي ظرف من الظروف تحميل مؤلف هذا الكود المسؤولية عن أي ضرر مباشر أو غير مباشر ناتج عن سوء استخدام أي كود و/أو معلومات مقدمة.
راجع الترخيص لمزيد من التفاصيل