Springライブラリの新しい脆弱性:危険にさらされているかどうかを知る方法と対処法

2022年4月1日発行
チャーリー・エリクセン著
ケーススタディ

Springライブラリの新しい脆弱性:危険にさらされているかどうかを知る方法と対処法

2022年4月1日発行
チャーリー・エリクセン著
リソースを見る
リソースを見る

先日、Javaコミュニティで最も人気のあるライブラリの1つであるSpringライブラリが、リモートコード実行(RCE)に関する2つの脆弱性を公開しました。どちらの脆弱性にも該当するリスクがあるのか、またどのような対処をすればよいのかを理解しやすくするために、"Spring4Shell" と "Spring Cloud Function" について既知の詳細をまとめました。

脆弱性1 - "Spring4Shell" (CVE-2022-22965)

2022年3月29日、コミュニティは、Spring Core (SC) を標的としたエクスプロイトの概念実証のスクリーンショットを含む一連のツイートを発見し、最新リリース版である 5.3.17 を含む Spring Core のすべてのバージョンでリモートコード実行が可能であることを確認しました。

どのようなアプリケーションがリスクにさらされているのか?

現在、Tomcat上でホストされているアプリケーションのみが、この新しいエクスプロイトの危険にさらされていることが確認されています。この悪用は、Embedded Tomcat Servlet Containerやその他のTomcat以外のアプリケーションに対して成功したとは証明されていませんが、将来的にこれらのフレームワークに対して成功する可能性を排除するものではありません。 

Springは、この脆弱性について公式声明を発表し、現時点での理解では、以下の条件を満たすことで脆弱性が発生することを明らかにしました。

  • JDK 9 以上
  • サーブレットコンテナとしてのApache Tomcat
  • 従来のWARとしてパッケージ化(Spring Bootの実行可能なjarとは対照的)。
  • spring-webmvc または spring-webflux の依存関係
  • Spring Framework バージョン 5.3.0 から 5.3.17, 5.2.0 から 5.2.19, およびそれ以前のバージョン

Spring4Shell」の悪用はどのように行われるのですか?

この悪用は、メソッドの署名にPlain Old Java Objects (POJO) を使用するリクエストで「データバインディング」 (org.springframework.web.bind.WebDataBinder) を使用することに依存します。

ここで、FooクラスはPOJOクラスであり、次のように定義できます。実際のクラスは、クラス・ローダーによってロードされる限り、重要ではないことに注意してください。 

このようなメソッドでリクエストが処理される場合、クラス・ローダーがクラスの解決に使用されます。クラスローダーは実行時にクラスをロードする役割を担っており、最初にメモリに可能なすべての型をプリロードする必要がありません。新しいクラスが使用されるときに、どの .jar ファイルをロードすればよいかを判断します。 

この脆弱性についての最新かつ詳細な情報は、Springのブログ記事で直接確認することができます。

脆弱性2 - Spring Cloud 機能 (CVE-2022-22963)

2022年3月27日、サイバーケンドラは、Spring Cloud Functionsに存在するパッチが存在しない0日間のリモートコード実行(RCE)の脆弱性に関する詳細を公開しました。この脆弱性には、ID「CVE-2022-22963」が付与されています。Spring Expression Resource Access Vulnerability」です。

どのようなアプリケーションがリスクにさらされているのか?

この脆弱性は、これらの条件下でアプリケーションに影響を及ぼします。

  • JDK 9 以降
  • Spring Cloud Functionsのバージョン3.1.6以下、3.2.2以下、または未対応のバージョン 

搾取の仕組みは?

Spring Cloud Functionは、開発者がspring.cloud.function.routing-expressionプロパティを通じてルーティングの処理方法を設定する機能を提供する。通常は設定やコードを通じて行われる。これは、"Spring Expression Language" (SpEL)を受け入れる強力な機能です。今回の脆弱性により、このプロパティはリクエストのHTTPヘッダを通じて設定できることが判明しました。つまり、攻撃者はRoutingFunctionエンドポイントへのHTTPリクエストに直接SpELコードを埋め込み、任意のコードを実行することが可能です。 

リスクを軽減するために、ユーザーはどのような手段を取るべきでしょうか?

Springは、バージョン3.1.7および3.2.3をリリースし、HTTPヘッダによるこのプロパティの設定を許可しないことでこの問題に対処し、脆弱性を軽減しています。いずれのバージョンにもアップグレードした後、追加の手順は必要ありません。

開発者がより安全なコードを書くための支援方法についてもっと知りたいですか?デモをご予約いただくか、セキュアコードコーチで無料のセキュアコーディングガイドラインをご覧ください。

情報源

リソースを見る
リソースを見る

著者

Charlie Eriksen

もっと知りたい?

セキュアコーディングに関する最新の知見をブログでご紹介しています。

当社の豊富なリソースライブラリは、安全なコーディングアップスキルに対する人間的なアプローチを強化することを目的としています。

ブログを見る
もっと知りたい?

開発者主導のセキュリティに関する最新の研究成果を入手する

ホワイトペーパーからウェビナーまで、開発者主導のセキュアコーディングを始めるために役立つリソースが満載のリソースライブラリです。今すぐご覧ください。

リソース・ハブ

Springライブラリの新しい脆弱性:危険にさらされているかどうかを知る方法と対処法

2022年4月1日発行
チャーリー・エリクセン著

先日、Javaコミュニティで最も人気のあるライブラリの1つであるSpringライブラリが、リモートコード実行(RCE)に関する2つの脆弱性を公開しました。どちらの脆弱性にも該当するリスクがあるのか、またどのような対処をすればよいのかを理解しやすくするために、"Spring4Shell" と "Spring Cloud Function" について既知の詳細をまとめました。

脆弱性1 - "Spring4Shell" (CVE-2022-22965)

2022年3月29日、コミュニティは、Spring Core (SC) を標的としたエクスプロイトの概念実証のスクリーンショットを含む一連のツイートを発見し、最新リリース版である 5.3.17 を含む Spring Core のすべてのバージョンでリモートコード実行が可能であることを確認しました。

どのようなアプリケーションがリスクにさらされているのか?

現在、Tomcat上でホストされているアプリケーションのみが、この新しいエクスプロイトの危険にさらされていることが確認されています。この悪用は、Embedded Tomcat Servlet Containerやその他のTomcat以外のアプリケーションに対して成功したとは証明されていませんが、将来的にこれらのフレームワークに対して成功する可能性を排除するものではありません。 

Springは、この脆弱性について公式声明を発表し、現時点での理解では、以下の条件を満たすことで脆弱性が発生することを明らかにしました。

  • JDK 9 以上
  • サーブレットコンテナとしてのApache Tomcat
  • 従来のWARとしてパッケージ化(Spring Bootの実行可能なjarとは対照的)。
  • spring-webmvc または spring-webflux の依存関係
  • Spring Framework バージョン 5.3.0 から 5.3.17, 5.2.0 から 5.2.19, およびそれ以前のバージョン

Spring4Shell」の悪用はどのように行われるのですか?

この悪用は、メソッドの署名にPlain Old Java Objects (POJO) を使用するリクエストで「データバインディング」 (org.springframework.web.bind.WebDataBinder) を使用することに依存します。

ここで、FooクラスはPOJOクラスであり、次のように定義できます。実際のクラスは、クラス・ローダーによってロードされる限り、重要ではないことに注意してください。 

このようなメソッドでリクエストが処理される場合、クラス・ローダーがクラスの解決に使用されます。クラスローダーは実行時にクラスをロードする役割を担っており、最初にメモリに可能なすべての型をプリロードする必要がありません。新しいクラスが使用されるときに、どの .jar ファイルをロードすればよいかを判断します。 

この脆弱性についての最新かつ詳細な情報は、Springのブログ記事で直接確認することができます。

脆弱性2 - Spring Cloud 機能 (CVE-2022-22963)

2022年3月27日、サイバーケンドラは、Spring Cloud Functionsに存在するパッチが存在しない0日間のリモートコード実行(RCE)の脆弱性に関する詳細を公開しました。この脆弱性には、ID「CVE-2022-22963」が付与されています。Spring Expression Resource Access Vulnerability」です。

どのようなアプリケーションがリスクにさらされているのか?

この脆弱性は、これらの条件下でアプリケーションに影響を及ぼします。

  • JDK 9 以降
  • Spring Cloud Functionsのバージョン3.1.6以下、3.2.2以下、または未対応のバージョン 

搾取の仕組みは?

Spring Cloud Functionは、開発者がspring.cloud.function.routing-expressionプロパティを通じてルーティングの処理方法を設定する機能を提供する。通常は設定やコードを通じて行われる。これは、"Spring Expression Language" (SpEL)を受け入れる強力な機能です。今回の脆弱性により、このプロパティはリクエストのHTTPヘッダを通じて設定できることが判明しました。つまり、攻撃者はRoutingFunctionエンドポイントへのHTTPリクエストに直接SpELコードを埋め込み、任意のコードを実行することが可能です。 

リスクを軽減するために、ユーザーはどのような手段を取るべきでしょうか?

Springは、バージョン3.1.7および3.2.3をリリースし、HTTPヘッダによるこのプロパティの設定を許可しないことでこの問題に対処し、脆弱性を軽減しています。いずれのバージョンにもアップグレードした後、追加の手順は必要ありません。

開発者がより安全なコードを書くための支援方法についてもっと知りたいですか?デモをご予約いただくか、セキュアコードコーチで無料のセキュアコーディングガイドラインをご覧ください。

情報源

弊社製品や関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

送信
フォームを送信するには、「Analytics」のCookieを有効にしてください。完了したら、再度無効にしてください。