Spring Framework 6.2.19が公開されました。今回のリリースは通常の保守更新という位置付けですが、16件のCVEを修正しており、Spring MVC、WebFlux、WebSocket、SpEL、静的リソース、マルチパート処理、デシリアライズなど、Webアプリケーションの主要な入口が広く対象になっています。Spring Bootを利用している場合も、アプリケーションが直接Spring Frameworkのバージョンを指定していなくても、依存関係管理を通じて影響を受ける可能性があります。
16件のCVEを攻撃経路別に見る
今回の脆弱性は、個別のCVE番号を覚えるよりも、どの入力経路に関係するかで整理すると実務上の判断がしやすくなります。
1. Webリクエストとセッション
WebSocketでは予測可能なセッションID、WebFluxではセッション固定攻撃による権限昇格が問題になります。また、MVCとWebFluxのオープンリダイレクトや、UriComponentsBuilderを介したSSRFも修正されています。
外部から指定されたURL、リダイレクト先、セッション情報をそのまま信頼しているアプリケーションでは、認証回避や内部ネットワークへのアクセスにつながる可能性があります。特に、管理画面、OAuth連携、Webhook、URLプレビュー機能などを持つサービスは優先的に確認すべきです。
2. 静的リソースとパス処理
静的リソースのキャッシュを通じた情報漏えい、バージョン付きリソースに関するDoS、パストラバーサル、AntPathMatcherの負荷増大などが対象です。
/staticや/webjarsのような公開ディレクトリだけでなく、設定ミスによってクラスパス外やアプリケーション内部のディレクトリを公開していないかが重要です。静的ファイルのバージョニングを利用している場合は、キャッシュキーやパス正規化の挙動も確認してください。今回のリリースでは、安全でない静的リソースの配置に警告する改善も含まれています。
3. マルチパート処理とDoS
WebFluxのマルチパートリクエストによるDoS、MVCおよびWebFluxにおけるマルチパート・リクエスト・スマグリングが修正されました。アップロード機能は、ファイルサイズやパート数の制限が不十分だと、メモリ・CPU・ディスクを消費させる攻撃に悪用されます。
フレームワークを更新するだけでなく、リバースプロキシ、Webサーバー、アプリケーションそれぞれでリクエストサイズ、タイムアウト、同時実行数を設定し、異なるレイヤー間でContent-LengthやTransfer-Encodingの解釈が食い違わないようにする必要があります。
4. SpELによる実行制御
SpELでは、アルゴリズムDoS、無制限キャッシュ、任意メソッド呼び出しに関する脆弱性が修正されています。SpELは条件式やBean参照に便利な一方、外部入力を式として評価すると、アプリケーション内部のオブジェクトやメソッドへ意図せず到達する危険があります。
検索条件、通知テンプレート、ワークフロー、権限ルールなどを動的に定義する機能でSpELを使っている場合は、次の点を確認してください。
- ユーザー入力をそのままSpELとして評価していないか
- 評価コンテキストで利用可能な型、Bean、メソッドを制限しているか
- 式の長さ、評価時間、演算回数に上限があるか
- 式や評価結果を無制限にキャッシュしていないか
- AIが生成した式やルールを検証なしで実行していないか
6.2.19には、SpEL評価中の操作追跡やgetterの戻り値検証など、今回の問題領域に関連する改善も含まれています。ただし、入力を信頼できるようになるわけではありません。アプリケーション側の許可リスト設計とサンドボックス化が必要です。
5. XSSとデシリアライズ
JavaScriptUtilsおよびJSPフォームタグ経由のXSS、安全でないJackson JMSコンバーターのデシリアライズも修正対象です。JSPを利用しているシステムや、JMS経由で外部メッセージを受信するシステムでは、利用実態を確認してください。
デシリアライズでは、送信元が社内システムであっても、認証済みユーザー、侵害されたメッセージブローカー、連携先の設定ミスなどを考慮する必要があります。許可する型を限定し、不要な多態的デシリアライズを避け、メッセージの認証・完全性検証を行うことが基本です。
Spring Boot利用環境での影響確認
Spring Bootでは、Spring Frameworkの複数モジュールをBOMや依存関係管理でまとめて管理する構成が一般的です。まず、次のように実際に解決されているバージョンを確認します。
./mvnw dependency:tree -Dincludes=org.springframework
または、Gradleの場合は次のコマンドを利用できます。
./gradlew dependencies --configuration runtimeClasspath
そのうえで、利用中のSpring BootのリリースラインがSpring Framework 6.2.19を取り込むかを、公式のリリースノートや依存関係管理情報で確認してください。Spring Frameworkだけを個別に上書きする方法は、Spring Bootが想定する組み合わせから外れる可能性があるため、原則として対応するSpring Bootの保守リリースへ更新する方が安全です。やむを得ず個別上書きする場合は、起動試験だけでなく、MVC、WebFlux、JMS、JSP、WebSocketを含む実利用経路を検証してください。
更新の優先度
次の条件に該当する環境は、通常の定期更新を待たず、緊急度を上げて対応する価値があります。
- インターネットから到達可能なMVCまたはWebFluxアプリケーション
- WebSocket、ファイルアップロード、静的リソース配信を利用しているサービス
- SpELにユーザー入力、設定ファイル、AI生成コンテンツを渡しているサービス
- 外部URL取得、リダイレクト、Webhook、URLプレビューを実装しているサービス
- JMSやJacksonによるメッセージのデシリアライズを行っているサービス
- JSPなど、長期運用で依存関係の更新が滞っているサービス
更新前には、SBOMや依存関係スキャンでSpring Frameworkの全モジュールを洗い出し、CVEスキャナーの結果だけに依存しないことが重要です。脆弱性データベースへの反映には時間差があるため、公式のSpring Security Advisoryと実際の依存関係を突き合わせて判断します。
更新後に実施したいテスト
依存関係を更新したら、次の回帰テストを最低限実施します。
- ログイン、ログアウト、セッション更新、権限変更
- WebSocket接続と再接続、SSEのストリーミング
- 大容量・複数パートのファイルアップロード
- 静的リソースのキャッシュ、バージョン付きURL、404処理
- リダイレクト先および外部URL取得の許可制御
- SpELを利用する検索、認可、テンプレート処理
- JMSメッセージの受信と失敗時のリトライ
- DST境界を含むCron処理や、DataBufferを使うリアクティブ処理
今回のリリースには、CVE修正だけでなく、DataBufferのデータ欠落、DST境界でのCron処理、CookieLocaleResolverの競合、SSEの複数行コメントなどの不具合修正も含まれています。そのため、セキュリティ修正だけを目的にしていても、非同期処理やストリーミング処理の回帰確認が必要です。
まとめ
Spring Framework 6.2.19は、Webアプリケーションの入力処理と実行制御に関わる16件のCVEをまとめて修正した、優先度の高いメンテナンスリリースです。特に、外部入力をSpELやURL、マルチパート、デシリアライズ処理へ渡しているシステムでは、単なる依存関係更新ではなく、入力の信頼境界そのものを見直す機会になります。
Spring Boot利用者は、まず解決済みのSpring Frameworkバージョンを確認し、対応するBootの保守リリースへ更新してください。その後、WebFlux・MVC・WebSocket・静的リソース・SpEL・JMSの利用箇所を棚卸しし、攻撃経路ごとの設定と監視を点検することが、今回のリリースを実務上の安全性向上につなげるポイントです。
