Spring Cloud Gateway 远程代码执行漏洞 CVE-2022-22947
影响范围
- Spring Cloud Gateway 3.1.x - 3.1.1
- Spring Cloud Gateway 3.0.x - 3.0.7
- 旧版本 / 停止维护版本
漏洞类型
SpEL 表达式注入
操作系统限制
无
配置要求
默认配置
漏洞利用
命令执行,进行反弹 shell,写入内存马(删除路由后还能驻留在内存中)
利用原理
Spring Cloud Gateway 提供了一个管理端点(/actuator/gateway/routes),允许管理员通过 HTTP 请求动态地添加、删除或修改路由配置,该端点暴露且未受保护,攻击者可以发送 POST 请求来定义新的路由,并在 filters 参数注入恶意代码,网关价值配置时候,会调用 ShortcutConfigurable 接口,该接口会将 filters 参数的值传给 SpEL 解析引擎。利用链分两个阶段,第一阶段为存储阶段,攻击者通过 T () 操作符调用 Java 环境敏感类来构造恶意代码,此时恶意代码仅仅作为字符串存在网关内存配置;第二阶段为触发阶段,加载过程网关会解析恶意表达式,解析成功后 Runtime.exec() 被调用,在服务器执行系统命令
漏洞复现
现成的 vulhub 来拉取镜像
1 | #下载vulhub源代码 |

用 burosuite 抓取 http://公网: 8080 数据包

发送 Repeater 模块

修改请求方法为 POST,路径修改为/actuator/gateway/routes/自定义名称,内容类型改为 Content-Type: appliaction/json,请求主体注入有害 payload

返回 201

应用刚添加的路由发送以下数据包,触发敏感命令执行,修改路径为/actuator/gateway/refresh,修改内容格式:Content-Type: application/x-www-form-urlencoded,发送

返回 200

修改请求方法为 GET,路径改为/actuator/gateway/routes/自定义名称,发送

返回执行结果

删除添加的路由,修改请求头为 DELETE,发送

发送 200
