
Spring4Shell の脆弱性 RCE - CVE-2022-22965
spring4shellの脆弱性は、2022年初頭に攻撃者によって発見され広く悪用された2つの脆弱性にちなんでこのように命名されました。これらの脆弱性の1つは「Spring Cloud Functions」と呼ばれるフレームワークコンポーネント(重要度は低い)に存在し、2つ目でより重要度が高いコンポーネントは、フレームワークの中心である「Spring Core」に存在します。この2つの重大な脆弱性により、2021年に開示されたLog4shellと呼ばれる別の重大な脆弱性に関連付けるジョークがコミュニティで生まれました。
Spring MVCの機能の1つに、エンドポイントに送信されたパラメータに基づいてリクエストが行われたときに、指定されたクラスのオブジェクトを自動的にインスタンス化して値を設定するというものがあります。簡単に言うと、これは親クラスの重要な属性を上書きするために悪用される可能性があり、結果としてリモートコード実行につながります。Spring4Shellの脆弱性のエクスプロイトの大部分は、アプリケーションに悪意のある.jspファイルをWebサーバーに書き込ませることで動作します。このウェブシェルは、ターゲット上でリモートコマンド実行を得るために実行されます。
この悪用が発生するためには、環境をこのjspファイルの取り込みに対して脆弱にする一連の要因が揃っている必要があります。それらは以下のとおりです。
spring-webmvcおよび/またはspring-webfluxコンポーネントへの依存関係。この調査では、この同じリポジトリに添付されているpoc.pyという既に作成済みのスクリプトを使用します。
[!note]
このpoc用のスクリプト(poc.py)はこの同じリポジトリにあります。上記で確認してください。
利用可能な場合は常にスクリプトのヘルプを使用してください。理解がより明確になります。
この攻撃では、ファイルをサーバーに送信するためにhttp postメソッドが必要です。 攻撃対象として実行しているサーバーには、ページのview-sourceで見つけることができるPOSTがあります。
これは、通知用のメールアドレスが登録されるシンプルなページです。
view-sourceで、このフォームのPOSTが/に対するactionを持っていることを確認しました。
スクリプトを使用してこのWebサーバーを調査しましょう。攻撃はPOSTアクション、この場合はルート/に対して実行する必要があることに注意してください。
ウェブシェルが正常に送信されました! スクリプトによって生成されたリンクにアクセスして、調査が成功したことを確認しましょう。
完了です! ウェブシェルをWebサーバーに送信することで、脆弱性を悪用することができました。
Spring4Shellを修正するには、マイナーリリース5.3のパッチ18以降(つまり5.3.18以降)にリリースされたSpringのバージョンを使用していること、またはマイナーリリース5.2を使用している場合はパッチ20以降(つまり5.2.20以降)を使用していることを確認してください。フレームワークのバージョンをアップグレードするだけで、アプリケーションから脆弱性を除去するのに十分です。