Spring Coreにおける重大な脆弱性: CVE-2022-22965 (別名: Spring4Shell)

By 清水 孝郎 - MARCH 31, 2022

SHARE:

本文の内容は、2022年3月31日にStefano Chiericiが投稿したブログ(https://sysdig.com/blog/cve-2022-22965-spring-core-spring4shell/)を元に日本語に翻訳・再構成した内容となっております。

昨日報告されたSpring cloudの脆弱性に続き、今度は、ポピュラーなJDK9+上のJavaフレームワークSpring CoreSpring4shell CVE-2022-22965という新たな脆弱性が報告されました。

この脆弱性は、常にリモートでコードを実行(RCE)するもので、攻撃者はマシン上で任意のコードを実行し、ホスト全体を危険にさらすことができるようになります。

影響を受けるバージョンは以下の通りです:

  • 5.3.0 から 5.3.17 まで
  • 5.2.0から5.2.19
  • サポートされていない古いバージョンも影響を受けます。
この記事では、CVE-2022-22963CVE-2022-22965 または Spring4Shell という2つの脆弱性の違いを理解・明確化し、それを利用する方法と Sysdig を使用して新しい脆弱性を緩和する方法を説明していきます。

Springで何が起こっているのか

この48時間の間に、SpringとSpring Frameworkに関する多くの喧騒を目にしたかもしれません。何が起こっているのか、少し整理してみましょう。正しいリスクと脆弱性を理解し、それらを緩和するために必要なことです。

CVE-2022-22965 and CVE-2022-22963CVE-2022-22965とCVE-2022-22963

Spring cloudで起きたこと – CVE-2022-22963

昨日お伝えしたように、新しいCVE-2022-22963は特にSpring Cloudを直撃し、ホストまたはコンテナ上で任意のコードの実行を許可します。

この脆弱性は、AWS lambdaやGoogle Cloud Functionsのようなサーバーレス機能にも影響を与える可能性があります。

CVE-2022-22965(別名:Spring4shell)とは?

JDK9+のSpring Coreに新たな脆弱性が発見され、以前log4jやSpring cloudで発生したようなリモートでのコード実行が可能になりました。この脆弱性はSpring4shellとして参照されています。

Spring Frameworkは、Javaアプリケーションを簡単に構築するために使用される有名なオープンソースのフレームワークです。その主要なコンポーネントの1つが、フレームワークの基本部分の1つであるSpring Coreです。この脆弱性は、この部分の問題を利用して、ホストやコンテナ上で任意のコードを実行することができます。

この場合、特定の設定を用いることで、攻撃者が細工したHTTPリクエストを送信し、古いCVEに対するパッチ後に導入された脆弱性を悪用することが可能です。
Spring4shellCVE-2022-22963は、2つの異なるコンポーネントに影響を及ぼす2つの異なる脆弱性であることを強調することが重要です。

CVE-2022-22965のSpring4shellの問題

Spring4shellの問題は、以前、以下のようにdeserialization functionを削除したリモートコード実行に対処するパッチがリリースされた後、実際に生じました。

CVE-2022-22965 Spring framework codeCVE-2022-22965 Springフレームワークのコード

特に、RequestMappingアノテーションとPOJO(Plain Old Java Object)パラメータを使用する関数に脆弱性が存在することが判明しました。RequestMappingは、idのセッターとゲッターを使用して、特定のパラメータの値を設定・取得します。

このため、プロジェクトをコンパイルしてTomcat上でホストすると、Tomcatのロギングプロパティを変更できる特定のcurlコマンドを注入することが可能です。その結果、TomcatのルートディレクトリにWebシェルをアップロードすることが可能になります。

一旦アップロードされると、攻撃者は、影響を受けるマシン上で任意のコマンドを実行することができます。詳細については、こちらのPoCをご覧ください: https://github.com/craig/SpringCore0day.

本脆弱性を悪用するためには、以下の要件を満たす必要があります
  • JDK 9 またはそれ以上
  • サーブレットコンテナとしてApache Tomcat
  • WARとしてパッケージ化
  • spring-webmvcまたはspring-webfluxの依存関係

CVE-2022-22965 Spring4shellの影響について

CVSSv3方式によると、深刻度はCRITICALと評価されます。

CVE-2022-22965 NVD Severity scoreCVE-2022-22965 NVD 深刻度スコア

このタイプの脆弱性の潜在的な影響を見ると、機密性、整合性、可用性に高い影響があり、先に見たように悪用が容易なため、このソリューションを採用するすべてのユーザーにとって本当に重要なものとなっています。

しかし、これまで見てきたように、この脆弱性の悪用を成功させるためには、いくつかの要件を満たす必要があります。

この脆弱性を悪用することで、ホストやコンテナを完全に危険にさらすことができ、任意のコマンドを実行することができます。

CVE-2022-22965 の検出と緩和方法

CVE-2022-22965 の影響を受ける場合、アプリケーションを以下のバージョンにアップデートする必要があります。
  • 5.3.18+
  • 5.2.20+
前回のCVE-2022-22963で見たように、この脆弱性はアプリケーションライフサイクルの3つの異なるフェーズで検出することができます。
  • ビルドプロセス:イメージスキャナーを使用する。
  • デプロイメントプロセス:アドミッションコントローラー上のイメージスキャナーを使用する。
  • ランタイム検出エンジンを使用したランタイム検出フェーズ:すでにデプロイされたホストやポッドから悪意のある動作を検出する。
Sysdigスキャンを利用することで、脆弱性のあるパッケージを検出することが可能です。

CVE-2022-22965 Sysdig ScannerCVE-2022-22965 Sysdig スキャナー

まとめ

今週は、Log4jで起こったように、私たちはいつでも簡単に脆弱性を持つことができるということを再認識させられました。今回は、より具体的に、再びJavaに影響を与えています。

  • CVE-2022-22963: Spring Cloud Function
  • CVE-2022-22965: Spring Framework

安全のために、スキャナーで影響を受けているかどうかを確認し、最新バージョンのパッチを適用して脆弱性を軽減してください。同様に、必要な手段を用いてデプロイメントがすべて正しいことを確認し、インフラストラクチャーやアプリケーションの実行時の監視を決して止めないようにしてください。

重要な変更があった場合は、ブログで随時お知らせします。