
تقرير و LPE PoC لثغرة OOB قراءة وكتابة في نواة لينكس.
شرح وإثبات مفهوم لرفع الصلاحيات المحلية لثغرة قراءة وكتابة خارج النطاق (OOB) في نواة لينكس.
يمكنك العثور على الشرح لهذه الثغرة في مدونتي كما يمكنك العثور على مقدمتي لـ nf_tables هنا.
لا يُتوقع أن يعمل الاستغلال المقدم في هذا المستودع بنجاح على إصدارات النواة المعرضة للخارج مباشرةً. هناك العديد من الإزاحات التي قد تختلف بين بنيات النواة بالإضافة إلى اختلاف أدوات ROP بالطبع.
في بعض الأحيان قد يتعين تغيير طريقة استغلال الثغرة نفسها بسبب الاختلافات بين بنيات النواة. مثال على ذلك شرح آخر لهذه الثغرة بقلم David Bouman (@pqlqpql) يمكنك العثور عليه هنا حيث يقوم باستغلال الثغرة باستخدام حزم UDP - مستهدفًا المكدس عند معالجة حزمة UDP - الأمر الذي لم يكن ممكنًا في بنية نواتي بسبب اختلافات كبيرة في تخطيط المكدس. بدلاً من ذلك، استخدمت طريقة تستهدف المكدس عند معالجة حزمة TCP ACK.
إذا كنت ترغب في اختبارها على جهازك، أوصي بقراءة الشرح واتباع مسار اكتشاف الإزاحات وأنواع الخطافات المستخدمة وما إلى ذلك.
إصدار النواة الدقيق الذي بنيت منه النواة التي كنت أستهدفها في الشرح كان 5.12.0، Commit 9f4ad9e425a1d3b6a34617b8ea226d56a119a717.
لبناء الاستغلال تحتاج إلى المكتبات libmnl و libnftnl بالإضافة إلى مكتبة خيوط POSIX (pthread).
ثم يكون بناءه بسيطًا كالتالي:
gcc -lmnl -lnftnl -lpthread exploit.c -o exploit
تنشأ الثغرة من nft_validate_register_store التي تم تقديمها في Commit 345023b0db315648ccc3c1a36aee88304a8b4d91 في الإصدار 5.12 وتم تصحيحها في Commit 6e1acfa387b9ff82cfc7db8cc3b6959221a95851 في الإصدار 5.17.
إثبات المفهوم هذا وشرح الثغرة مخصصان للأغراض التعليمية فقط. أنا لست مسؤولاً قانونياً عن أي طريقة قد يُستخدم بها هذا الكود.