
CVE-2022-22978脆弱性サンプルコード
CVE-2022-22978 脆弱性のサンプルコード
高危(High)に分類されているものの、利用条件はかなり厳しく、この脆弱性はあまり有用ではないと個人的に感じています。
regexMatchers または RegexRequestMatcher を直接使用し、かつパスに . を使ってマッチさせていること。例えば以下のような場合:
regexMatcher("/api/.*") // /api 以下のすべてのサブパスを許可regexMatcher("/files/.*\\.jpg") // .jpg で終わるファイルリクエストすべてにマッチregexMatcher("/user/.*/profile") // /user 以下の任意のユーザー名の profile パスを許可regexMatcher("/api/.*") のようなパスがある場合、さらに @RequestMapping("/api/*") アノテーションを持つコントローラーが存在し、/api 以下のすべてのパスリクエストを処理する必要があります。そうでなければ、%0a%0d を使って spring-security のパスマッチングルールをバイパスしても、404 エラーが発生します。通常のパスにアクセスすると、すべて spring-security が提供するデフォルトのログインページにリダイレクトされます。

次の URL にアクセス:http://127.0.0.1:8080/admin/admin%0a、ログインバイパスに成功します。

次の URL にアクセス:http://127.0.0.1:8080/hello%0a
すべてのパスで必要とされるログインのセキュリティチェックをバイパスしますが、@RequestMapping("/hello/*") アノテーションを持つコントローラーがないため、マッピングに失敗し、404 エラーが発生します。
