一、事件概况
3月29日深夜,Spring Framework被曝出存在了十多年的rce远程漏洞,cve编号CVE-2022-22965。在3月1日曝出spring cloud的rce漏洞(CVE-2022-22947)之后,spring再次被报道了范围更广的rce 0day漏洞。
完整的漏洞复现过程与分析报告已在网站上公开。Spring官方现已推出紧急修复版本,现在可以从Maven Central获得。
有关漏洞的最新情况可以通过官方漏洞报告网址跟踪
l CVE-2022-22965:https://tanzu.vmware.com/security/cve-2022-22965
l CVE-2022-22947:https://tanzu.vmware.com/security/cve-2022-22947
二、受到影响的用户
以下是受到漏洞攻击的要求:
l JDK 9 或更高版本
l Apache Tomcat 作为 Servlet 容器
l 打包为传统的 WAR包
l 添加了spring-web mvc或spring-web flux依赖
l Spring Framework 版本 5.3.0 到 5.3.17、5.2.0 到 5.2.19 以及更早的版本
但是,该漏洞的性质更为普遍,可能还有其他尚未报告的利用方法。
三、事件进展
3月29日
该问题首先由 AntGroup FG 的 codeplutos, meizjm3i 于格林威治标准时间接近午夜时分向 VMware 报告。
3月30日
Spring官方进行了调查、分析、确定修复、测试,同时计划于周四发布紧急修复版本。同时,该漏洞的详细信息已在网上全面泄露。
3月31日
[10:59 GMT] Spring Framework 版本5.3.18和5.2.20已推出,可解决该漏洞。Spring Boot 的发布过程正在进行中。
[11:11 GMT]官方漏洞公告网页添加了disallowedFields修复配置。
[11:34 GMT]官方漏洞公告网页添加了“Am I Impacted”部分。
[12:03 GMT]官方漏洞公告网页添加了“Misconceptions”部分。
[13:00 GMT] CVE-2022-22965已发布。
[13:38 GMT] Spring Boot 2.5.12可用。
[14:40 GMT] Spring Boot 2.6.6可用。
四、建议的解决方法
如果项目能够升级到 Spring Framework 5.3.18或者5.2.20,SpringBoot2.5.12或者2.6.6,直接升级即可修复漏洞。
五、临时解决方法
如果项目java的版本能够降级到jdk8,可以避免该漏洞。
漏洞报告建议用WebDateBinder配置DisallowedFields,通过以下方式添加@ControllerAdvice注解来临时修复:
这通常有效,但作为集中应用的修复解决方法,仍然可能会留下一些漏洞。特别是如果控制器disallowedFields通过自己的方法在本地@InitBinder设置,这样会覆盖全局设置。
官方建议,为了以更安全的方式应用解决方法,应用程序可以扩展RequestMappingHandlerAdapter,以在所有其他初始化完成后最后更新WebDataBinder。为此,Spring Boot 应用程序可以声明一个WebMvcRegistrationsbean (Spring MVC) 或一个WebFluxRegistrationsbean (Spring WebFlux)。
例如在 Spring MVC 中(在 WebFlux 中类似):
六、误解
关于该漏洞有一些错误的猜测与弃用SerializationUtils有关。此类在框架内只有一种用途,并且不暴露于外部输入。弃用此类与该漏洞无关。
该漏洞与之前发布的 Spring Cloud Function漏洞存在混淆。这两者也是无关的。
希望广大开发者能尽快修复该漏洞,漏洞信息与复现过程、复现工具已在网上公开,如果系统存在该漏洞的应用场景又没有及时修复,将会承受很大风险。