CERT Coordination Center (CERT/CC, Carnegie Mellon University)は3月31日(米国時間)、「VU#970766 - Spring Framework insecurely handles PropertyDescriptor objects with data binding」において、Java用のアプリケーション開発フレームワークである「Spring Framework」に脆弱性が報告されていると伝えた。この脆弱性を悪用されると、標的となったJavaアプリケーションがホストされているシステム上でリモートの攻撃者によって任意のコードを実行される危険性がある。
Spring Frameworkは、JavaによるWebアプリケーションやエンタープライズアプリケーションの開発においてデファクトスタンダードとして利用されている人気のフレームワークであり、この脆弱性の影響は広範囲に及ぶ可能性がある。
脆弱性の報告を受けて、Springプロジェクトからは次のアナウンスが公開されている。
脆弱性の情報は3月30日(英国夏時間)にオンラインにリークされ、悪用につながる詳細情報がTwitterなどを通じて広まった。その時点ではCVEの公開および有効な修正版のリリースは行われていなかった。その後、3月31日に開発元のSpringプロジェクトより修正版がリリースされ、続いてCVE-2022-22965としてCVEも公開された。
この脆弱性の影響を受けるSpring Frameworkのバージョンは次のとおり。
- バージョン5.3.0から5.3.17
- バージョン5.2.0から5.2.19
- 上記以前のずべてのバージョン
本稿執筆時点で判明している、この脆弱性を悪用できる条件は次のとおりとなっている。
- JDK 9(Java 9)以降のバージョンを使用
- サーブレットコンテナとしてApache Tomcatを使用
- warファイルとしパッケージされている
- Spring MVC(spring-webmvc)またはSpring WebFlux(spring-webflux)への依存関係がある
ただし、上記以外にも悪用する方法が見つかる可能性があるとされており、引き続き最新の情報に注目しておく必要がある。
Springプロジェクトからは、この脆弱性の影響を回避する修正版として、次のバージョンがリリースされている。
- Spring Framework 5.3.18
- Spring Framework 5.2.20
また、Spring FrameworkをベースとしたSpring Bootでも、次の修正版がリリースされている。
- Spring Boot 2.6.6
- Spring Boot 2.5.12
現在明らかにされている情報によると、この脆弱性を悪用する攻撃シナリオは次のようなものだという。攻撃者はまず、Tomcat固有のクラスロードの仕組みを利用してターゲットのTomcatサーバのログ出力先をROOTディレクトリに書き換える。その上で、任意のシェルコードをログとして出力させてROOTディレクトリにシェルスクリプトファイルを作成する。最後にJavaのWebアプリケーションを介してこのシェルスクリプトを実行する。
この脆弱性は「Spring4Shell」または「SpringShell」の通称でも呼ばれている。これは、攻撃手法が2021年11月にApache Log4j 2に発見された「Log4Shell」と呼ばれる脆弱性(CVE-2021-44228)と似ていることによるものだ。
Spring Frameworkには、CVE-2022-22965のほかにも次の2件の脆弱性が報告されている。
- CVE-2022-22950: Spring Expression DoS Vulnerability
- CVE-2022-22963: Remote code execution in Spring Cloud Function by malicious Spring Expression
報告された時期が近いことからCVE-2022-22965と混同されるケースが見られるが、これら2件の脆弱性はCVE-2022-22965とは関連していないとのことだ。