影响范围:

  • 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来拉取镜像

#下载vulhub源代码
git clone https://github.com/vulhub/vulhub.git
#进入漏洞目录
cd vulhub/spring/CVE-2022-22947
#拉取镜像
docker-compose up -d

用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


文章作者: Johan
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Johan的秘密小窝
CVE Spring
喜欢就支持一下吧