漏洞简述

3月1日,VMware发布了针对Spring Cloud Gateway的漏洞通告,当actuator端点开启并对外暴露时,攻击者可以构造恶意请求实现远程任意代码执行。

Spring Cloud Gateway是Spring Cloud 生态中的API网关,包含限流、过滤等API治理功能。Actuator是Spring Boot生态中的应用监控组件,提供了通过http访问监控运行状态的能力。

当actuator端点开启时,可以通过http请求修改路由,路由中包含的filter参数会经过SPEL表达式解析,从而导致了漏洞发生。

漏洞评级为严重,受影响组件版本范围为:

  • 3.1.0
  • 3.0.0-3.0.6
  • 以及其他更老的版本

用户需要尽快升级到3.1.1或3.0.7及以上版本,同时建议不要对公网开放actuator访问。

漏洞时间线

  • 1.15日:漏洞发现者在向VMware提交了漏洞报告
  • 2.17、2.18日:开发者多次提交代码进行漏洞修复
  • 2.18日:开发者发布新版本

缺陷分析

通过https://github.com/spring-cloud/spring-cloud-gateway项目中的commit信息可以发现漏洞和SPEL、ShortcutConfigurable有关,开发者同时提交了相关的测试用例。

springboot 信息泄露 springboot actuator 漏洞_开发语言

通过对源码分析,可以看到ShortcutConfigurable.getValue()方法取值时使用了StandardEvaluationContext进行表达式解析。

springboot 信息泄露 springboot actuator 漏洞_java_02

 下方的shortcutType().normalize()则在对value进行归一化的时候调用了getValue()

springboot 信息泄露 springboot actuator 漏洞_网络安全_03

可以发现GatewayFilterFactory继承了ShortcutConfigurableRewritePathGatewayFilterFactory等过滤器类实现了GatewayFilterFactory

根据官方文档,开启acutator后可以通过访问/actuator/gateway/routes列出路由,路由中包含filter,如:

springboot 信息泄露 springboot actuator 漏洞_网络安全_04

 同时可以通过/gateway/routes/{id_route_to_create}创建路由。

然后通过/actuator/gateway/refresh刷新路由,重新加载配置使得路由生效。

因此攻击者可以添加带有filter的恶意路由,当重新加载路由时,会触发对参数的归一化逻辑,从而导致filter参数value中的SPEL表达式被解析。

springboot 信息泄露 springboot actuator 漏洞_安全_05

漏洞发现者在博客中描述了自己的漏洞发现过程,还分析了为什么在CodeQL中存在SPEL注入的规则,却没能发现这个问题,以及其他的一些问题,值得学习,感兴趣的同学可以阅读,在此不过多展开。

漏洞检测及修复

关于该漏洞的检测策略已在墨菲安全的所有工具产品中上线,您可以安装使用墨菲安全的JetBrains IDE插件、CLI客户端等对你的项目进行检测,并一键修复。

如果你觉得这个工具对你有用,可以star我们的开源项目或者提issues,谢谢啦!

参考链接

https://tanzu.vmware.com/security/cve-2022-22947

https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-how-it-works

https://wya.pl/2022/02/26/cve-2022-22947-spel-casting-and-evil-beans/