Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
spring4shell-local-verification-lab — مشروع التحقق من شروط التأثير المحلية وإصلاح ترقية الإصدار وإعادة الاختبار لـ Spring Framework CVE-2022-22965 | Kitploit
أدوات/GitHubGitHub/meng-security
/spring4shell-local-verification-lab
تحليل الثغرات الأمنيةتحليل الكودالاستغلالأمن الويبالتعلم والتعليممختبرات وتدريب عملي
GitHubmeng-security/spring4shell-local-verification-lab

spring4shell-local-verification-lab

مشروع التحقق من شروط التأثير المحلية وإصلاح ترقية الإصدار وإعادة الاختبار لـ Spring Framework CVE-2022-22965

عرض المستودع
منذ شهر واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

مشروع التحقق المحلي من شروط تأثير Spring4Shell والإصلاح وإعادة الاختبار

نظرة عامة على المشروع

هذا المشروع مخصص لتعلم والتحقق من شروط التأثير والمخاطر وأسلوب الإصلاح وإجراءات إعادة الاختبار بعد الإصلاح لثغرة Spring Framework CVE-2022-22965، والمعروفة أيضًا باسم Spring4Shell.

تم تنفيذ المشروع في بيئة محلية مرخصة أُعدت شخصيًا. لا يركّز المشروع على مهاجمة أهداف حقيقية، بل على بناء بيئتي اختبار Spring MVC قبل الإصلاح وبعده، لتأكيد شروط التأثير المرتبطة بالثغرة عنصرًا بعنصر، ومراقبة الفرق في مسارات الخصائص الداخلية لربط بيانات Spring قبل وبعد ترقية الإصدار بطريقة آمنة وموجهة للقراءة فقط.

أنجز هذا المشروع الخطوات التالية:

  • تجهيز بيئة JDK وMaven وApache Tomcat
  • بناء مشروع Spring MVC WAR
  • التحقق الأساسي من الوظيفة الطبيعية
  • تأكيد شروط تأثير الثغرة
  • تشخيص القراءة فقط لمسارات الخصائص الداخلية
  • تحليل سبب الثغرة
  • ترقية إصدار Spring Framework
  • إعادة الاختبار الأمني بعد الإصلاح
  • إعادة اختبار الوظيفة الطبيعية بعد الإصلاح
  • إعداد تقرير الاختبار وأدلة لقطات الشاشة

بيان الأمان

يُستخدم هذا المشروع فقط في بيئة محلية شخصية أو بيئة اختبار أمان مرخّصة بوضوح.

لا يستهدف المشروع أي مواقع ويب عامة أو خوادم أو أنظمة أعمال تابعة لجهات خارجية بأي عمليات فحص أو استكشاف أو استغلال للثغرات، ولا يتضمن بيانات مستخدمين حقيقية أو بيانات أعمال حقيقية.

لم تُنفَّذ أثناء الاختبار العمليات التالية:

  • لم تتم كتابة WebShell
  • لم يتم تنفيذ أوامر نظام
  • لم يتم تعديل إعدادات Tomcat
  • لم يتم إنشاء Reverse Shell
  • لم يتم التحكم المستمر
  • لم يحدث أي تأثير على أي نظام خارجي

يُحظر استخدام أساليب الاختبار في هذا المشروع ضد أي أهداف غير مرخصة.

خلفية الثغرة

تُعرف CVE-2022-22965 عادةً باسم Spring4Shell، وهي ثغرة تنفيذ أوامر عن بُعد في Spring Framework تتعلق بآلية ربط بيانات معاملات الطلبات.

يدعم Spring MVC الربط التلقائي لمعاملات HTTP بخصائص كائنات Java. على سبيل المثال، يستقبل هذا المشروع معاملي الاسم والبريد الإلكتروني بالطريقة التالية:

@ModelAttribute("profile") UserProfile profile

في الظروف الطبيعية، يتم ربط معاملي الطلب name وemail بكائن UserProfile وفقًا لأسماء الخصائص.

في الإصدارات المتأثرة، لم تكن القيود على الوصول إلى بعض مسارات الخصائص الداخلية صارمة بما يكفي. عند استخدام JDK 9 أو إصدار أحدث واستيفاء شروط معينة تتعلق بحاوية Servlet وطريقة النشر وربط البيانات، قد تتمكن معاملات الطلبات الخارجية من الوصول عبر كائنات الأعمال العادية إلى كائنات Java الداخلية المتعلقة بـ Class أو الوحدات (Modules) أو محمّلات الفئات (ClassLoaders) أو الحاوية.

في البيئات القابلة للاستغلال تحديدًا، قد يتمكن المهاجم من تعديل إعدادات الخادم أو كتابة ملفات على الخادم، مما يؤدي إلى خطر تنفيذ أوامر عن بُعد.

لا ينفّذ هذا المشروع استغلالًا كاملًا للثغرة عن بُعد، بل يستخدم مسار الخصائص التالي لإجراء تشخيص آمن للقراءة فقط للمقارنة:

class.module.name

أهداف المشروع

  1. فهم العملية الأساسية لربط بيانات معاملات الطلبات في Spring MVC.
  2. بناء مشروع اختبار Spring MVC WAR محلي.
  3. إكمال التحقق الأساسي من الوظيفة الطبيعية للأعمال.
  4. تأكيد شروط التأثير مثل Spring Framework وJDK وTomcat ونشر WAR ونقطة ربط البيانات.
  5. مراقبة سلوك الوصول إلى مسارات الخصائص الداخلية بطريقة القراءة فقط.
  6. تحليل الأسباب الرئيسية للثغرة.
  7. ترقية Spring Framework إلى الإصدار المُصلَح.
  8. إجراء إعادة الاختبار بعد الإصلاح باستخدام نفس الأسلوب.
  9. التأكد من أن ترقية الإصدار لم تؤثر على الوظائف الطبيعية للأعمال.
  10. تنظيم كود المصدر وتقرير الاختبار وأدلة لقطات الشاشة.

بيئة التجربة

تم تنفيذ هذا المشروع في بيئة معزولة محلية باستخدام VMware.

  • النظام المضيف: Windows 11
  • الجهاز الهدف: جهاز افتراضي Windows 10
  • برنامج المحاكاة الافتراضية: VMware Workstation
  • بيئة Java: Eclipse Temurin JDK 11.0.31
  • أداة بناء المشروع: Apache Maven 3.9.16
  • حاوية Servlet: Apache Tomcat 9.0.60
  • إصدار Spring Framework قبل الإصلاح: 5.3.17
  • إصدار Spring Framework بعد الإصلاح: 5.3.18
  • إطار الويب: Spring MVC
  • طريقة نشر المشروع: نشر حزمة WAR التقليدية
  • عنوان الاختبار: 127.0.0.1

بيانات اختبار الوظيفة الطبيعية:

  • الاسم: Alice
  • البريد الإلكتروني: [email protected]

مسار خاصية التشخيص الأمني:

class.module.name

هيكل المشروع

spring4shell-local-verification-lab/

  • README.md: مقدمة المشروع ومنهجية الاختبار ونتائج التحقق وشرح الإصلاح
  • docs/: تقرير التحقق المحلي من شروط تأثير Spring4Shell والإصلاح وإعادة الاختبار
  • images/: لقطات بيئة المشروع وعملية الاختبار وإعادة الاختبار
  • vulnerable-demo/: مشروع ما قبل الإصلاح باستخدام Spring Framework 5.3.17
  • fixed-demo/: مشروع ما بعد الإصلاح باستخدام Spring Framework 5.3.18
  • notes/: ملاحظات التعلم وسجلات العملية

الهيكل الرئيسي للمصدر:

  • config/: فئات إعداد Spring MVC وفئة تهيئة التطبيق
  • controller/: معالجة النماذج ووحدة تحكم تشخيص مسار الخصائص
  • model/: فئة UserProfile المستخدمة لاستقبال معاملي الاسم والبريد الإلكتروني
  • WEB-INF/views/: صفحات JSP للصفحة الرئيسية ونتائج التقديم ونتائج التشخيص

شرح مشروع الاختبار

يُنشئ هذا المشروع تطبيقَي Spring MVC، أحدهما قبل الإصلاح والآخر بعده.

المشروع قبل الإصلاح

دليل المشروع:

vulnerable-demo

الإصدار المستخدم:

Spring Framework 5.3.17

ملف WAR المُنشأ:

spring4shell-vulnerable-demo.war

عنوان الوصول:

http://127.0.0.1:8080/spring4shell-vulnerable-demo/

صفحة التشخيص:

http://127.0.0.1:8080/spring4shell-vulnerable-demo/binding-probe

المشروع بعد الإصلاح

دليل المشروع:

fixed-demo

الإصدار المستخدم:

Spring Framework 5.3.18

ملف WAR المُنشأ:

spring4shell-fixed-demo.war

عنوان الوصول:

http://127.0.0.1:8080/spring4shell-fixed-demo/

صفحة التشخيص:

http://127.0.0.1:8080/spring4shell-fixed-demo/binding-probe

شرح الوظيفة الطبيعية

يوفر مشروع الاختبار نموذجًا بسيطًا لبيانات المستخدم، ويتضمن:

  • حقل إدخال الاسم
  • حقل إدخال البريد الإلكتروني
  • زر إرسال البيانات

تستقبل وحدة التحكم معاملات الطلبات بالطريقة التالية:

@ModelAttribute("profile") UserProfile profile

عندما يرسل المستخدم الاسم والبريد الإلكتروني، يقوم Spring MVC تلقائيًا بربط معاملي name وemail بكائن UserProfile.

تقرأ صفحة النتائج الكائن المرتبط وتعرض الاسم والبريد الإلكتروني اللذين أدخلهما المستخدم.

تُستخدم هذه الوظيفة لتأكيد أن المشروع يعمل بشكل طبيعي، ولإثبات وجود نقطة ربط بيانات صالحة لمعاملات طلبات Spring MVC في التطبيق.

منهجية الاختبار

يتبع هذا المشروع منهجية "تأكيد الوظيفة الطبيعية أولًا، ثم تأكيد شروط التأثير، ثم إجراء تشخيص مخاطر القراءة فقط، وأخيرًا الإصلاح وإعادة الاختبار".

  1. تثبيت وتكوين JDK 11 وMaven وApache Tomcat.
  2. بناء مشروع Spring MVC باستخدام Spring Framework 5.3.17.
  3. إنشاء نموذج الاسم والبريد الإلكتروني.
  4. استخدام @ModelAttribute لربط معاملات الطلبات بكائن UserProfile.
  5. استخدام Maven لتغليف المشروع في ملف WAR.
  6. نشر ملف WAR في Apache Tomcat يعمل بشكل مستقل.
  7. إرسال بيانات مستخدم محاكاة محليًا لإكمال التحقق الأساسي من الوظيفة الطبيعية.
  8. التحقق من JDK وTomcat وSpring Framework وطريقة النشر الفعلية قيد التشغيل.
  9. استخدام BeanWrapper من Spring لإجراء تشخيص القراءة فقط لـ class.module.name.
  10. تسجيل نتائج الوصول إلى مسار الخصائص في بيئة Spring Framework 5.3.17.
  11. ترقية Spring Framework إلى 5.3.18.
  12. إعادة بناء ونشر المشروع بعد الإصلاح.
  13. إجراء إعادة الاختبار بعد الإصلاح باستخدام نفس مسار الخصائص.
  14. إرسال الاسم والبريد الإلكتروني مرة أخرى لتأكيد عدم تأثر الوظيفة الطبيعية.

تأكيد شروط التأثير

قام هذا المشروع بتأكيد شروط التأثير التالية عنصرًا بعنصر:

  • استخدام JDK 11.0.31، وهو يستوفي شرط JDK 9 أو إصدار أحدث
  • استخدام Spring Framework 5.3.17
  • يحتوي المشروع على مكوّن spring-webmvc
  • استخدام Apache Tomcat 9.0.60
  • نشر المشروع كحزمة WAR تقليدية
  • تحميل المشروع بواسطة Tomcat يعمل بشكل مستقل
  • وجود نقطة ربط بيانات قائمة على @ModelAttribute في وحدة التحكم

تشمل تبعيات Spring المنشورة فعليًا في المشروع قبل الإصلاح:

  • spring-beans-5.3.17.jar
  • spring-core-5.3.17.jar
  • spring-web-5.3.17.jar
  • spring-webmvc-5.3.17.jar

لا يحكم هذا المشروع على وجود الثغرة من إصدار Spring Framework وحده، بل يجري تحليلًا شاملًا يجمع بين JDK وSpring MVC وTomcat ونشر WAR ونقطة ربط البيانات.

طريقة التشخيص

لتجنب تنفيذ استغلال الثغرة بأسلوب مدمر، يستخدم هذا المشروع BeanWrapper من Spring Framework لإجراء فحص القراءة فقط لمسار الخصائص التالي:

class.module.name

يعني هذا المسار:

  • class: الوصول إلى كائن Class في Java المقابل لكائن الأعمال الحالي
  • module: الوصول إلى وحدة Java التي ينتمي إليها الفصل
  • name: قراءة اسم الوحدة

تستدعي عملية التشخيص فقط فحص قابلية قراءة الخصائص وطرق قراءة قيم الخصائص:

  • لا تُعيَّن خصائص الكائنات
  • لا تُعدَّل إعدادات الخادم
  • لا تُكتب ملفات على الخادم
  • لا تُنفَّذ أوامر نظام التشغيل

لذلك، يمكن لهذا التشخيص فقط مراقبة الفرق في الوصول إلى مسارات الخصائص الداخلية قبل الإصلاح وبعده، ولا يمكنه وحده إثبات تحقيق تنفيذ أوامر عن بُعد.

نتائج التحقق

النتائج قبل الإصلاح

البيئة قبل الإصلاح تستخدم:

Spring Framework 5.3.17

مسار الخصائص المفحوص:

class.module.name

نتيجة التشخيص:

  • هل يمكن قراءته: true
  • نتيجة القراءة: null

تعني true أن البيئة الحالية يمكنها الاستمرار في تحليل module.name عبر خاصية class لكائن الأعمال العادي.

تكون نتيجة القراءة null لأن تطبيق WAR الحالي يعمل في الوحدة غير المسماة في Java، واسم الوحدة فارغ، ولا يعني ذلك فشل قراءة مسار الخصائص.

النتائج بعد الإصلاح

البيئة بعد الإصلاح تستخدم:

Spring Framework 5.3.18

إعادة التشخيص باستخدام نفس مسار الخصائص:

class.module.name

نتيجة التشخيص:

  • هل يمكن قراءته: false
  • نتيجة القراءة: Not readable

تشكل النتائج قبل الإصلاح وبعده مقارنة واضحة:

  • Spring Framework 5.3.17: مسار الخصائص قابل للقراءة
  • Spring Framework 5.3.18: مسار الخصائص غير قابل للقراءة

تشير هذه النتيجة إلى أنه بعد ترقية الإصدار، أصبح الوصول إلى مسار الخصائص الأصلي للتشخيص مقيدًا، ولم يعد المظهر الخطر الذي لوحظ قبل الإصلاح موجودًا.

إجراءات الإصلاح

يعتمد هذا المشروع ترقية إصدار Spring Framework كطريقة للإصلاح.

الإعداد قبل الإصلاح:

<spring.version>5.3.17</spring.version>

الإعداد بعد الإصلاح:

<spring.version>5.3.18</spring.version>

أُنجزت العمليات التالية أثناء الإصلاح:

  1. نسخ المشروع قبل الإصلاح إلى fixed-demo.
  2. إبقاء منطق الأعمال في Controller ونموذج البيانات وصفحات JSP دون تغيير.
  3. ترقية Spring Framework من 5.3.17 إلى 5.3.18.
  4. إعادة تنزيل تبعيات الإصدار المُصلَح باستخدام Maven.
  5. إعادة الترجمة وإنشاء ملف WAR المُصلَح.
  6. نشر ملف WAR المُصلَح في Apache Tomcat.
  7. التحقق من إصدارات Spring JAR المنشورة فعليًا في المشروع المُصلَح.
  8. إجراء إعادة الاختبار الأمني باستخدام مسار الخصائص الأصلي.
  9. إعادة اختبار وظيفة إرسال الاسم والبريد الإلكتروني.

تشمل تبعيات Spring المنشورة فعليًا في المشروع بعد الإصلاح:

  • spring-beans-5.3.18.jar
  • spring-core-5.3.18.jar
  • spring-web-5.3.18.jar
  • spring-webmvc-5.3.18.jar

تثبت هذه النتيجة أنه تمت إعادة بناء الإصدار المُصلَح ونشره فعلًا، وليس مجرد تعديل رقم الإصدار في pom.xml.

إعادة اختبار الوظيفة الطبيعية بعد الإصلاح

بعد الترقية إلى Spring Framework 5.3.18، تمت إعادة زيارة الصفحة الرئيسية للمشروع المُصلَح وإرسال بيانات الاختبار التالية:

  • الاسم: Alice
  • البريد الإلكتروني: [email protected]

بعد الإرسال، ما زالت الصفحة تعرض بشكل طبيعي:

  • تم إرسال بيانات المستخدم بنجاح
  • الاسم هو Alice
  • البريد الإلكتروني هو [email protected]

تشير هذه النتيجة إلى أن ترقية الإصدار لم تؤثر على ربط معاملات الطلبات الطبيعية ووظيفة عرض الصفحات في المشروع.

سبب الثغرة

يمكن لآلية ربط البيانات التلقائية في Spring MVC الوصول إلى خصائص كائنات Java وفقًا لأسماء معاملات طلبات HTTP.

تحتاج معاملات الأعمال العادية name وemail فقط إلى الوصول إلى الخصائص العادية المقابلة في UserProfile.

ومع ذلك، تدعم آلية الوصول إلى الخصائص في Spring أيضًا مسارات الخصائص المتداخلة ذات النقاط. في الإصدارات المتأثرة، لم تكن القيود على بعض مسارات الخصائص الداخلية صارمة بما يكفي، مما قد يسمح للمعاملات الخارجية بالانتقال من كائنات الأعمال العادية إلى كائنات Java Class أو الوحدات أو محمّلات الفئات أو كائنات حاوية Servlet في بيئات محددة.

عندما توجد خصائص قابلة للكتابة في هذه الكائنات الداخلية يمكنها التأثير على إعدادات الخادم أو نظام الملفات، ويستوفي التطبيق شروط JDK وTomcat ونشر WAR وربط البيانات في الوقت نفسه، فقد يتشكل خطر تنفيذ أوامر عن بُعد.

لا تنبع هذه الثغرة من وجود مشكلة في خاصيتي name أو email نفسيهما، ولا تعني أن جميع المشاريع التي تستخدم Spring MVC قابلة للاستغلال بالضرورة. عادةً ما يتطلب تحقق الثغرة توفر شروط متعددة معًا.

توصيات الإصلاح

في أنظمة الأعمال الحقيقية، يُنصح باتخاذ التدابير التالية:

  • فحص إصدارات Spring Framework وSpring Boot قيد التشغيل فعليًا
  • الترقية أولوية إلى الإصدارات الآمنة التي لا تزال مدعومة رسميًا
  • إعادة بناء ونشر التطبيق بعد الترقية
  • التحقق من إصدارات Spring JAR الفعلية في حزمة النشر النهائية
  • تقييد نطاق ربط البيانات في وحدات التحكم
  • السماح فقط بربط الحقول المطلوبة لأغراض الأعمال العادية
  • استخدام كائنات بيانات طلبات مخصصة لاستقبال المعاملات الخارجية
  • تجنب تعريض كيانات قاعدة البيانات أو الكائنات الداخلية المعقدة مباشرة للمعاملات الخارجية
  • عدم الاعتماد على التحقق من الواجهة الأمامية لتحقيق القيود الأمنية
  • اتخاذ تدابير تخفيف مؤقتة للأنظمة التي لا يمكن ترقيتها فورًا
  • لا يمكن للتدابير المؤقتة أن تحل محل ترقية الإصدار الرسمية
  • تشغيل Tomcat وخدمات Java بحسابات منخفضة الصلاحيات
  • تعيين الحد الأدنى الضروري من الصلاحيات لأدلة التطبيق وأدلة الإعدادات
  • مراقبة معاملات الطلبات غير الطبيعية وتغييرات ملفات الخادم
  • إجراء إعادة الاختبار الأمني وإعادة اختبار الوظائف الطبيعية للأعمال بعد الإصلاح

أدلة لقطات الشاشة الرئيسية

البيئة والنشر

تأكيد إصدار JDK 11

تأكيد إصدار Maven

بدء تشغيل Apache Tomcat 9.0.60 بنجاح

نجاح التغليف باستخدام Maven

نجاح نشر مشروع WAR

التحقق الأساسي من الوظيفة الطبيعية

الوصول الطبيعي إلى الصفحة الرئيسية لمشروع الاختبار

نجاح التحقق الأساسي من الوظيفة الطبيعية

التحقق قبل الإصلاح

تأكيد تبعيات Spring Framework 5.3.17

مسار الخصائص الداخلية قابل للقراءة قبل الإصلاح

الإصلاح وإعادة الاختبار

نجاح تغليف الإصدار المُصلَح

مسار الخصائص الداخلية غير قابل للقراءة بعد الإصلاح

نجاح إعادة اختبار الوظيفة الطبيعية بعد الإصلاح

تأكيد تبعيات Spring Framework 5.3.18 بعد الإصلاح

التقدم الحالي

  • إنشاء دليل المشروع
  • كتابة README
  • إنشاء تقرير الاختبار
  • تجهيز بيئة JDK وMaven وTomcat
  • بناء مشروع اختبار Spring MVC
  • إكمال تغليف ونشر مشروع WAR
  • إكمال التحقق الأساسي من الوظيفة الطبيعية
  • إكمال تأكيد شروط تأثير الثغرة
  • إكمال تشخيص المخاطر المحلي للقراءة فقط
  • إكمال تحليل سبب الثغرة
  • إكمال ترقية إصدار Spring Framework
  • إكمال إعادة الاختبار الأمني بعد الإصلاح
  • إكمال إعادة اختبار الوظيفة الطبيعية بعد الإصلاح
  • تأكيد إصدارات التبعيات الفعلية بعد الإصلاح
  • تنظيم تقرير الاختبار وأدلة لقطات الشاشة

ملخص المشروع

أنجز هذا المشروع في بيئة محلية معزولة تأكيد شروط تأثير ثغرة CVE-2022-22965 في Spring Framework، وتشخيص المظهر الخطر، وإصلاح ترقية الإصدار، وإعادة الاختبار بعد الإصلاح.

استخدم المشروع قبل الإصلاح Spring Framework 5.3.17. في بيئة JDK 11 وSpring MVC وApache Tomcat 9.0.60 والنشر التقليدي كحزمة WAR، حُكم على مسار الخصائص class.module.name بأنه قابل للقراءة.

بعد الإصلاح، رُقّي المشروع Spring Framework إلى 5.3.18. أصبح مسار الخصائص نفسه غير قابل للقراءة، بينما ما زالت وظيفة ربط البيانات الطبيعية للاسم والبريد الإلكتروني تعمل.

لم ينفّذ هذا المشروع استغلالًا كاملًا للثغرة عن بُعد، بل أجرى التحقق من الفرق قبل وبعد الإصلاح من خلال طريقة قراءة فقط آمنة وموجهة.

يركّز المشروع على إظهار القدرات التالية:

  • بناء البيئة الأساسية لـ Java وSpring MVC
  • بناء مشروع Maven
  • نشر تطبيقات Tomcat WAR
  • فهم آلية ربط بيانات Spring
  • تحليل شروط تأثير الثغرة
  • تصميم عملية اختبار أمني
  • ترقية إصدارات المكونات
  • إعادة الاختبار بعد الإصلاح
  • اختبار الانحدار للوظائف الطبيعية
  • كتابة تقارير الاختبار الأمني
  • تنظيم أدلة لقطات الشاشة ومشروع GitHub
تنزيل الأداة