
قد يكون تطبيق Spring MVC أو Spring WebFlux الذي يعمل على JDK 9+ عرضة لتنفيذ التعليمات البرمجية عن بُعد (RCE) عبر ربط البيانات. يتطلب الاستغلال المحدد تشغيل التطبيق على Tomcat كملف نشر WAR. إذا تم نشر التطبيق كملف Spring Boot jar قابل للتنفيذ، أي الوضع الافتراضي، فإنه لا يكون عرضة للاستغلال. ومع ذلك، فإن طبيعة الثغرة أكثر عمومية، وقد توجد طرق أخرى لاستغلالها.
CVE-2022-22965 (Spring4Shell, SpringShell) هي ثغرة أمنية في Spring Framework تستخدم وظيفة ربط البيانات لربط البيانات المخزنة داخل طلب HTTP بكائنات معينة تستخدمها التطبيقات. يقع الخلل في طريقة getCachedIntrospectionResults، والتي يمكن استخدامها للوصول غير المصرح به إلى هذه الكائنات عن طريق تمرير أسماء الفئات الخاصة بها عبر طلب HTTP. ويخلق ذلك مخاطر تسرب البيانات وتنفيذ التعليمات البرمجية عن بُعد عند استخدام فئات كائنات خاصة. تشبه هذه الثغرة ثغرة CVE-2010-1622 المغلقة منذ فترة طويلة، حيث تمت إضافة عمليات فحص على أسماء الفئات كإصلاح بحيث لا يتطابق الاسم مع classLoader أو protectionDomain.
وفقًا لنظام CVSSv3، فإنها تُقيَّم بدرجة خطورة خطورة حرجة.
فيما يلي فرص اكتشاف CVE-2022-22965 التي يمكن استخدامها لتحديد الثغرة.
يمكن تلخيص الشروط الحالية للثغرة (كما ورد في إعلان Spring عن الثغرة) على النحو التالي:
python3 exploit.py http://10.10.10.10/
ملاحظة: الشرطة المائلة في النهاية مهمة جدًا هنا!
ابحث عن قيمة "action" في نموذج الاتصال (طلب POST الوحيد المتاح لنا).
<form id="contactForm" action="/" method="post">
قيمة action هي "/"، مما يعني أن عنوان URL المستهدف سيكون ببساطة: http://10.10.10.10/