Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
cve-2023-34035-mitigations | Kitploit
Инструменты/GitHubGitHub/jzheaux/cve-2023-34035-mitigations
Анализ уязвимостейАнализ КодаВеб-безопасностьНеправильная КонфигурацияОбучение и ОбразованиеБезопасность API
GitHubjzheaux/cve-2023-34035-mitigations

cve-2023-34035-mitigations

Репозиторий
413 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Этот репозиторий содержит набор примеров, демонстрирующих конфигурации, в которых приложения могут быть уязвимы к https://spring.io/security/cve-2023-34035[CVE-2023-34035].

Приложение уязвимо, если выполняются все следующие условия:

  • Spring MVC находится в classpath
  • DispatcherServlet и как минимум еще один сервлет замаплены; один из них имеет сервлет-маппинг на основе пути (например, /path/**)
  • Приложение использует requestMatchers(String) для указания конечных точек, сервлет-маппинг которых имеет вид /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 находится в classpath, DispatcherServlet и как минимум еще один сервлет замаплены — один из них имеет сервлет-маппинг на основе пути, не являющийся корневым (в данном случае DispatcherServlet), и приложение использует requestMatchers(String) для защиты этих конечных точек.

=== servlet:java-configuration:jetty

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/jetty[Этот пример] представляет безопасное приложение, где DispatcherServlet развернут в / (по умолчанию).

Оно не уязвимо. Хотя Spring MVC находится в classpath и DispatcherServlet используется, он развернут в /, и нет сервлет-маппингов на основе пути, не являющихся корневыми.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/other-servlets[Этот пример] представляет уязвимое приложение, где развернут DispatcherServlet, а также пользовательский сервлет MyServlet.

Оно уязвимо, поскольку Spring MVC находится в classpath, DispatcherServlet и как минимум еще один сервлет замаплены — один из них имеет сервлет-маппинг на основе пути, не являющийся корневым (в данном случае MyServlet), и приложение использует requestMatchers(String) для защиты этих конечных точек.

=== servlet:java-configuration:tomcat

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/tomcat[Этот пример] представляет безопасное приложение, где DispatcherServlet развернут в / (по умолчанию).

Оно не уязвимо. Хотя Spring MVC находится в classpath и DispatcherServlet используется, он развернут в /, и нет сервлет-маппингов на основе пути, не являющихся корневыми.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/two-dispatcher-servlets[Этот пример] представляет уязвимое приложение, где развернут DispatcherServlet, а также пользовательский сервлет MyServlet.

Оно уязвимо, поскольку Spring MVC находится в classpath, DispatcherServlet и как минимум еще один сервлет замаплены — один из них имеет сервлет-маппинг на основе пути, не являющийся корневым (в данном случае один из двух DispatcherServletов), и приложение использует 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 находится в classpath, DispatcherServlet и как минимум еще один сервлет замаплены — один из них имеет сервлет-маппинг на основе пути, не являющийся корневым (в данном случае 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 находится в classpath и DispatcherServlet используется, он развернут в /, и нет сервлет-маппингов на основе пути, не являющихся корневыми.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/other-servlets[Этот пример] представляет уязвимое приложение, где развернут DispatcherServlet, а также пользовательский сервлет MyServlet.

Оно уязвимо, поскольку Spring MVC находится в classpath, DispatcherServlet и как минимум еще один сервлет замаплены — один из них имеет сервлет-маппинг на основе пути, не являющийся корневым (в данном случае 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 находится в classpath и DispatcherServlet используется, он развернут в /, и нет сервлет-маппингов на основе пути, не являющихся корневыми.

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

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/undertow[Этот пример] представляет безопасное приложение, где DispatcherServlet развернут в / (по умолчанию).

Оно не уязвимо. Хотя Spring MVC находится в classpath и DispatcherServlet используется, он развернут в /, и нет сервлет-маппингов на основе пути, не являющихся корневыми.

== Смягчение

В случае, если вы получите ошибку, подобную следующей:

.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).

следуйте ей.

[ПРИМЕЧАНИЕ] Версии 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. Это делается для того, чтобы сервлет-маппинг можно было более четко учесть.

Например, если приложение имеет сервлет, развернутый в /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(); }

Разделение пути сервлета при создании MvcRequestMatcher важно для обеспечения правильного сопоставления запроса.

== Ветки

В этом репозитории есть ветка для каждого минорного релиза Spring Security. В этой ветке есть коммит для каждого затронутого примера с необходимым смягчением.

Например, в ветке 5.8.x есть восемь коммитов для исправления восьми примеров, требующих смягчения.

Когда выйдут 5.8.6, 6.0.6, 6.1.3 и 6.2.0-M2, в эти ветки будут внесены дополнительные изменения, чтобы было ясно, как лучше всего применять смягчение.

Скачать инструмент