2022年3月末~4月に掛けて話題となっていた、Spring4Shellについての対応まとめをしたいと思います。
セキュリティ的なITトピックは今後も定期的に投稿・・・できたらいいなと思ってます。
https://aoilo.blue/log4j2/ (前回投稿のLog4j2に関してはこちら)
Spring4Shell問題って?
Springは、Javaのアプリ開発に用いられる人気があるフレームワークです。
JPCERT/CCでは、3月31日に注意喚起が公開されました。(CVE-2022-22965)
https://www.jpcert.or.jp/newsflash/2022040101.html
今回はVMware社がRCEについて報告しているようで、今回の問題も影響としては、
「対策していないと、リモートで任意のコードが実施される」です。
影響の深刻度を示すCVSSは9.8 / 10.0を叩き出しているため、かなり重要度が高い脆弱性です。
利用しているユーザーが多いのも一因だと思われます。
参考:springのアナウンス
https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement
対象の環境
対象となる環境は「Spring Framework 5.3.0~5.3.17」「Spring Framework 5.2.0~5.2.19」およびサポート終了のレガシーバージョンです。
また、VMware社の報告では、以下の条件が必要みたいです。
- JDK 9以上を使用している
- Apache Tomcatをサーブレットコンテナとして使用している
- WAR形式でデプロイされている
- プログラムがspring-webmvcあるいはspring-webfluxに依存している
特にTomcatについて、特定のバージョン(10.0.19, 9.0.61, 8.5.78)以前は脆弱であることも報告されているため、これらは以降のバージョンにアップデートすることをお勧めします。
対応策
Springの公式ページでは、回避策として3つ紹介されています。
- Tomcatのアップグレード (10.0.20, 9.0.62, 8.5.78 以降)
これはSpring Frameworkを何らかの理由でアップデートできない企業・団体向けの案内なので、できればSpringも一緒に上げたほうがいいとのこと。
- Java8へのダウングレード
Springも、Tomcatもアップデートができない場合は、Java8へのダウングレードを検討してほしいとのこと。現状の攻撃シナリオではJava9以降で確認されているためだと思われます。
- 特定フィールドへのバインドを無効化
これはSpring公式のコードをそのまま転記する形となりますが、グローバルに以下コードを記述することで回避が可能なようです。
@ControllerAdvice
@Order(Ordered.LOWEST_PRECEDENCE)
public class BinderControllerAdvice {
@InitBinder
public void setAllowedFields(WebDataBinder dataBinder) {
String[] denylist = new String[]{"class.*", "Class.*", "*.class.*", "*.Class.*"};
dataBinder.setDisallowedFields(denylist);
}
}
上記で紹介した方法は暫定的なものなので、近い将来ではSpring Frameworkのアップデートを検討してください。
総括
SpringShellは、利用者が多いSpring Frameworkの深刻な脆弱性でした。
ただ、発表からパッチリリースまでの期間がかなり短かったので、すぐに対応できた企業も多かったのかなと思います。
WEB開発系の企業さんなどは採用している率がかなり高いと思いますので、これに柔軟に対応できたかどうかは問われるかなと個人的には思います。
もし、対応が遅れてしまったなどあれば、開発体制の見直しが必要かもしれません。。
参考:主な製品の対応状況
VMware
CVE-2022-22963: Remote code execution in Spring Cloud Function by malicious Spring Expression
https://tanzu.vmware.com/security/cve-2022-22963
VMSA-2022-0010.5
https://www.vmware.com/security/advisories/VMSA-2022-0010.html
RedHat
https://access.redhat.com/security/cve/CVE-2022-22963
PaloAlto
SpringShellおよび最近のSpringの脆弱性CVE-2022-22963、CVE-2022-22965に対するPrisma Cloudによる緩和策
https://www.paloaltonetworks.com/blog/prisma-cloud/recent-spring-vulnerabilities/?lang=ja
コメントを残す