Spring4Shell (CVE-2022-22965)
2022年3月31日、VMWare TanzuはCVE-2022-22965を発表しました。調査によると、JDK9+ Spring Frameworkにリモートコード実行(RCE)の脆弱性が報告されています。第三者がこの脆弱性を悪用する場合は、影響を受けるシステムがJavaバージョン9以上を実行し、Spring Frameworkを活用していることなどが前提条件となります。また、本脆弱性は別名 Spring4Shellと呼ばれています。
Spring FrameworkはJavaで採用される主流なフレームワークの1つのため、Javaで実行されるWebアプリケーションで広く利用されている可能性が高いものとなります。また脆弱性の悪用しやすさの観点、すでに脆弱性を悪用するコードが出回っているため、直ちに影響範囲の特定と対策が必要と言えます。
脆弱性の概要と影響範囲
本脆弱性は、JDK 9+ で動作する Spring MVC および Spring WebFlux アプリケーションに影響を及ぼしています。また、本脆弱性を利用するには、Tomcat上でアプリケーションをWAR形式で実行する必要があります。アプリケーションをSpring Bootの実行可能なjarとして配備している場合、つまりデフォルトでは、脆弱ではありません。しかし、この脆弱性の性質はより一般的なものであり、この脆弱性を悪用する他の方法が存在する可能性があります。
報告書に記載されている具体的なシナリオの要件は以下の通りです。
・Spring Framework 5.3.0~5.3.17 または 5.2.0~5.2.19、およびそれ以前のバージョン
・実行される環境がJDK 9 以上
・Apache Tomcatをサーブレットコンテナとして利用
・WARファイルとしてパッケージ化
・spring-webmvc または spring-weblux との依存関係がある
これらの情報は 2022年4月1日時点の情報であり、今後エンドポイントを脆弱にする他の環境上の前提条件が存在する可能性があることにご留意ください。
Spring4Shell脆弱性の特定・その1
タニウムは、システム内部に潜んでいる脆弱性を判断するための情報を短時間で収集することができます。今すぐできる影響範囲の特定方法についてご紹介します。
まず調査すべきシステムを判定する1つの方法は、Apache Tomcatがインストールされているアプリケーションであるかどうかを確認することです。Apache Tomcatがシステム上に存在するか、または実行されている場合、そのシステムをさらに調査する必要があります。
Apache Tomcat がインストールされているエンドポイントを特定するには、以下のQuestionを実行することで可視化できます。
Get Computer Name and Installed Application Exists[tomcat]from all machines with Installed Application Exists[tomcat] contains true
次に、組織内のシステムにインストールされているすべてのバージョン9以上のJavaについて可視化してみましょう。
Get Computer Name and Installed Applications matches
“^(openjdk|java(\(tm\)(.*development[^\d]+)?)?)($|(\s|-1\.|-)(9|[12]\d)).*$” from all machines with Installed Applications matches
“^(openjdk|java(\(tm\)(.*development[^\d]+)?)?)($|(\s|-1\.|-)(9|[12]\d)).*$”
もし Tanium Threat Response – Index 機能をお使いの場合は、ファイルシステムに脆弱なSpring Frameworkが配置されているかどうか可視化できます。
Get Computer Name and Index – File Details[10,*,”spring-beans-[0-
9].*.jar”,*,*,*,*,*,*,1,0,””,””] from all machines with Index – File Exists[*,”spring-beans-[0-9].*.jar”,*,*,*,*,*,*,1] matches True|Yes
以上の方法により、本脆弱性の影響範囲を判断する情報を収集することができます。
Spring4Shell脆弱性を特定・その2
潜在的な脆弱性を持つシステムを特定するもう一つの方法は、Tanium Asset レポートを活用することです。Tanium Asset を使用すると、上記の Interact の質問に答えるためにオンラインでなくても、インベントリに登録されたシステムのインストールされたソフトウェアを迅速に表示することができます。
All Software レポートから、tomcat または jdk を含むインストール済みアプリケーションの Normalized Name を使用してクイックフィルタを作成し、脆弱性アナウンスで特定されたこれらのアーティファクトのインスタンスのレポートを返すことができます。
レポートのカウントをクリックすると、エンドポイントリストが返されます。そこから、たとえオフラインであっても、個々のシステムに焦点を合わせて調査し、さらなる対策が必要かどうかを判断することができます。特定のエンドポイントでは、インストールされているアプリケーションによって、アーティファクトの組み合わせが脆弱性アナウンスで確認されたものと一致するかどうかを判断することができます。
さらに調査したところ、このエンドポイントにはもう1つ、JDKのバージョン9以上の組み合わせがインストールされていることが確認できました。
Spring4Shell脆弱性を特定・その3
Tanium Revealをお使いの場合は、さらに詳しい調査を行うことができます。Tanium Revealは、コンテンツ内部をスキャンするユニークな機能を提供しています。そのため、ファイルシステム上の潜在的な脆弱性を素早く特定することが可能です。
1. Quick Search から、 「spring-core」または「spring-beans」のコンテンツ合致するファイルを検索できます。
この時、ファイルタイプZIPを指定すると、jarファイル含めた圧縮ファイルタイプのみに絞って検索が実行できます。
2. 該当したファイルを選択することで、コンテンツ内部のどこに合致したか確認できます。
3. 一度検索した内容は、Tanium Reveal Quick Search ページの保存された検索の横にある虫眼鏡アイコンをクリックすることで検索を実行することができます。またプラスアイコンを押すことでいつでも呼び出せるようになります。
以上により、現時点で動作していないが今後脆弱性を持ってしまう可能性があるシステムも含めて特定することが可能です。
脆弱性に対する緩和策
影響範囲や緩和策については、Spring Framework RCE, Early Announcementこちらに最新情報がまとめられています。
現時点で判明していることは、影響を受けるお客様には、アプリケーションの要件に応じて Spring Framework バージョン 5.3.18 以降、またはバージョン 5.2.20 以降へのアップグレードが推奨されています。
環境をすぐにバージョンアップできないお客様は、回避策として、@ControllerAdviceを介してdisallowedFieldsonWebDataBinderを設定することなどが挙げられています。ただしこの方法は、抜けが生じる可能性があると記載されており、別の方法についても言及されています。
根本的な脆弱性対策は、アプリケーションをバージョンアップすることと言えます。
まとめ
Javaなどで広く普及しているフレームワークに重大な脆弱性が発覚した場合、公開サーバーや組織内部のサーバー・PC端末において脆弱性が影響しているのか把握する方法が必要となります。まずは組織内の影響範囲の特定を行い、優先度に応じた緩和策の実行が急務となります。
ブログ記事に関してご質問やご要望がございましたらこちらからお問い合わせください。