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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
cve-2023-34035-mitigations — يوضح ثغرة CVE-2023-34035 في Spring Security من خلال تطبيقات نموذجية ضعيفة ومخففة، مع تعليم التكوين الصحيح لتعيين servlet ومطابقة الطلبات. | Kitploit
أدوات/GitHubGitHub/jzheaux/cve-2023-34035-mitigations
تحليل الثغرات الأمنيةتحليل الكودأمن الويبسوء التكوينالتعلم والتعليمأمن واجهات برمجة التطبيقات
GitHubjzheaux/cve-2023-34035-mitigations

cve-2023-34035-mitigations

يوضح ثغرة CVE-2023-34035 في Spring Security من خلال تطبيقات نموذجية ضعيفة ومخففة، مع تعليم التكوين الصحيح لتعيين servlet ومطابقة الطلبات.

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
عرض المستودع
41منذ 3 سنواتلم تتم المراجعة بعد

هذا المستودع عبارة عن مجموعة من الأمثلة لتوضيح الحالات التي قد تكون فيها التطبيقات عرضة لـ https://spring.io/security/cve-2023-34035[CVE-2023-34035].

يكون التطبيق عرضة للخطر عندما تكون جميع الشروط التالية صحيحة:

  • Spring MVC موجود في مسار الفئات (classpath)
  • DispatcherServlet و servlet آخر واحد على الأقل مُعيَّنين؛ واحد منهما له تعيين servlet قائم على المسار (مثل /path/**)
  • يستخدم التطبيق requestMatchers(String) للإشارة إلى نقاط النهاية التي يكون تعيين servlet الخاص بها من النموذج /path/**

== أمثلة

هناك مجموعة من الأمثلة تستخدم Spring Boot ومجموعة لا تستخدمه.

الأمثلة التي تحتوي على اختبارات فاشلة معرضة لـ CVE-2023-34035. الأمثلة التي نجحت اختباراتها ليست عرضة للخطر.

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

=== servlet:java-configuration:dispatcher-servlet-path

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/dispatcher-servlet-path[هذا المثال] يمثل تطبيقًا عرضة للخطر حيث يتم نشر DispatcherServlet على /mvc/* بدلاً من / الافتراضي.

إنه عرضة للخطر نظرًا لأن Spring MVC موجود في مسار الفئات، و DispatcherServlet و servlet آخر واحد على الأقل مُعيَّنان - واحد منهما له تعيين servlet قائم على المسار وغير جذري (في هذه الحالة، DispatcherServlet) - ويستخدم التطبيق requestMatchers(String) لتأمين نقاط النهاية تلك.

=== servlet:java-configuration:jetty

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/jetty[هذا المثال] يمثل تطبيقًا آمنًا حيث يتم نشر DispatcherServlet على / (الافتراضي).

إنه ليس عرضة للخطر. بينما Spring MVC موجود في مسار الفئات و DispatcherServlet قيد الاستخدام، إلا أنه منشور على / ولا توجد تعيينات servlet قائمة على المسار وغير جذرية.

=== servlet:java-configuration:other-servlets

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/other-servlets[هذا المثال] يمثل تطبيقًا عرضة للخطر حيث يتم نشر DispatcherServlet بالإضافة إلى servlet مخصص MyServlet.

إنه عرضة للخطر نظرًا لأن Spring MVC موجود في مسار الفئات، و DispatcherServlet و servlet آخر واحد على الأقل مُعيَّنان - واحد منهما له تعيين servlet قائم على المسار وغير جذري (في هذه الحالة، MyServlet) - ويستخدم التطبيق requestMatchers(String) لتأمين نقاط النهاية تلك.

=== servlet:java-configuration:tomcat

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/tomcat[هذا المثال] يمثل تطبيقًا آمنًا حيث يتم نشر DispatcherServlet على / (الافتراضي).

إنه ليس عرضة للخطر. بينما Spring MVC موجود في مسار الفئات و DispatcherServlet قيد الاستخدام، إلا أنه منشور على / ولا توجد تعيينات servlet قائمة على المسار وغير جذرية.

=== servlet:java-configuration:two-dispatcher-servlets

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/two-dispatcher-servlets[هذا المثال] يمثل تطبيقًا عرضة للخطر حيث يتم نشر DispatcherServlet بالإضافة إلى servlet مخصص MyServlet.

إنه عرضة للخطر نظرًا لأن Spring MVC موجود في مسار الفئات، و DispatcherServlet و servlet آخر واحد على الأقل مُعيَّنان - واحد منهما له تعيين servlet قائم على المسار وغير جذري (في هذه الحالة، واحد من اثنين من DispatcherServlets) - ويستخدم التطبيق requestMatchers(String) لتأمين نقاط النهاية تلك.

=== servlet:spring-boot:java:dispatcher-servlet-path

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/dispatcher-servlet-path[هذا المثال] يمثل تطبيقًا عرضة للخطر حيث يتم نشر DispatcherServlet على /mvc/* بدلاً من / الافتراضي.

إنه عرضة للخطر نظرًا لأن Spring MVC موجود في مسار الفئات، و DispatcherServlet و servlet آخر واحد على الأقل مُعيَّنان - واحد منهما له تعيين servlet قائم على المسار وغير جذري (في هذه الحالة، DispatcherServlet) - ويستخدم التطبيق requestMatchers(String) لتأمين نقاط النهاية تلك.

=== servlet:spring-boot:java:jetty

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/jetty[هذا المثال] يمثل تطبيقًا آمنًا حيث يتم نشر DispatcherServlet على / (الافتراضي).

إنه ليس عرضة للخطر. بينما Spring MVC موجود في مسار الفئات و DispatcherServlet قيد الاستخدام، إلا أنه منشور على / ولا توجد تعيينات servlet قائمة على المسار وغير جذرية.

=== servlet:spring-boot:java:other-servlets

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/other-servlets[هذا المثال] يمثل تطبيقًا عرضة للخطر حيث يتم نشر DispatcherServlet بالإضافة إلى servlet مخصص MyServlet.

إنه عرضة للخطر نظرًا لأن Spring MVC موجود في مسار الفئات، و DispatcherServlet و servlet آخر واحد على الأقل مُعيَّنان - واحد منهما له تعيين servlet قائم على المسار وغير جذري (في هذه الحالة، MyServlet) - ويستخدم التطبيق requestMatchers(String) لتأمين نقاط النهاية تلك.

=== servlet:spring-boot:java:tomcat

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/tomcat[هذا المثال] يمثل تطبيقًا آمنًا حيث يتم نشر DispatcherServlet على / (الافتراضي).

إنه ليس عرضة للخطر. بينما Spring MVC موجود في مسار الفئات و DispatcherServlet قيد الاستخدام، إلا أنه منشور على / ولا توجد تعيينات servlet قائمة على المسار وغير جذرية.

=== servlet:spring-boot:java:undertow

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/undertow[هذا المثال] يمثل تطبيقًا آمنًا حيث يتم نشر DispatcherServlet على / (الافتراضي).

إنه ليس عرضة للخطر. بينما Spring MVC موجود في مسار الفئات و DispatcherServlet قيد الاستخدام، إلا أنه منشور على / ولا توجد تعيينات servlet قائمة على المسار وغير جذرية.

== التخفيفات (Mitigations)

في حالة ظهور خطأ مثل التالي:

.Bash [source,bash,role="primary"]

This method cannot decide whether these patterns are Spring MVC patterns or not. If this endpoint is a Spring MVC endpoint, please use requestMatchers(MvcRequestMatcher); otherwise, please use requestMatchers(AntPathRequestMatcher).

يجب اتباعه.

[NOTE] تحتوي إصدارات Spring Security 5.8.5 و 6.0.5 و 6.1.2 و 6.2.0-M1 على بعض الإيجابيات الكاذبة. الآن في كثير من الحالات، ما يلي مؤقت، بانتظار إصدار 5.8.6 و 6.0.6 و 6.1.3 و 6.2.0-M2.

كما أشارت رسالة الخطأ، فإن التخفيف الأساسي هو استخدام RequestMatcher كامل. وذلك ليمكن أخذ تعيين servlet في الاعتبار بشكل أكثر وضوحًا.

على سبيل المثال، إذا كان التطبيق يحتوي على servlet منشور على /my-servlet/* ويقوم بتفويض ذلك المرور كما يلي:

.Java [source,java,role="primary"]

@Bean SecurityFilterChain appSecurity(HttpSecurity http) throws Exception { http .authorizeHttpRequests((authorize) -> authorize .requestMatchers("/my-servlet/").hasRole("USER") .requestMatchers("/spring-mvc-controller/").hasRole("USER") .anyRequest().authenticated() ) // ... return http.build(); }

فيجب على التطبيق بدلاً من ذلك القيام بما يلي:

.Java [source,java,role="primary"]

import static org.springframework.security.web.util.matcher.AntPathRequestMatcher.antMatcher;

@Bean MvcRequestMatcher.Builder mvc(HandlerMappingIntrospector introspector) { return new MvcRequestMatcher.Builder(introspector); }

@Bean SecurityFilterChain appSecurity(HttpSecurity http, MvcRequestMatcher.Builder mvc) throws Exception { http .authorizeHttpRequests((authorize) -> authorize .requestMatchers(antMatcher("/my-servlet/*")).hasRole("USER") .requestMatchers(mvc.pattern("/spring-mvc-controller/**")).hasRole("USER") .anyRequest().authenticated() ) // ... return http.build(); }

أو، إذا تم نشر DispatcherServlet على مسار مختلف، مثل /spring-mvc/*، فبدلاً من:

.Java [source,java,role="primary"]

@Bean SecurityFilterChain appSecurity(HttpSecurity http) throws Exception { http .authorizeHttpRequests((authorize) -> authorize .requestMatchers("/spring-mvc/controller/**")).hasRole("USER") .anyRequest().authenticated() ) // ... return http.build(); }

يجب على التطبيق القيام بما يلي:

.Java [source,java,role="primary"]

@Bean MvcRequestMatcher.Builder mvc(HandlerMappingIntrospector introspector) { return new MvcRequestMatcher.Builder(introspector).servletPath("/spring-mvc"); }

@Bean SecurityFilterChain appSecurity(HttpSecurity http, MvcRequestMatcher.Builder mvc) throws Exception { http .authorizeHttpRequests((authorize) -> authorize .requestMatchers(mvc.pattern("/controller/**")).hasRole("USER") .anyRequest().authenticated() ) // ... return http.build(); }

يعد فصل مسار servlet عند إنشاء MvcRequestMatcher أمرًا مهمًا لضمان مطابقة الطلب بشكل صحيح.

== الفروع (Branches)

في هذا المستودع، يوجد فرع (branch) لكل إصدار فرعي من Spring Security. على هذا الفرع، يوجد commit لكل مثال متأثر مع التخفيف المطلوب.

على سبيل المثال، في الفرع 5.8.x، يوجد ثمانية commits لإصلاح الأمثلة الثمانية التي تتطلب تخفيفًا.

عندما يتم إصدار 5.8.6 و 6.0.6 و 6.1.3 و 6.2.0-M2، سيتم إجراء تغييرات إضافية على تلك الفروع حتى يكون التخفيف الأفضل واضحًا.

تنزيل الأداة