Spring库的新漏洞:如何知道你是否有风险以及如何应对

发布日期:2022年04月01日
作者:Charlie Eriksen
案例研究

Spring库的新漏洞:如何知道你是否有风险以及如何应对

发布日期:2022年04月01日
作者:Charlie Eriksen
查看资源
查看资源

最近,Java社区中最受欢迎的库之一Spring库披露了2个与远程代码执行(RCE)有关的漏洞。为了帮助你更容易了解你是否面临这两个漏洞的风险以及采取什么行动,我们对 "Spring4Shell "和 "Spring Cloud Function "的已知细节进行了分解。

漏洞1 - "Spring4Shell" (CVE-2022-22965)

2022年3月29日,社区发现了一系列推文,其中包含一个针对Spring Core(SC)的漏洞概念证明的截图,该漏洞允许对Spring Core的所有版本进行远程代码执行,包括最近发布的版本5.3.17。

哪些应用程序有风险?

目前,只有托管在Tomcat上的应用程序被证实有可能受到这种新的攻击。虽然该漏洞还没有被证明对嵌入式Tomcat Servlet容器或任何其他非Tomcat托管的应用程序成功,但这并不排除该威胁在未来对这些框架成功的可能性。 

Spring公司发布了关于该漏洞的官方声明,根据目前对该漏洞的理解,需要满足以下条件才会有漏洞。

  • JDK 9或更高版本
  • Apache Tomcat作为Servlet容器
  • 以传统的WAR形式打包(与Spring Boot的可执行jar相比)。
  • spring-webmvc或spring-webflux的依赖性
  • Spring框架的5.3.0至5.3.17、5.2.0至5.2.19版本,以及旧版本

"Spring4Shell "的开发是如何进行的?

该漏洞依赖于在方法签名中使用 "数据绑定"(org.springframework.web.bind.WebDataBinder)的请求,这些请求使用了普通旧Java对象(POJO)。

其中Foo类是一个POJO类,可以定义为如下。注意,实际的类并不重要,只要它被类加载器加载就可以了。 

当一个请求被这样的方法处理时,类加载器被用来解决这个类。类加载器负责在运行时加载类,而不必先将所有可能的类型预加载到内存中。当一个新的类被使用时,它找出要加载的.jar文件。 

你可以直接从Spring公司的博文中找到关于这个漏洞的最新和最深入的信息,包括潜在的修复或解决方法。

漏洞2 - Spring Cloud功能(CVE-2022-22963)。

2022年3月27日,Cyber Kendra披露了Spring云功能中的一个0天远程代码执行(RCE)漏洞的细节,该漏洞不存在补丁。该漏洞的ID为CVE-2022-22963。Spring Expression资源访问漏洞。

哪些应用程序有风险?

该漏洞影响了这些条件下的应用。

  • JDK 9或更新版本
  • Spring Cloud Functions 3.1.6(或更低)、3.2.2(或更低),或任何不支持的版本 

剥削是如何进行的?

Spring Cloud Function为开发者提供了配置如何通过spring.cloud.function.routing-expression属性处理路由的能力,通常通过配置或代码完成。这是一个强大的功能,接受 "Spring表达式语言"(SpEL)。通过这个0日漏洞,我们了解到这个属性可以通过请求的HTTP头来设置,这意味着攻击者可以将SpEL代码直接嵌入他们对RoutingFunction端点的HTTP请求中,从而执行任意代码。 

用户应该采取什么措施来减少风险?

Spring已经发布了3.1.7和3.2.3版本来解决这个问题,不允许通过HTTP头来设置这个属性,缓解了这个漏洞。升级到这两个版本后,不需要额外的步骤。

有兴趣了解更多关于我们如何帮助开发人员编写更安全的代码?预订一个演示或探索我们在安全代码教练上的免费安全编码指南

资料来源

查看资源
查看资源

作者

Charlie Eriksen

想要更多吗?

在博客上深入了解我们最新的安全编码见解。

我们广泛的资源库旨在增强人类对安全编码技术提升的方法。

查看博客
想要更多吗?

获取关于开发者驱动的安全的最新研究

我们广泛的资源库充满了有用的资源,从白皮书到网络研讨会,让你开始使用开发者驱动的安全编码。现在就去探索它。

资源中心

Spring库的新漏洞:如何知道你是否有风险以及如何应对

发布日期:2022年04月01日
作者:Charlie Eriksen

最近,Java社区中最受欢迎的库之一Spring库披露了2个与远程代码执行(RCE)有关的漏洞。为了帮助你更容易了解你是否面临这两个漏洞的风险以及采取什么行动,我们对 "Spring4Shell "和 "Spring Cloud Function "的已知细节进行了分解。

漏洞1 - "Spring4Shell" (CVE-2022-22965)

2022年3月29日,社区发现了一系列推文,其中包含一个针对Spring Core(SC)的漏洞概念证明的截图,该漏洞允许对Spring Core的所有版本进行远程代码执行,包括最近发布的版本5.3.17。

哪些应用程序有风险?

目前,只有托管在Tomcat上的应用程序被证实有可能受到这种新的攻击。虽然该漏洞还没有被证明对嵌入式Tomcat Servlet容器或任何其他非Tomcat托管的应用程序成功,但这并不排除该威胁在未来对这些框架成功的可能性。 

Spring公司发布了关于该漏洞的官方声明,根据目前对该漏洞的理解,需要满足以下条件才会有漏洞。

  • JDK 9或更高版本
  • Apache Tomcat作为Servlet容器
  • 以传统的WAR形式打包(与Spring Boot的可执行jar相比)。
  • spring-webmvc或spring-webflux的依赖性
  • Spring框架的5.3.0至5.3.17、5.2.0至5.2.19版本,以及旧版本

"Spring4Shell "的开发是如何进行的?

该漏洞依赖于在方法签名中使用 "数据绑定"(org.springframework.web.bind.WebDataBinder)的请求,这些请求使用了普通旧Java对象(POJO)。

其中Foo类是一个POJO类,可以定义为如下。注意,实际的类并不重要,只要它被类加载器加载就可以了。 

当一个请求被这样的方法处理时,类加载器被用来解决这个类。类加载器负责在运行时加载类,而不必先将所有可能的类型预加载到内存中。当一个新的类被使用时,它找出要加载的.jar文件。 

你可以直接从Spring公司的博文中找到关于这个漏洞的最新和最深入的信息,包括潜在的修复或解决方法。

漏洞2 - Spring Cloud功能(CVE-2022-22963)。

2022年3月27日,Cyber Kendra披露了Spring云功能中的一个0天远程代码执行(RCE)漏洞的细节,该漏洞不存在补丁。该漏洞的ID为CVE-2022-22963。Spring Expression资源访问漏洞。

哪些应用程序有风险?

该漏洞影响了这些条件下的应用。

  • JDK 9或更新版本
  • Spring Cloud Functions 3.1.6(或更低)、3.2.2(或更低),或任何不支持的版本 

剥削是如何进行的?

Spring Cloud Function为开发者提供了配置如何通过spring.cloud.function.routing-expression属性处理路由的能力,通常通过配置或代码完成。这是一个强大的功能,接受 "Spring表达式语言"(SpEL)。通过这个0日漏洞,我们了解到这个属性可以通过请求的HTTP头来设置,这意味着攻击者可以将SpEL代码直接嵌入他们对RoutingFunction端点的HTTP请求中,从而执行任意代码。 

用户应该采取什么措施来减少风险?

Spring已经发布了3.1.7和3.2.3版本来解决这个问题,不允许通过HTTP头来设置这个属性,缓解了这个漏洞。升级到这两个版本后,不需要额外的步骤。

有兴趣了解更多关于我们如何帮助开发人员编写更安全的代码?预订一个演示或探索我们在安全代码教练上的免费安全编码指南

资料来源

我们希望得到您的许可,向您发送有关我们产品和/或相关安全编码主题的信息。我们将始终以最谨慎的态度对待您的个人资料,绝不会将其出售给其他公司用于营销目的。

提交
要提交表格,请启用 "分析 "cookies。完成后,请随时再次禁用它们。