Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cve-2023-34035-mitigations — CVE-2023-34035の脆弱性をSpring Securityで実証し、脆弱なサンプルアプリケーションと緩和されたサンプルアプリケーションを用いて、適切なサーブレットマッピングとリクエストマッチャーの構成を学びます。 | Kitploit
ツール/GitHubGitHub/jzheaux/cve-2023-34035-mitigations
脆弱性分析コード分析ウェブセキュリティ設定ミス学習と教育APIセキュリティ
GitHubjzheaux/cve-2023-34035-mitigations

cve-2023-34035-mitigations

CVE-2023-34035の脆弱性をSpring Securityで実証し、脆弱なサンプルアプリケーションと緩和されたサンプルアプリケーションを用いて、適切なサーブレットマッピングとリクエストマッチャーの構成を学びます。

リポジトリを見る
4133年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

このリポジトリは、アプリケーションが https://spring.io/security/cve-2023-34035[CVE-2023-34035] に対して脆弱になりうる構成を示すサンプルセットです。

アプリケーションは、以下のすべてが当てはまる場合に脆弱です。

  • Spring MVC がクラスパス上にある
  • DispatcherServlet と少なくとも 1 つの他のサーブレットがマッピングされている。そのうちの 1 つにパスベースのサーブレットマッピング(例: /path/**)がある。
  • アプリケーションが、サーブレットマッピングが /path/** 形式のエンドポイントを参照するために requestMatchers(String) を使用している。

== サンプル

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 と少なくとも 1 つの他のサーブレットがマッピングされており(そのうちの 1 つはルート以外のパスベースのサーブレットマッピング(この場合は 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:java-configuration:other-servlets

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/java-configuration/other-servlets[このサンプル] は、DispatcherServlet とカスタムサーブレット MyServlet がデプロイされている脆弱なアプリケーションを表します。

Spring MVC がクラスパス上にあり、DispatcherServlet と少なくとも 1 つの他のサーブレットがマッピングされており(そのうちの 1 つはルート以外のパスベースのサーブレットマッピング(この場合は 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: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 がクラスパス上にあり、DispatcherServlet と少なくとも 1 つの他のサーブレットがマッピングされており(そのうちの 1 つはルート以外のパスベースのサーブレットマッピング(この場合は 2 つの DispatcherServlets のうちの 1 つ)を持ち)、アプリケーションがそれらのエンドポイントを保護するために 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 と少なくとも 1 つの他のサーブレットがマッピングされており(そのうちの 1 つはルート以外のパスベースのサーブレットマッピング(この場合は 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: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 がクラスパス上にあり、DispatcherServlet と少なくとも 1 つの他のサーブレットがマッピングされており(そのうちの 1 つはルート以外のパスベースのサーブレットマッピング(この場合は 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:spring-boot:java:undertow

https://github.com/jzheaux/cve-2023-34035-mitigations/tree/main/servlet/spring-boot/java/undertow[このサンプル] は、DispatcherServlet が /(デフォルト)にデプロイされている安全なアプリケーションを表します。

これは脆弱ではありません。Spring MVC がクラスパス上にあり、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).

それに従う必要があります。

[注記] 5.8.5、6.0.5、6.1.2、6.2.0-M1 バージョンの Spring Security にはいくつかの誤検知があります。 現在、多くの場合、以下の内容は一時的なものであり、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 ブランチには、軽減策が必要な 8 つのサンプルを修正するための 8 つのコミットがあります。 5.8.6、6.0.6、6.1.3、6.2.0-M2 がリリースされると、それらのブランチに追加の変更が加えられ、ベストプラクティスの軽減策が明確になります。

ツールをダウンロード