1.Spring4Shellとは
Vmware社は、2022年3月にJavaのフレームワークであるSpring Frameworkの脆弱性CVE-2022-22965を公開しました。インターネット上のWebサーバで脆弱性を含むバージョンのSpring Frameworkを利用したJavaアプリケーションが稼働し、かつ特定の条件を満たす状態の場合、リモートから任意のコードの書き込み、実行が可能となります。本脆弱性は、「Spring4Shell」と呼ばれており、脆弱性の深刻度を示す指標であるCVSSスコアは9.8で、緊急性の高い脆弱性です。
2022年3月29日に、中国のフィンテック業界の最大手Ant Group社のセキュリティラボが脆弱性を発見してVMware社へ報告し、VMware社は3月31日にSpring Frameworkのアップデートをリリースしました。トレンドマイクロ社は、同日に同社のハニーポットのIPSで、この脆弱性を狙った攻撃を検知しました(※1)。同社が検知したSpring4Shellの攻撃試行の件数を図1に示します。4月5日には、インターネット上に当該脆弱性を攻撃できるPoCコード(※2)が公開されました。さらにチェックポイント社は、脆弱性の発見後に3万7000件もの悪用の試行を観測し、最初の4日間で全世界の16%もの組織が影響を受けたと発表しました(※4)。
Spring Frameworkは、システム開発を効率化するためのJavaフレームワークの1つであり、汎用性が高く、最大のシェアを獲得しているため、影響範囲が広いと言えます。
図1:Spring4Shellの悪用試行件数(2022年4月1日~12日)(※3)
2.攻撃で影響を受けるバージョンと条件
下記のバージョンと条件を全て満たす場合、本脆弱性を狙った攻撃によって影響が発生するおそれがあります。
Spring Frameworkバージョン
- 5.3.0-5.3.17
- 5.2.0-5.2.19
- サポートが終了しているバージョン
条件
- Javaアプリケーションを実行する環境がJDK9以降である
- Webサーバ上で、Apache TomcatをServletコンテナとして使用している
- Javaアプリケーションを展開可能なWARとしてパッケージ化している
- Javaアプリケーションがspring-webmvc或いはspring-webfluxを使用している
3.脆弱性を悪用した攻撃フローの解説
攻撃者は、当該脆弱性を悪用してサーブレットコンテナ上のプロパティを書き換え、最終的には攻撃者がアクセス可能な場所に任意のコードを含むjspファイルを生成して、リモートからそのコードの実行が可能です。以下に攻撃者が脆弱性を攻撃するときの流れを公開されたPoCコードに沿って説明します。
図2:攻撃の流れ
(1)脆弱性が存在するWebサーバを特定
攻撃者は、攻撃対象のWebサーバを探索します。攻撃者が探索している方法は不明ですが、以下のような事前調査を行うと推測します。
- ShodanなどでApache Tomcatが動作しているWebサーバを列挙する
- 本脆弱性のスキャンツール等を利用して、列挙したWebサーバの中から脆弱性が存在するWebサーバを特定する
(2)リクエスト送信、プロパティ書き換え、ファイル生成
Java9より追加されたgetModule()は、getClassLoader()を含んでおり、データバインディング時にBeanWrapperにおけるプロパティ値の取得および設定をする機能により、再帰的にClassLoaderの呼び出しが可能となります。攻撃者は、Tomcatのクラス変数の操作が可能となり、Content-typeに”application/x-www-form-urlencoded”を指定し、更にAccessLogValueのプロパティ値を変更したPOSTリクエストを送信します。Webサーバは、攻撃者が送信したPOSTリクエストを受け取って処理します。その後、攻撃コードを含んだ「tomcatwar.jsp」ファイルを生成します。
図3:Spring4ShellのPoCコード
(3)コードの実行
攻撃者は、GETリクエストでWebサーバ上に生成した「tomcatwar.jsp」を呼び出して、リモートから攻撃コードを実行します。Spring4Shellを悪用した攻撃例は、以下の2例が確認されています。
- i.ボットネットマルウェア「Mirai」の感染
攻撃者は、Spring4Shellを悪用して「Mirai」を攻撃対象のWebサーバにアップロードして実行します。Webサーバは、Miraiに感染し、ボットネットへ接続します。攻撃者の命令に従って、DDoS攻撃を行います。 - ii.コインマイナーのインストール
攻撃者は、Spring4Shellを悪用して攻撃対象のWebサーバへコインマイナーをインストールし、計算機リソースを無断で使用して、仮想通貨を獲得します。これにより、Webサーバの処理速度が低下して、業務影響が発生します。
4.まとめ
2021年12月に見つかったLog4ShellはJavaのログフレームワークの脆弱性を悪用して、攻撃が発生しました。Spring4Shellは、JDK9で追加した機能の脆弱性を悪用して、TomcatのClassLoaderの意図しないアクセスを用いて攻撃が発生しました。いずれも広く利用されているフレームワークの脆弱性を狙った攻撃です。今後も、フレームワークのゼロデイ脆弱性を狙った影響の大きな脆弱性が見つかるおそれがあるでしょう。基本的な対策は、最新の脆弱性情報を収集して脆弱性を対処することですが、組織が使用している全てのソフトウェアやフレームワーク、外部のライブラリ等を調査して、脆弱性を含むものを迅速に特定することは非常に困難です。日本国内でも普及を推進しているSBOM(ソフトウェア部品表)を整備、活用すれば、上記のような発見が難しい脆弱性も迅速な対処できるようになります。