## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ENOKIY-SPRING-RCE-CVE-2022-22965
### مقدمة الثغرة
في الآونة الأخيرة، كشفت Spring عن ثغرة CVE من العيار الثقيل. تُظهر معلومات CVE ما يلي: "قد يكون تطبيق Spring MVC أو Spring WebFlux الذي يعمل على JDK 9+ عرضةً لتنفيذ التعليمات البرمجية عن بُعد (RCE) عبر ربط البيانات. يتطلب الاستغلال المحدد تشغيل التطبيق على Tomcat كنشر WAR. إذا تم نشر التطبيق كملف jar تنفيذي من Spring Boot، أي الوضع الافتراضي، فلن يكون عرضةً لهذا الاستغلال. ومع ذلك، فإن طبيعة الثغرة أكثر عمومية، وقد توجد طرق أخرى لاستغلالها. (قد تكون تطبيقات Spring MVC أو Spring WebFlux التي تعمل على JDK 9+ عرضةً لهجوم تنفيذ التعليمات البرمجية عن بُعد (RCE) عبر ربط البيانات. يتطلب الاستغلال المحدد نشر التطبيق كحزمة WAR على Tomcat. إذا تم نشر التطبيق كملف jar تنفيذي من Spring Boot، أي الوضع الافتراضي، فإنه ليس عرضةً للهجوم. لكن طبيعة الثغرة أكثر عمومية، وقد توجد طرق أخرى لاستغلالها.)". يُجري هذا التحليل تكرارًا لهذه الثغرة لتعلّم مبدأ الثغرة.
### java Bean API
قبل الاطلاع على مبدأ ربط المعاملات في Spring MVC، دعونا نلقي نظرة أولًا على بعض واجهات برمجة التطبيقات المتعلقة بـ Java Bean.
* java Bean: إنها في الواقع مواصفة؛ عندما يستوفي الفصل هذه المواصفة، يمكن للفئات المحددة الأخرى استدعاؤه. عندما يُستخدم الفصل كـ Java Bean، يحتوي الفصل على مجموعة من الخصائص الخاصة، ويتم قراءة وكتابة الخصائص عبر طرق get/is() أو set() العامة (public).
* Introspector (استبطان): توفر فئة Introspector طريقةً قياسيةً للأدوات للتعرّف على الخصائص والأحداث والأساليب التي يدعمها Java Bean المستهدَف. لكل نوع من هذه الأنواع الثلاثة من المعلومات، يقوم Introspector بتحليل فئة الفول وفئاته الفائقة بشكل منفصل بحثًا عن معلومات صريحة أو ضمنية، ويستخدم هذه المعلومات لبناء كائن BeanInfo يصف الفول المستهدَف بشكل شامل. (توفر Java معالجةً افتراضيةً لخصائص وأحداث وأساليب فئة Java Bean. على سبيل المثال، عند البحث عن خاصية/أسلوب لفئة bean، إذا لم يتم العثور على هذه الخاصية في فئة bean الحالية، يتم البحث في الفئة الأصلية لفئة bean، وهكذا.)
* BeanInfo: قم باستبطان Java Bean وتعرّف على جميع خصائصه وأساليبه المكشوفة وأحداثه. إذا تم استبطان فئة BeanInfo الخاصة بـ Java Bean مسبقًا، فسيتم استرجاع فئة BeanInfo من ذاكرة التخزين المؤقت لـ BeanInfo. (قم باستبطان Java Bean وتعرف على جميع خصائصه وأساليبه وأحداثه العامة. إذا تم استبطان فئة BeanInfo الخاصة بـ Java Bean مسبقًا، فسيتم استرداد فئة BeanInfo من ذاكرة التخزين المؤقت لـ BeanInfo.)