
ثغرة Apache Struts 2.0 RCE - تسمح للمهاجم بحقن أوامر نظام التشغيل في تطبيق ويب من خلال رأس content-type
ثغرة تنفيذ الأوامر عن بعد (RCE) في Apache Struts 2.0
هذا سكريبت لاستغلال ثغرة CVE-2017-5638 - يسمح للمهاجم بحقن أوامر نظام التشغيل في تطبيق ويب عبر رأس content-type.
Apache Struts 2 هو إطار عمل لتطبيقات الويب مفتوح المصدر لتطوير تطبيقات Java EE على الويب. يستخدم ويوسع واجهة برمجة تطبيقات Java Servlet لتشجيع المطورين على اعتماد بنية Model-View-Controller (MVC).
خلال الأسبوع الأخير من مارس 2017، نشر مخترق لـ Apache Struts يُعرف باسم "Nike Zheng" إثبات مفهوم (PoC) عام للاستغلال يُظهر مدى سهولة تنفيذ أوامر نظام التشغيل عن بُعد على خادم Apache Struts 2 ضعيف.
الثغرة، CVE-2017-5638 - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5638، تسمح بتنفيذ تعليمات برمجية عن بُعد (RCE) غير مصادق عليه عبر قيمة Content-Type مُعدّة خصيصًا في طلب HTTP. يمكن للمهاجم إنشاء قيمة غير صالحة لـ Content-Type ستتسبب في إلقاء البرنامج الضعيف استثناءً. عند إعداد البرنامج لرسالة الخطأ لعرضها، يتسبب عيب في محلل Apache Struts Jakarta Multipart في تنفيذ قيمة Content-Type الخبيثة بدلاً من عرضها.
منذ إصدار هذا الاستغلال العام، لوحظ عدد كبير من عمليات الفحص التي تبحث عن خوادم Apache ضعيفة. نظرًا لأن الاستغلال سهل التنفيذ حقًا، يمكن لأي شخص استغلال الأجهزة الضعيفة عن بُعد بسهولة مطلقة. وبالتالي تم الإبلاغ عن استغلالات متكررة بعد عمليات المسح الكبيرة.
أراد أحد عملائنا منا فحص جميع عناوين IP الخاصة بهم لأنهم كانوا يستخدمون بشكل كبير إطار Apache Struts 2 الضعيف ولم يكن لديهم سجلات دقيقة عن عناوين IP (خوادم الويب) التي تعمل بإطار Apache ضعيف. كان هناك ما يقرب من ألف عنوان IP يجب اختبارها. طلب العميل تقديم جميع النطاقات الضعيفة مع معلومات ما إذا كان خادم Linux أو Windows Server. لتجنب المهمة الشاقة المتمثلة في فحص كل عنوان IP على حدة، كتبت سكريبتًا صغيرًا.
يجمع السكريبت بين الوظائف/المهام التالية:
قراءة أسماء النطاقات الضعيفة واحدًا تلو الآخر من الملف الذي يحتوي على قائمة النطاقات.
استخدام الاستغلال الرسمي للتحقق من الخوادم الضعيفة.
تشغيل الاستغلال والتحقق مما إذا كان الخادم بنظام Windows أو Linux.