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来拉取镜像
#下载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
