【墨菲安全实验室】Spring Cloud Gateway代码注入漏洞分析

简介: 【墨菲安全实验室】Spring Cloud Gateway代码注入漏洞分析

漏洞简述


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、漏洞发现者在向VMware提交了漏洞报告

2、开发者多次提交代码进行漏洞修复

3、开发者发布新版本


缺陷分析


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

image.png

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

1.png

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

1.png

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


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

1.png

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

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

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

image.png

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


漏洞检测及修复


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


JetBrains IDE 代码安全检测插件: 使用文档

通用漏洞检测客户端(已开源): https://github.com/murphysec/murphysec

使用我的邀请码注册获取token:https://www.murphysec.com/j?p=mycsdn

如果你觉得这个工具对你有用,可以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/

相关文章
|
10月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
10月前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
1131 3
|
9月前
|
人工智能 监控 Java
零代码改造 + 全链路追踪!Spring AI 最新可观测性详细解读
Spring AI Alibaba 通过集成 OpenTelemetry 实现可观测性,支持框架原生和无侵入探针两种方式。原生方案依赖 Micrometer 自动埋点,适用于快速接入;无侵入探针基于 LoongSuite 商业版,无需修改代码即可采集标准 OTLP 数据,解决了原生方案扩展性差、调用链易断链等问题。未来将开源无侵入探针方案,整合至 AgentScope Studio,并进一步增强多 Agent 场景下的观测能力。
3166 102
|
9月前
|
安全 Java 测试技术
《深入理解Spring》单元测试——高质量代码的守护神
Spring测试框架提供全面的单元与集成测试支持,通过`@SpringBootTest`、`@WebMvcTest`等注解实现分层测试,结合Mockito、Testcontainers和Jacoco,保障代码质量,提升开发效率与系统稳定性。
|
9月前
|
缓存 JSON NoSQL
别再手写过滤器!SpringCloud Gateway 内置30 个,少写 80% 重复代码
小富分享Spring Cloud Gateway内置30+过滤器,涵盖请求、响应、路径、安全等场景,无需重复造轮子。通过配置实现Header处理、限流、重试、熔断等功能,提升网关开发效率,避免代码冗余。
748 1
|
10月前
|
安全 IDE Java
Spring 的@FieldDefaults和@Data:Lombok 注解以实现更简洁的代码
本文介绍了如何在 Spring 应用程序中使用 Project Lombok 的 `@Data` 和 `@FieldDefaults` 注解来减少样板代码,提升代码可读性和可维护性,并探讨了其适用场景与限制。
344 0
Spring 的@FieldDefaults和@Data:Lombok 注解以实现更简洁的代码
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1698 1
Spring boot 使用mybatis generator 自动生成代码插件
|
安全 Java Nacos
0代码改动实现Spring应用数据库帐密自动轮转
Nacos作为国内被广泛使用的配置中心,已经成为应用侧的基础设施产品,近年来安全问题被更多关注,这是中国国内软件行业逐渐迈向成熟的标志,也是必经之路,Nacos提供配置加密存储-运行时轮转的核心安全能力,将在应用安全领域承担更多职责。
|
缓存 监控 Java
说一说 SpringCloud Gateway 堆外内存溢出排查
我是小假 期待与你的下一次相遇 ~
1506 5

热门文章

最新文章