如何解决Spring RCE漏洞(CVE-2022-22965)?

How to resolve Spring RCE vulnerability(CVE-2022-22965)?

更新

此问题现已分配给 CVE-2022-22965. Other than below nice answers, please do check Spring Framework RCE: Early Announcement,因为它是解决此问题的最可靠和最新的站点。


根据不同的来源,我们似乎在使用 Spring 核心库时遇到了严重的安全问题。

引用上面 link,如果出现以下情况,我们将面临风险:

link 提出了一些解决方案,但 implement/reliable 似乎并不容易。 我们应该如何以最简单和最可靠的方式解决此问题?

根据 Spring Framework RCE: Early Announcement,升级到 Spring Framework 5.3.18 或 5.2.20 将修复 RCE。

如果您使用 Spring 启动,Spring Boot 2.5.12 and Spring Boot 2.6.6 修复漏洞。

如果您无法更新:

您可以选择只升级Tomcat。 The Apache Tomcat team has released versions 10.0.20, 9.0.62, and 8.5.78 all of which close the attack vector on Tomcat’s side.

如果您无法执行上述任一操作,RCE announcement blog post 建议采用一种解决方法:通过 @ControllerAdviceWebDataBinder 上设置 disallowedFields :

@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);
    }

}

如果控制器通过其自己的 @InitBinder 方法在本地设置 disallowedFields(覆盖全局设置),则此快速修复将不起作用。此外,更一般地说,如果您使用替代 REST 框架(例如 Jersey),解决方法将不会产生影响(但是,尚未证明此类配置会受到影响)。

Note:Spring 稍后需要升级,因为 Tomcat

中没有漏洞

临时解决方法是升级 tomcat 到 10.0.20、9.0.62 和 8.5.78

Spring Reference