
Poc الخاص بثغرة تجاوز الأمان في Apache Tomcat

أصدرت Apache مؤخرًا نشرة أمنية تفيد بوجود ثغرة تجاوز أمان في عدة إصدارات من Apache Tomcat 7 و8 و9. يمكن للمهاجم استغلال هذه المشكلة لتجاوز بعض القيود الأمنية وتنفيذ عمليات غير مصرح بها، مما قد يساعد في شن هجمات إضافية.
القيود الأمنية المعرّفة عبر التعليقات التوضيحية الخاصة بـ servlet في Apache Tomcat لا تُطبَّق إلا مرة واحدة بعد تحميل servlet. وبما أن القيود الأمنية المعرّفة بهذه الطريقة تُطبَّق على نمط URL وأي عنوان URL يقع ضمنه، فمن المرجح أن يعتمد ذلك على ترتيب تحميل servlet، مما قد يعرّض الموارد لمستخدمين غير مصرح لهم بالوصول إليها.
CVE-2018-1305
Apache Tomcat < 9.0.5
Apache Tomcat < 8.5.28
Apache Tomcat < 8.0.50
Apache Tomcat < 7.0.85
متوسط
توفر Java EE تعليقًا توضيحيًا باسم ServletSecurity يشبه فحص الأذونات في ACL، ويمكن استخدامه لتزيين servlet بحمايته. إذا وُجد servletان، Servlet1 بمسار وصول «/servlet1/» ومزوَّد بتعليق ServletSecurity التوضيحي، وServlet2 بمسار وصول «/servlet1/servlet2/» وبدون تعليق ServletSecurity التوضيحي، فعند الوصول إلى servlet1/servlet2 لأول مرة، لن يعمل تعليق ServletSecurity التوضيحي الخاص بـ servlet1 ولن يحمي مسار «/servlet1/servlet2»، مما قد يؤدي إلى وصول غير مصرح به.
إذا تم الوصول إلى «/servlet1» قبل الوصول إلى «/servlet1/servlet2»، فسيقوم Tomcat بتحميل ACL وتفعيل الحماية على «/servlet1/servlet2»، ولن يتم تشغيل الثغرة.

أضف تعليق ServletSecurity التوضيحي إلى Servlet1، بينما لا يحتوي Servlet2 على هذا التعليق.

عدّل نمط url-pattern المقابل لـ servlet في ملف web.xml ليصبح كما هو موضح في الشكل أدناه.

شغّل المشروع. عند الوصول إلى عنوان URL الخاص بـ servlet2 لأول مرة، تبيّن أنه يمكن الوصول دون تصريح، إذ لم يعمل ACL الخاص بـ servlet1.
http://localhost:8080/CVE-2018-1305/servlet1/servlet2/

عند الوصول إلى عنوان URL الخاص بـ servlet1 للمرة الثانية، يُمنع الوصول، حيث يكون ACL قد عمل.
http://localhost:8080/CVE-2018-1305/servlet1/

عند الوصول إلى عنوان URL الخاص بـ servlet2 مرة أخرى، يُمنع الوصول. ولكي يعمل ACL على servlet2، يجب أن يكون servlet1 قد تم الوصول إليه مسبقًا.
http://localhost:8080/CVE-2018-1305/servlet1/servlet2/


لذلك، يقتصر استغلال الثغرة على الحالة التي يتم فيها الوصول إلى صفحة «/servlet1/servlet2/» قبل الوصول إلى «/servlet1/» بعد تشغيل Tomcat. وإذا كان أي شخص قد وصل إلى صفحة «/servlet1/*» مسبقًا، فلن يتم تشغيل الثغرة. خطورة الثغرة مرتفعة نسبيًا، لكن شروط الاستغلال صعبة، لذا فإن نطاق التأثير ليس واسعًا.
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1305