
SpringはSpring FrameworkにおけるRCEを確認しました。チームは本件に関する声明と緩和策ガイドを発表したところです。この脆弱性はCVE-2022-22965として追跡できます。
Spring は Spring Framework における RCE を確認しました。チームはちょうどこの問題に関する声明と緩和ガイドを公開しました。この脆弱性は CVE-2022-22965 として追跡できます。
Spring4Shell の脆弱性に関するいくつかの情報と、その詳細は「Spring4Shell: Details and Exploit」の投稿で共有されています。さらに、Praetorian のセキュリティチームは、CVE-2010-1622 に対するバイパスのため、JDK9+ 上の Spring Core がリモートコード実行に対して脆弱であることを確認しました。
当初、この脆弱性の最初の通知は 3 月 30 日に KnownSec 404 チームのリーダーである Heige によって示唆されました。彼は警告メッセージ「Spring core RCE (JDK >=9」と PoC 画像をツイートしました。

私たちがこの脆弱性の記事を公開すると、Heige は Twitter から姿を消しました。理由は不明ですが、何か事情があるかもしれません。
2021 年末、Apache Log4j2 におけるゼロデイのリモートコード実行脆弱性、別名 Log4Shell の公開により、インターネットは騒然としました。この脆弱性は Alibaba Cloud のセキュリティチームによって発見されました。
今日、研究者たちは深刻な被害をもたらす可能性のあるもう 1 つの重大な脆弱性を発見しました。このバグは CVE-2022-22965 として追跡されており、Spring4Shell と呼ぶこともあります。この脆弱性は、JDK バージョン 9.0 以上の Spring Core に存在します。
Spring Framework および派生フレームワークの spring -beans-*.jar ファイル、または CachedIntrospectionResults.class
以下の詳細はすべて現在確認済みです。生じたいかなる損害についても責任を負いません。
世界で最も人気のある Java 軽量オープンソースフレームワークの 1 つとして、Spring は開発者がビジネスロジックに集中できるようにし、Java エンタープライズアプリケーションの開発サイクルを簡素化します。
悪用には、DataBinder が有効なエンドポイント(例: リクエストボディからデータを自動的にデコードする POST リクエスト)が必要であり、アプリケーションのサーブレットコンテナに大きく依存します。例えば、Spring が Apache Tomcat にデプロイされている場合、WebAppClassLoader にアクセスできるため、攻撃者は getter と setter を呼び出して、最終的に悪意のある JSP ファイルをディスクに書き込むことができます。ただし、Spring が組み込み Tomcat サーブレットコンテナを使用してデプロイされている場合、クラスローダーは LaunchedURLClassLoader であり、アクセスが制限されます。
しかし、JDK9 以降の Spring Framework では、リモートの攻撃者は、特定の条件を満たすことを前提として、フレームワークのパラメータバインディング機能を通じて AccessLogValve オブジェクトと悪意のあるフィールド値を取得できます。
組織システムの稼働中のサーバーで "java -version" コマンドを実行し、実行中の JDK バージョンを確認してください。バージョン番号が 8 以下の場合、この脆弱性の影響を受けません。
上記の 2 つのトラブルシューティング手順を完了した後、次の 2 つの条件が同時に満たされる場合、この脆弱性の影響を受けると判断します:
現在、Spring チームはこの脆弱性を修正し、Spring Framework 5.3.18 に依存する Spring Boot 2.6.6 および 2.5.12 の最新バージョンをリリースしました。
WAF などのネットワーク保護デバイスでは、デプロイされたサービスの実際のトラフィック状況に応じて、"class."、"Class."、".class."、".Class." などの文字列に対するルールフィルタリングを実装します。ルールフィルタリングの後、業務運用をテストして追加の影響を回避してください。
この脆弱性の一時的な修復は、次の 2 つの手順を同時に実行する必要があります:
アプリケーション内で @InitBinder アノテーションをグローバルに検索し、メソッド本体で dataBinder.setDisallowedFields メソッドが呼び出されているかどうかを確認します。このコードスニペットの導入が見つかった場合は、{"class.","Class. to the original blacklist ",".class.", ".Class."} を追加します。(注: このコードスニペットが頻繁に使用されている場合は、すべての場所に追加する必要があります)
アプリケーションシステムのプロジェクトパッケージ内に次のグローバルクラスを作成し、このクラスが Spring によってロードされることを確認します(Controller があるパッケージに追加することを推奨します)。クラスを追加した後、プロジェクトを再コンパイルしてパッケージ化し、機能検証のためにテストして、プロジェクトを再公開する必要があります。 import org.springframework.core.annotation.Order;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
@ControllerAdvice
@Order(10000)
public class GlobalControllerAdvice{
@InitBinder
public void setAllowedFields(webdataBinder dataBinder){
String[]abd=new string[]{"class.*","Class.*","*.class.*","*.Class.*"};
dataBinder.setDisallowedFields(abd);
}
}

Spring プロジェクトの Git リポジトリ を見ると、Spring 開発者はこのリモートコード実行脆弱性の修正に取り組んでいるようです。ただし、公式の確認を待つ必要があります。