Spring Cloud Gateway远程代码执行CVE-2022-22947漏洞分析及复现

本文详细分析了Spring Cloud Gateway的CVE-2022-22947远程代码执行漏洞,包括漏洞描述、影响范围、环境搭建、漏洞分析、复现步骤和修复建议。攻击者可通过构造恶意请求,利用未保护的执行器端点执行任意代码。建议受影响的用户尽快禁用相关端点或更新到安全版本。

0x01 漏洞描述

Spring Cloud Gateway 是基于 Spring Framework 和 Spring Boot 构建的 API 网关,它旨在为微服务架构提供一种简单、有效、统一的 API 路由管理方式。

据公布的漏洞描述称,当Spring Cloud Gateway 执行器端点启用、公开且不安全时,使用Spring Cloud Gateway的应用程序容易受到代码注入攻击。远程攻击者可以发出含有恶意代码的请求,从而允许在远程主机上任意远程执行。

图片

0x02 漏洞影响

漏洞编号:CVE-2022-22947

影响版本:

  • Spring Cloud Gateway < 3.1.1

  • Spring Cloud Gateway < 3.0.7

  • Spring Cloud Gateway 较低、不受支持的版本也会受到影响

风险等级:

【高危】攻击者可利用该漏洞远程执行任意代码,目前已发现公开漏洞POC。

0x03 环境搭建

本次在ubuntu云服务器上利用docker搭建漏洞复现环境

git clone https://github.com/vulhub/vulhub 
cd vulhub/spring/CVE-2022-22947/
docker-compose up -d //启动环境
docker ps -a //查看测试环境运行情况

图片
访问地址:http://IP:8080
图片

0x04 漏洞分析

部分源码:

static Object getValue(SpelExpressionParser parser, BeanFactory beanFactory,
String entryValue) {
Object value;
String rawValue = entryValue;
if (rawValue != null) {
rawValue = rawValue.trim();
}
if (rawVal
<think>嗯,用户想要了解Spring Cloud Gateway Actuator API中的SpEL表达式注入漏洞CVE-2022-22947)的详细信息。从用户提供的参考引用来看,这个漏洞主要涉及通过Actuator API注入恶意SpEL表达式实现命令执行。 用户特别提到需要了解漏洞原理、影响范围和修复方案等核心内容。看来用户可能是个安全工程师或者开发人员,正在处理相关漏洞的修复工作。ta的提问非常聚焦,说明对漏洞已有基本认知,现在需要深入的技术细节。 从漏洞原理分析: 1. 关键点在ShortcutConfigurable接口的getValue()方法,它使用了StandardEvaluationContext来执行SpEL表达式而非更安全的SimpleEvaluationContext 2. Actuator API端点暴露了路由配置功能,攻击者可以通过构造特定请求注入恶意表达式 3. 由于StandardEvaluationContext支持全部SpEL功能,导致可执行系统命令 影响范围需要特别注意: - 官方明确影响的版本是3.1.x < 3.1.1 和 3.0.x < 3.0.7 - 但引用中提到"不受支持的旧版本也会受影响",这点需要强调,因为很多人会忽略EOL版本的风险 修复方案要分层次说明: - 首选肯定是升级到安全版本 - 对于无法升级的情况,需要给出替代方案(比如禁用Actuator端点) - 还要提醒Spring Boot Actuator的安全配置注意事项 用户没有提到复现细节,但作为完整响应,应该简要包含漏洞利用特征(比如恶意路由的构造方式),这样有助于用户识别攻击痕迹。不过要注意控制技术细节的深度,避免成为攻击手册。 考虑到用户是技术人员,可以使用专业术语,但涉及代码的部分要用$...$包裹行内表达式,比如StandardEvaluationContext解析$...$的过程。独立代码块展示curl攻击示例时需要完整转义特殊字符。 最后生成的三个问题要延续技术深度: 1. 漏洞检测方法 - 这是用户后续可能需要的 2. 利用限制条件 - 帮助评估实际风险 3. 历史类似漏洞 - 提供扩展学习方向 </think>以下是关于 **Spring Cloud Gateway Actuator API SpEL表达式注入漏洞CVE-2022-22947)** 的详细分析,涵盖漏洞原理、影响范围、修复方案及复现逻辑: --- ### **漏洞原理** 1. **核心缺陷** Spring Cloud Gateway 的 `ShortcutConfigurable` 接口中,`getValue()` 方法使用 `StandardEvaluationContext` 解析 SpEL 表达式。该类允许执行**任意Java代码**(如 `T(java.lang.Runtime).getRuntime().exec("命令")`),未限制表达式执行权限[^1]。 *关键代码示例*: ```java // 漏洞点:使用StandardEvaluationContext(非安全模式) ExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); parser.parseExpression(恶意表达式).getValue(context); // 可执行系统命令 ``` 2. **攻击入口** 通过 **Actuator API** 的路由管理端点(`/actuator/gateway/routes`)注入恶意 SpEL 表达式。攻击者构造包含恶意表达式的路由配置,Gateway 在刷新路由时触发表达式解析,实现远程命令执行[^1][^2]。 --- ### **影响范围** | 组件 | 受影响版本 | 安全版本 | |---------------------|-------------------------------|------------------------| | Spring Cloud Gateway | 3.1.x < 3.1.1 | >= 3.1.1 | | | 3.0.x < 3.0.7 | >= 3.0.7 | | | 旧版且官方已停止支持的版本 | 需升级或缓解措施 | --- ### **漏洞复现步骤** 1. **构造恶意路由** 向 `/actuator/gateway/routes/{id}` 发送 **POST** 请求,在 `filters` 字段注入 SpEL 表达式: ```json { "filters": [{ "name": "AddResponseHeader", "args": { "name": "X-Exploit", "value": "#{T(java.lang.Runtime).getRuntime().exec('calc.exe')}" } }] } ``` 2. **触发漏洞** 访问 `/actuator/gateway/refresh` 刷新路由,触发恶意表达式执行(如弹出计算器)。 --- ### **修复方案** 1. **官方升级** - 升级至安全版本:**Spring Cloud Gateway 3.1.1+** 或 **3.0.7+** - *修复逻辑*:将 `StandardEvaluationContext` 替换为 `SimpleEvaluationContext`(限制表达式执行能力)[^2]。 2. **临时缓解措施** - **禁用 Actuator 端点**:在 `application.yml` 中添加: ```yaml management: endpoint: gateway: enabled: false # 关闭Gateway Actuator端点 endpoints: web: exposure: include: "" # 禁止暴露所有Actuator端点 ``` - **网络隔离**:限制外部访问 `/actuator/*` 路径。 --- ### **漏洞利用条件** - 攻击者需能访问 **Actuator API**(默认端口 `8080`) - 目标系统未禁用 `gateway` Actuator 端点 - 使用未修复的 Spring Cloud Gateway 版本
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值