Spring Java Framework のゼロデイ脆弱性 CVE-2022-22963:RCE 防御のための緩和策

New Spring Java framework zero-day allows remote code execution

2022/03/30 BleepingComputer — Framework Spring Core の新たなゼロデイ脆弱性 Spring4Shell が公開され、それを利用するアプリケーション上で、未認証のリモートコード実行が可能になることが明らかにされた。Spring は、エンタープライズ・レベルの機能を持つ Java アプリケーションを、迅速かつ容易に開発できるようにするため、ソフトウェア開発者にとって極めて人気の高いアプリケーション・フレームワークである。それらのアプリケーションは、必要な依存関係をすべて備えたスタンドアロン・パッケージとして、Apache Tomcat などのサーバーにディプロイできる。

昨日に、Spring Cloud Function に存在する脆弱性 CVE-2022-22963 が公開され、まもなく Proof-of-Concept の悪用が行われるという可能性が生じている。しかし、その後に、より深刻な Spring Core のリモートコード実行の脆弱性に関する情報が、QQ チャットサービスや中国のサイバー・セキュリティ・サイトに出回った。今日、このゼロデイ脆弱性の PoC エクスプロイトが一時的に流出し、その後に削除されたが、サイバー・セキュリティ研究者がコードをダウンロードした後のことである。その後に、多数のセキュリティ研究者やセキュリティ企業が、この脆弱性が有効であり、重大な懸念があることを確認している。

Jang twee
Alvaro tweet

この、新しい Spring RCE の脆弱性は Spring4Shell と呼ばれており、受け渡された引数の不完全なデシリアライゼーションが、その原因だとされている。

当初は、Java 9 以降で動作する、すべての Spring アプリに影響すると思われていたが、その後、Spring アプリが脆弱であるための特定の要件が存在することが判明した。CERT/CC の脆弱性アナリストである Will Dormann は、「アプリが Spring Beans を使用し、Spring Parameter Binding を使用し、POJO などの非基本パラメータ・タイプを使用するかたちで、Spring Parameter Binding がコンフィグレーションされていることが必要だ」と述べている。

サイバー・セキュリティ企業の Praetorianも、このバグが悪用されるためには、特定のコンフィグレーションに依存していることを確認している。Praetorian は、「このエクスプロイトには、DataBinder が有効なエンド・ポイント (リクエストボディからデータを自動的にデコードする POST リクエストなど) が必要であり、アプリケーションのサーブレット・コンテナに大きく依存する 」とブログ記事で説明している。

同社は、「たとえば、Spring を Apache Tomcat に展開した場合、WebAppClassLoader にアクセスできるため、攻撃者は Getter と Setter を呼び出し、最終的に悪意の JSP ファイルをディスクに書き込む。しかし、Spring が Embedded Tomcat Servlet Container を使ってディプロイされた場合には、クラスローダーはアクセスが制限された LaunchedURLClassLoader となる。特定のコンフィグレーションでは、攻撃者が脆弱なシステムに対して、細工した POST リクエストを送信するだけで、この脆弱性を簡単に悪用できる。しかし、別のコンフィグレーションで悪用するときには、攻撃者が有効なペイロードを見つけるために追加の調査を行う必要がある」と付け加えている。

一連の要件に応じて、ターゲット規模が制限されるかもしれないが、BleepingComputer は複数の情報源から、脆弱性 Spring4Shell が積極的に悪用されていることを聞いている。

Colin tweet

Praetorian のブログ記事では、特定のパターンを Spring Core DataBinder 機能に渡さないようにすることで、Spring4Shell 攻撃を部分的に緩和する方法が紹介されている。この脆弱性に対して、現時点ではパッチが提供されていないため、Spring アプリケーションを使用している管理者は、加納な限り早急に緩和策を導入することが強く推奨される。

これは新しい Log4Shell なのだろうか?

Spring は、Java アプリケーションのための極めて一般的なアプリケーション・フレームワークであり、脅威者が脆弱なアプリケーションをスキャンすることで、広範な攻撃につながるという、深刻な懸念を持っている。

脆弱性のあるアプリに HTTP POST でアクセスするだけで悪用が可能なため、驚異アクターはインターネットをスキャンし、脆弱性のあるサーバーを自動的に攻撃するスクリプトを作成できる。

脅威アクターは、これらのエクスプロイトを利用してサーバー上でコマンドを実行し、デバイスへのフル・リモート・アクセスを可能にできる。この攻撃シナリオは、2021年12月に発生した、Log4Shell エクスプロイトを使用した Log4j サーバーの大量搾取による、マルウェアやランサムウェアの攻撃を彷彿とさせる。

このバグの悪用には要件が存在するため、どれだけのアプリケーションが、脆弱性を抱えているのかを判断するのは時期尚早である。このシナリオの実現を防ぐために管理者は、自身のアプリケーションが脆弱であると思われる場合、可能な限り早急に Praetorian が提供する緩和策の適用が強く推奨される。

更新 3/30/22 4:45 PM EST: 複数の情報源から、この脆弱性を悪用した攻撃が活発に行われていることが報告されている。

更新 3/30/22 09:21 PM EST: この脆弱性の悪用に必要な条件を追加した。

何やら Log4Shell の再来かと思わせる、ちょっと嫌な予感がしますね。この第一報の時点では、悪用に関する条件はあっても、すでに悪用が検知されているという状況です。Log4j のように深い階層に入り込んでいるのか? Log4j のように広範囲で利用されているのか? そのあたりが、これから明らかになってくるはずです。続報が出てくると思いますので、その都度、掲載していきたいと思います。