RHSB-2022-003 Spring リモートコード実行 - (CVE-2022-22963、CVE-2022-22965)
この情報は役に立ちましたか?
エグゼクティブサマリー
Red Hat Product Security は、Spring Framework の Spring MVC (CVE-2022-22965) および Spring Cloud (CVE-2022-22963) コンポーネントに影響する 2 つの脆弱性を認識しています。リモートコード実行やこの脆弱性の悪用の報告につながる可能性がある概念攻撃について公開されています。
Red Hat 製品セキュリティーは、重大な影響 として CVE-2022-22963 (Spring Cloud)をチューニングしました。Spring MVC の不具合 CVE-2022-22965 はリファインダーによって Spring4Shell のままになり、重要な影響という重大度が引き上げられました。
以下の Red Hat 製品バージョンに影響があります。「影響を受ける」とは、製品のコードに脆弱性が存在することを意味します。製品に脆弱性がある場合に対処することができる使用方法や緩和策に関係なく、脆弱性が存在することを意味します。
Spring Cloud (CVE-2022-22963)
この CVE の影響を受ける製品はありません。
Spring MVC (CVE-2022-22965)
Red Hat Decision Manager 7
Red Hat Process Automation Manager 7
Red Hat Enterprise Virtualization 4
Red Hat AMQ Messaging 6.3
Red Hat AMQ Messaging 7
Red Hat Fuse 6
Red Hat Fuse 7
テクニカルサマリー
CVE-2022-22965 の不具合は、Spring Framework の 2 つのモジュール (Spring MVC および Spring WebFlux) にあります。攻撃者は特別に作り込まれた悪意のあるリクエストを特定のパラメーターに渡すことができ、通常はアクセスが制限される Java 仮想マシン内の機能にアクセスできる可能性があります。
Spring では、更新修正 (Spring Framework 5.2.20 & 5.3.18) が提供されました。詳細は、Spring.io の早期発表投稿に記載されています。CVE アドバイザリーでは、この脆弱性は「一般的」であり、悪用する方法は他にもあります。
Red Hat Product Security は、影響を受けるソフトウェアを使用して、できるだけ早く最新バージョンにアップグレードすることを推奨しています。
CVE-2022-22963 の不具合が Spring Cloud 関数で発見されました。これにより、攻撃者は無効な HTTP ヘッダー spring.cloud.function.routing-expression
を使用して悪意のあるコードをサーバーに渡すことができます。式言語コードのペイロードにより、Cloud Function サービスが任意の実行できるようになります。Spring は Spring Cloud Function、3.1.7、および 3.2.3 の修正をリリースしました。
パッチが適用されたソフトウェアが利用可能になり次第、影響を受けるお客様はすぐに更新を行う必要があります。
軽減策
CVE-2022-22965 に関して、Red Hat Product Security チームは、更新が利用可能になった時点で影響を受ける製品を更新することを強く推奨しています。直ちに更新できないお客様は、以下の手段でリスクと脆弱性を減らすことができます。
OpenJDK 8 以下を使用します。
WAR ファイルの代わりに、Spring を実行可能な jar としてデプロイします。
spring-webmvc
またはspring-webflux
依存関係を削除します。
CVE-2022-22963 については、他の軽減策の手順は現在利用できないため、パッチが適用されたソフトウェアが利用可能になり次第、影響を受けるお客様はすぐに更新する必要があります。
技術情報
Spring MVC および Spring WebFlux の CVE-2022-22965 の不具合は、パラメーターデータバインディングを使用します。これは、アプリケーションが使用できるオブジェクトに要求データをマッピングする方法です。
この不具合の報告者は、Apache Tomcat に基づく概念実証を提供しました。クラスローダーにアクセスしてロギングプロパティーを変更し、Tomcat のルートディレクトリーに Web シェルを配置し、その後さまざまなコマンドを呼び出すことができました。
公開した Concept でこの不正使用を実現するには、いくつかの条件が必要です。
Java 9 以降のバージョン
サーブレットコンテナーとしての Apache Tomcat
WAR ファイルとしてパッケージングされている
spring-webmvc
またはspring-webflux
依存関係悪意のあるデータバインディングに対する保護がない (例:
WebDataBinder
許可リスト)
Tomcat の代替の使用を含め、これ以外の不正使用パスが存在する可能性があります。
CVE-2022-22963 の不具合は、Spring Cloud Function において、攻撃者により悪意のある式言語コードが含まれるように変更された spring.cloud.function.routing-expression
ヘッダーを利用から発生しました。攻撃者は、ランタイム実行呼び出しなど、通常はアクセスできないはずの関数を呼び出すことができます。
影響を受ける製品の更新
影響のあるバージョンの Red Hat 製品をご使用のお客様は、エラータが入手可能になり次第、該当製品を更新することが強く推奨されます。
利用可能な更新を早急に適用し、適切であると思われる軽減策を有効にしてください。
製品 | コンポーネント | アドバイザリー/更新[1] |
Red Hat Decision Manager 7 | spring-webmvc | 保留中 |
Red Hat Process Automation Manager 7 | spring-webmvc | 保留中 |
Red Hat AMQ Messaging 6.3 | spring-webmvc | 修正の計画なし |
Red Hat AMQ Messaging 7 | spring-webmvc | 保留中 |
Red Hat Fuse 6 | spring-webmvc | 修正の計画なし |
Red Hat Fuse 7 | spring-webmvc | 保留中 |
Red Hat Enterprise Virtualization 4 | rhvm-dependencies | 修正の計画なし |
[1] 更新が公開されると、アドバイザリー/更新リンクが追加されます。
診断
以下の脆弱性検出スクリプトを使用すると、現在ご使用のシステムにこの不具合による影響が存在するかどうかを判断できます。正規のスクリプトであることを確認する場合は、OpenPGP 分離署名 もダウンロードします。検証に GPG 署名を使用する方法 の説明は、カスタマーポータルで確認できます。
Ansible Playbook
さらに、Ansible Playbook は、検出スクリプトを多くのホストで一度に実行するために利用できます。Playbook には、操作を制御する 追加の vars ファイル が必要です。Playbook と その vars ファイル では、デタッチされた GPG 署名が利用できます。Playbook およびその関連付けられた vars ファイルをダウンロードしたら、vars ファイルを編集してご自分の環境に合わせて調整します。
以下を指定する必要があります。
detector_path: 検出スクリプトが脆弱なアーカイブについてスキャンするパス。
detector_dir: Playbook は検出スクリプトをリモートホストのこのディレクトリーにコピーします。
detector_run_dir: 検出スクリプトが一時ストレージに使用するパス。
Playbook を実行するには、コマンドラインで 2 つの追加変数を指定する必要があります。
HOSTS: Ansible インベントリーで定義されているように、スキャンするホストまたはグループ。
vars_file: vars ファイルへのパス。
以下に例を示します。
# ansible-playbook -e HOSTS=all -e vars_file=cve-2022-22963-vars.yml cve-2022-22963-script-runner.yml
よくある質問
Q: アプリケーションサーバーは重要ですか?報告は Tomcat を強調しています。Wildfly/Jboss とは、異なる状況でしょうか?
A: Spring ドキュメントでは参照されている他の公式の PoC 不正使用はありません。ただし、いくつかのユーザーが唯一の不正使用パスではないことを指摘しています。そのため、他のアプリケーションサーバーが脆弱であると思われるわけではありませんが、100% で信用できるとは言えません。
フラットなクラスパス (デプロイメントごとのクラスローダなし) でも、Spring Beans 5.3.17以前からの脆弱なバインディング機構を使って、少なくとも java.lang.ClassLoader#defaultAssertionStatus
フラグを設定することは可能です。Wildfly、JBoss EAP、Tomcat などには脆弱なコードが含まれていない場合がありますが、Red Hat は、CVE を解決するために Spring Beans をパッケージ化するアプリケーションを更新することを推奨します。
Q: Red Hat 製品 (RHEL など) を使用していますが、このページと CVE ページにリストされていません。影響を受けるでしょうか?
A: 本書に記載されておらず、「Affected」とマークされた CVE Pages に記載されていない場合は、製品がこれらの CVE の影響を受けません。
Q: 「Affected」と「Vulnerable」の違いは何ですか?
A: Affected (影響あり) は、不具合のあるコードが製品に存在することを意味します。Vulunerable 脆弱なとは、実際には製品で悪用可能であることを意味します。「影響はあるが脆弱ではない」という状況は十分に考えられます。これは、機能が無効、非公開、移行済みであるときに発生します。
参考資料
https://tanzu.vmware.com/security/cve-2022-22963
https://tanzu.vmware.com/security/cve-2022-22965
https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement
https://www.rapid7.com/blog/post/2022/03/30/spring4shell-zero-day-vulnerability-in-spring-framework/
https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/
GPG を使用して Product Security の署名済みコンテンツを検証する
Comments