【墨菲安全实验室】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/

相关文章
|
3月前
|
缓存 JSON NoSQL
别再手写过滤器!SpringCloud Gateway 内置30 个,少写 80% 重复代码
小富分享Spring Cloud Gateway内置30+过滤器,涵盖请求、响应、路径、安全等场景,无需重复造轮子。通过配置实现Header处理、限流、重试、熔断等功能,提升网关开发效率,避免代码冗余。
450 1
|
6月前
|
前端开发 Java API
Spring Cloud Gateway Server Web MVC报错“Unsupported transfer encoding: chunked”解决
本文解析了Spring Cloud Gateway中出现“Unsupported transfer encoding: chunked”错误的原因,指出该问题源于Feign依赖的HTTP客户端与服务端的`chunked`传输编码不兼容,并提供了具体的解决方案。通过规范Feign客户端接口的返回类型,可有效避免该异常,提升系统兼容性与稳定性。
447 0
|
JSON Java API
利用Spring Cloud Gateway Predicate优化微服务路由策略
Spring Cloud Gateway 的路由配置中,`predicates`​(断言)用于定义哪些请求应该匹配特定的路由规则。 断言是Gateway在进行路由时,根据具体的请求信息如请求路径、请求方法、请求参数等进行匹配的规则。当一个请求的信息符合断言设置的条件时,Gateway就会将该请求路由到对应的服务上。
1193 69
利用Spring Cloud Gateway Predicate优化微服务路由策略
|
7月前
|
负载均衡 Java API
基于 Spring Cloud 的微服务架构分析
Spring Cloud 是一个基于 Spring Boot 的微服务框架,提供全套分布式系统解决方案。它整合了 Netflix、Zookeeper 等成熟技术,通过简化配置和开发流程,支持服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、API网关(Zuul)、配置管理(Config)等功能。此外,Spring Cloud 还兼容 Nacos、Consul、Etcd 等注册中心,满足不同场景需求。其核心组件如 Feign 和 Stream,进一步增强了服务调用与消息处理能力,为开发者提供了一站式微服务开发工具包。
695 0
|
11月前
|
前端开发 Java Nacos
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
本文介绍了如何使用Spring Cloud Alibaba 2023.0.0.0技术栈构建微服务网关,以应对微服务架构中流量治理与安全管控的复杂性。通过一个包含鉴权服务、文件服务和主服务的项目,详细讲解了网关的整合与功能开发。首先,通过统一路由配置,将所有请求集中到网关进行管理;其次,实现了限流防刷功能,防止恶意刷接口;最后,添加了登录鉴权机制,确保用户身份验证。整个过程结合Nacos注册中心,确保服务注册与配置管理的高效性。通过这些实践,帮助开发者更好地理解和应用微服务网关。
1976 0
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
|
安全 Java 测试技术
如何在 Spring Boot 中禁用 Actuator 端点安全?
如何在 Spring Boot 中禁用 Actuator 端点安全?
2947 1
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
关系型数据库 MySQL 应用服务中间件
502 Bad Gateway错误分析与解决方案
502 Bad Gateway错误通常发生在客户端与服务器通信时,表示网关或代理未能从上游服务器获取有效响应。本文分析了该错误的可能原因,包括LNMP安装包问题、加速器配置错误、PHP-CGI进程不足等,并提供了详细的解决方案,如手动安装PHP、调整配置参数、清理磁盘空间等。针对Nginx,还介绍了关键参数调整方法和实施步骤。通过这些方法,可有效解决502错误,提高服务器稳定性。注意备份数据并谨慎操作。
4060 2
|
安全 Java 对象存储
安全性考量:Spring Security与Netflix OSS在微服务安全中的作用
安全性考量:Spring Security与Netflix OSS在微服务安全中的作用
226 1
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
863 5