Alibaba Sentinel SSRF漏洞(CVE-2021-44139)浅析

Sentinel中的管控平台sentinel-dashboard存在认证前SSRF漏洞,恶意用户无需认证即可通过该接口进行SSRF攻击(CVE-2021-44139)。

0x00 漏洞简介

Alibaba开源限流熔断组件Sentinel是阿里巴巴发行的面向分布式服务架构的高可用防护开源组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。

github源码地址及更多介绍:https://github.com/alibaba/Sentinel/

2021年11月,SecCoder Security Labthreedr3am发现了Sentinel中的管控平台sentinel-dashboard存在认证前SSRF漏洞,恶意用户无需认证即可通过该接口进行SSRF攻击。

report地址:https://github.com/alibaba/Sentinel/issues/2451

0x01 环境搭建及复现

拉取源码:https://github.com/alibaba/Sentinel.git

导入idea,切换branch到release-1.8

git checkout release-1.8

运行Sentinel/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/DashboardApplication.java即可启动服务后台

start.png

访问http://your-ip:8080

login.png

  1. 本地监听端口12345,nc -lvvp 12345
  2. 构造url发起攻击,curl -XGET '<http://your-ip:8080/registry/machine?app=SSRF-TEST&appType=0&version=0&hostname=TEST&ip=your-ip:12345%23&port=0'

curl.png

nc接收到了请求

nc.png

0x02 漏洞分析

src/main/java/com/alibaba/csp/sentinel/dashboard/controller/MachineRegistryController.javareceiveHeartBeat方法打断点调试

1.png

发送payload跟进

1.5.png

进入receiveHeartBeat方法后,对端口进行了检验,需要正整数,而对ip进行了 非空长度(小于128) 的检验后便传入machineInfo,跟进addMachine方法

2.png

3.png

继续步入

2.5.png

仅仅是把传入的app等字符取出,没有做其他检验就返回给machineInfo

至于machineInfo的值在何处被调用,需要看src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java
start方法在构造方法中被调用

4.png

跟进start方法中的fetchAllApp方法

5.png

该函数获取所有app对象放进list中,再把list传入app遍历调用doFetchAppMetric

6.png

进入到fetchOnce,对app的信息做判断

7.png

machineInfo对象的值在这里取出

8.png

之后拼接到url中,发出get请求,同时可以构造#注释后面拼接的内容。
整个过程中没有有效的参数过滤和校验,可以构造特殊参数进行ssrf利用。

0x03 修复

对比最新版本代码,官方修复方式是在src/main/java/com/alibaba/csp/sentinel/dashboard/controller/MachineRegistryController.java中调用IPAddressUtil工具类对IP地址增加合法检验,只有合法的IPv4和v6地址可以正确传入

fix.png

0x04 参考

  • 发表于 2022-08-30 09:43:58
  • 阅读 ( 9842 )
  • 分类:漏洞分析

0 条评论

请先 登录 后评论
3r1cCheng
3r1cCheng

3 篇文章

站长统计