当前位置: 首页 > 知识库问答 >
问题:

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

花健
2023-03-14

该版本现已分配给CVE-2022-22965。除了下面的好答案之外,请查看Spring Framework RCE:早期发布,因为它是本期最可靠和最新的网站。

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

  • https://securityboulevard.com/2022/03/new-html" target="_blank">spring4shell-zero-day-vulnerability-confirmed-what-it-is-and-how-to-be-prepared/

引用以上链接,我们有风险,如果:

  • 您使用Spring应用程序(直到并包括版本5.3.17)您的应用程序运行在Java9
  • 您使用名称=值对的表单绑定-不使用Spring更流行的JSON/XML消息转换
  • 您不使用允许列表-OR-您没有阻止类、模块、类加载器等字段的拒绝列表

该链接建议了一些解决方案,但似乎不容易实现/可靠。我们应该怎么做才能以最简单、最可靠的方式解决这个问题?

共有2个答案

沈单弓
2023-03-14

注意:由于Tomcat中不存在漏洞,因此以后需要进行Spring升级

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

Spring参考

谭玉泽
2023-03-14

根据Spring Framework RCE:早期公告,升级到Spring Framework 5.3.18或5.2.20将修复RCE。

如果使用Spring Boot,Spring Boot 2.5.12和Spring Boot 2.6.6会修复该漏洞。

如果您无法更新:

您可以选择只升级Tomcat。Apache Tomcat团队发布了10.0.20, 9.0.62和8.5.78版本,所有这些版本都关闭了Tomcat方面的攻击向量。

如果您无法执行上述任何操作,RCE公告博客文章建议了一种解决方法:通过ControllerAdvice在WebDataBinder上设置禁用字段:

@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,解决方法将不会产生效果(但是,尚未证明此类配置会受到影响)。

 类似资料:
  • 我对CVE-2022-22950和相应的Spring建议有点困惑。后者表示,可以通过以下方式利用该漏洞: […]巧尽心思构建的SpEL表达式[…] 但是,允许用户制作SpEL表达式的应用程序允许这些用户做几乎任何事情。包括代码注入,它对机密性、完整性和可用性有充分的影响。这里还有很多其他DoS机会。以这个SpEL片段为例,它执行命令: 这个命令是相当无害的,但它可以被任何东西替代!现在,SpEL支

  • 我目前的项目完全与大量Spring Boot容器对接。它们中的大多数都是使用log4j2(对于java8,小于2.7)版本构建的。如何充分证明来自JNDI攻击CVE-2021-45105的应用程序? 我知道最好的解决方案是用log4j版本重建这些容器,但这需要时间和预算。 但是,如果我使用下面的命令,在docker compose级别为每个容器禁用查找功能,它能工作吗? “JVM_EXTRA_OP

  • 我正在做一个Spring Boot项目,我正在检查它是否与这个漏洞有关,我没有任何Log4j核心依赖,但是我正在使用Hibernate核心5.0.12,它使用jboss日志3.3.1 当我检查jboss日志依赖时,我看到log4j: 先谢谢你

  • 描述中说: 在2020-11-10之前的Rust模型箱中发现了一个问题。共享数据结构具有发送和同步特征的实现,而不考虑内部类型。 什么是模型板条箱?抱歉,如果它的愚蠢的问题,但我是新的CVE漏洞。

  • Undertow在pom上不可用,因为它是另一个依赖项的子项(spring-boot-starter-undertow,已更新到2.3.3版本的最新版本)。有没有一种方法,我可以使Spring启动有一个特定的版本下拖?

  • Weblogic版本12.1.3.0.0和JDK 1.8.0_101-B13中的NodeManager服务存在以下漏洞 有什么意见/建议吗?