Spring4Shell(CVE-2022-22965)は、Javaベースのエンタープライズアプリケーション向けの包括的なフレームワークであるSpring Coreに影響を及ぼす、リモートコード実行(RCE)脆弱性だ。
Spring4Shellという名称は、Log4Shell脆弱性という、史上最も深刻なゼロデイ脅威の一つに由来する。これはLog4jというJavaソフトウェアコンポーネントに影響し、ハッカーがWebサーバーやネットワークを掌握できるようにした。
Spring4Shellは、Webアプリケーションやクラウドサービスにとって重大な脆弱性だ。RCEはいずれも深刻な脅威であり、GitHubにはすでに、エクスプロイトを公開する多数のPOC(概念実証)が存在するため、サイバー犯罪者が見逃すはずはない。
Spring4ShellやLog4Shellのような脆弱性はすぐに攻撃対象となり、ハッカーはおそらく別の悪用方法も見つけるだろう。回避策や緩和策をすり抜ける可能性もあるため、警戒が必要だ。
最近の調査では、新たなRCE手法が見つかるたびに、78%の企業が侵害を受ける可能性があることが分かった。そのため、セキュリティ担当者はゼロデイのRCE脆弱性に特に注意を払うべきだ。
「主要な脆弱性管理ツール」を参照。
Spring Coreの人気
Spring Core Frameworkは、特にエンタープライズ分野で最も人気の高いJavaフレームワークの一つだ。企業はJava EEアプリケーションの代替として、開発を高速化するために利用している。
このツールは完全なオブジェクト指向で、Javaベースのアプリケーションを構築するための高度な機能を提供する。例えばSpringでは、リクエストからパラメーターをバインド・抽出できるため、プログラマーはそれらを容易に操作できる。
つまり、HTTPリクエストから有用な情報を抽出し、アプリケーションで使われるキーと値のペアやJavaオブジェクトとしてマッピングできる。開発者にとってより便利な仕組みだ。
ハッカーはSpring4Shellを悪用して情報を上書きし、最終的にリモートコード実行につながるWebシェルをアップロードできる。そのために、標的となるJavaオブジェクトを操作して対象システムを完全に掌握するための悪意のあるペイロードをHTTPリクエスト経由で送信すると考えられる。
Spring4Shellのエクスプロイトを解説
このエクスプロイトには、いくつかのコンポーネントが必要とみられる。
- JDK(Java Development Kit)9++
- spring-webmvcまたはspring-webflux
- Springフレームワークのバージョン5.2.0~5.2.19、5.3.0~5.3.17、またはそれ以前
- アプリケーションを提供するApache Tomcat
- WAR(Web Application Resource)ファイルとして構築されていること(JARではない)
しかし、Microsoftは次のように述べた。「JDK 9.0以降を使用し、Spring Frameworkまたは派生フレームワークを利用しているシステムは、すべて脆弱だと考えるべきだ」
ほとんどのPOCは、HTTPリクエスト(GET、POSTなど)とペイロードを受け付けるREST APIを悪用した。主な手法は、Spring Framework内のリクエストマッピングアノテーションとPlain Old Java Object(POJO)パラメーターに依存する特定の機能を迂回させることだ(下のスクリーンショットを参照)。

攻撃者は細工したHTTPリクエストを送信し、サービスのルートディレクトリに悪意のある.jspファイルを作成できる(出典:Microsoft)。

つまり、特定の条件(例えばSpringのリクエストマッピング機能)下では、クライアント側から内部変数を変更できる。
このフレームワークにはリクエストマッピング機能があるため、ハッカーは特定のURIに応じて呼び出されるメソッドを予測できる。さらに、パラメーター/プロパティーのバインディングは、URIパラメーターに基づいて一部のフィールドを自動的に設定するため開発者にとって便利だが、非常に予測しやすく、意図しない連鎖も起こりやすい。
「getClassLoader()アクセサを使用すると、ハッカーはTomcatのパイプラインにあるAccessLogValveオブジェクトのプロパティーを操作できる。これにより、脆弱なTomcat Webサーバーのアクセスログをリバースシェルに変えることが可能になる。
このような不正なシェルアクセスは、サーバーの設定やデプロイ時に適用されたセキュリティポリシーによっては、認証情報の窃取からroot権限への昇格まで、最悪の事態を招く可能性がある。
エクスプロイトは非常に技術的に見えるかもしれないが、公開されたPOCやダークなオープンソース化によって、その難易度は大幅に下がる。攻撃を自動化できるPythonスクリプトを数多く目にしてきた。
ハッカーはすでにこの脆弱性を悪用
CISAは脆弱性をカタログに追加し、Checkpointはいくつかの重要な数値を強調した。
- Spring4Shell脆弱性を悪用しようとした試みは約3万7,000件
- 最初の4日間で、世界中の組織の16%が悪用の試みの影響を受けた
- ソフトウェアベンダーが最も影響を受けた業界で、組織の28%が影響を受けた
- 最も影響を受けた地域は欧州で、約20%が影響を受けた
Microsoftは「Spring CloudおよびSpring Coreの脆弱性をめぐり、クラウドサービス全体でのエクスプロイトの試みは少数だった」と報告し、ユーザーに現在の設定を確認するよう強く促した。
Spring4Shellの検出と防御方法
この脆弱性はRCEを可能にするため、不審な活動、特に外部への接続を監視することで、エクスプロイトの検出に役立つ。
より具体的には、MicrosoftがSpring4Shellに対して脆弱かどうかを判断する簡単なテストを示している。
curl host:port/path?class.module.classLoader.URLs%5B0%5D=0HTTP 400レスポンスが返れば陽性だ。
Spring Frameworkのバージョン5.2および5.3に依存する企業は、速やかにバージョン5.2.20および5.3.18へアップグレードすべきだ。
あるいは、次のバージョンのApache Tomcatにパッチを適用することもできる:8.5.78、9.0.62、10.0.20。
Springプロジェクトは一連の緩和策と推奨事項を公開した。現時点で更新できない組織は、例えばJava 8へダウングレードするか、特定のフィールドへのバインディングを無効にできる。
VMwareも詳細なアドバイザリーを公開した。Spring4Shellの影響を受ける同社の全製品について、深刻度は「重大」とされている。現時点では、すべての製品向けの修正策が提供されているわけではない。調査は現在も続いているが、ユーザーは脅威を緩和するために回避策を適用できる。





