Springライブラリの新しい脆弱性:危険にさらされているかどうかを知る方法と対処法
先日、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ヘッダによるこのプロパティの設定を許可しないことでこの問題に対処し、脆弱性を軽減しています。いずれのバージョンにもアップグレードした後、追加の手順は必要ありません。
開発者がより安全なコードを書くための支援方法についてもっと知りたいですか?デモをご予約いただくか、セキュアコードコーチで無料のセキュアコーディングガイドラインをご覧ください。
情報源
- https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/
- https://www.rapid7.com/blog/post/2022/03/30/spring4shell-zero-day-vulnerability-in-spring-framework/
先日、Javaコミュニティで最も人気のあるライブラリの1つであるSpringライブラリが、リモートコード実行(RCE)に関する脆弱性2件を公開しました。Spring4Shell」と「Spring Cloud Function」について、既知の内容を整理し、リスクがあるかどうか、リスクがある場合の対処方法について説明します。
Secure Code Warrior は、ソフトウェア開発ライフサイクル全体にわたってコードを保護し、サイバーセキュリティを最優先とする企業文化を創造するために、お客様の組織を支援します。AppSec マネージャー、開発者、CISO、またはセキュリティに関わるすべての人が、安全でないコードに関連するリスクを減らすことができるよう、支援します。
デモを予約する先日、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ヘッダによるこのプロパティの設定を許可しないことでこの問題に対処し、脆弱性を軽減しています。いずれのバージョンにもアップグレードした後、追加の手順は必要ありません。
開発者がより安全なコードを書くための支援方法についてもっと知りたいですか?デモをご予約いただくか、セキュアコードコーチで無料のセキュアコーディングガイドラインをご覧ください。
情報源
- https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/
- https://www.rapid7.com/blog/post/2022/03/30/spring4shell-zero-day-vulnerability-in-spring-framework/
先日、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ヘッダによるこのプロパティの設定を許可しないことでこの問題に対処し、脆弱性を軽減しています。いずれのバージョンにもアップグレードした後、追加の手順は必要ありません。
開発者がより安全なコードを書くための支援方法についてもっと知りたいですか?デモをご予約いただくか、セキュアコードコーチで無料のセキュアコーディングガイドラインをご覧ください。
情報源
- https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/
- https://www.rapid7.com/blog/post/2022/03/30/spring4shell-zero-day-vulnerability-in-spring-framework/
先日、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ヘッダによるこのプロパティの設定を許可しないことでこの問題に対処し、脆弱性を軽減しています。いずれのバージョンにもアップグレードした後、追加の手順は必要ありません。
開発者がより安全なコードを書くための支援方法についてもっと知りたいですか?デモをご予約いただくか、セキュアコードコーチで無料のセキュアコーディングガイドラインをご覧ください。
情報源
- https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/
- https://www.rapid7.com/blog/post/2022/03/30/spring4shell-zero-day-vulnerability-in-spring-framework/