
تحليل فني وإثبات المفهوم لتلاعب معلمات فئة Apache Struts 1 (CVE-2014-0114)، يوضح تنفيذ التعليمات البرمجية عن بُعد على Tomcat ورفض الخدمة على JBoss/Wildfly.
يتم التعامل مع المعاملات (parameters) في طلب POST أو GET كخصائص (properties) يتم تعيينها باستخدام النموذج كأساس. يمكن أن تكون المعاملات مسارًا إلى كائن متداخل.
يمكن التلاعب بـ Apache Struts 1.x لاستدعاء getClass() على Form Beans. على سبيل المثال، يمكن التلاعب مباشرة بسمات classloader للنموذج: https://example.com/?class.classLoader.defaultAssertionStatus=true.
تحت الغطاء، يستخدم Apache Struts 1.x commons-beanutils الذي في الإصدار 1.8 (وما قبله) لا يستثني السمة class.
كان لدى Struts 2 ثغرات مماثلة، لكننا هنا نركز على Struts 1.x حيث لا توجد أي تصحيحات للإطار الذي صدر آخر إصدار له في 2008 (وصل إلى نهاية الدعم منذ 2013).
إذا كان التطبيق يعمل على Tomcat (Catalina)، فيمكن التلاعب بتسجيل السجلات بحيث يتمكن المهاجم من إنشاء ملف JSP يتم تنفيذه لاحقًا عند طلبه من الخادم. يمكن لملف JSP تنفيذ كود Java عشوائي وبنفس المستخدم الذي يشغل عملية Java.
راجع عرض Julián Vilas للتفاصيل.
(تم الاختبار مع JBoss EAP 7.1)
توجد طريقة بسيطة لتنفيذ هجوم رفض الخدمة (DOS) الذي قد يجعل JBoss غير قابل للوصول تمامًا في أسوأ الحالات ويتطلب إعادة تشغيل. في أفضل الأحوال، يستجيب JBoss ببطء.
عبر السمة class يمكن الوصول إلى Class#protectionDomain.codeSource.location. في JBoss، هو كائن من نوع URL مع بروتوكول vfs.
بالنسبة لعنوان URL من النوع vfs://، سجّل JBoss معالج URLStreamHandler يعيد كائنًا من نوع org.jboss.vfs.VirtualFile عند استدعاء URL#getContent.
class.protectionDomain.codeSource.location.content.pathName يشير إلى المجلد <المسار>/<التطبيق>/WEB-INF/classes.
عبر parent يمكن الوصول إلى كائن المجلد الأعلى بمستوى واحد:
class.protectionDomain.codeSource.location.content.parent.pathName -> <المسار>/<التطبيق>/WEB-INF
سؤال:
كم عدد مراجع parent اللازمة للوصول إلى جذر نظام الملفات؟
سؤال:
ماذا يحدث عندما نطلب class.protectionDomain.codeSource.location.content.parent.parent.[...].childrenRecursively[0].pathName للمجلد الجذر لنظام الملفات؟
إجابة:
سيقوم JBoss بمراجعة جميع الملفات في نظام الملفات وتخصيص كائن org.jboss.vfs.VirtualFile لكل ملف ومجلد.
سؤال تابع: ماذا يحدث إذا طلب طلبان (requests) جميع الملفات في نظام الملفات في نفس الوقت؟ ثلاثة طلبات؟ خمسة؟ عشرة؟ مئة؟
...
إجابة:
إذا انتظرت وقتًا كافيًا، سيتم تسجيل خطأ