问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
Alibaba Sentinel SSRF漏洞(CVE-2021-44139)浅析
漏洞分析
Sentinel中的管控平台sentinel-dashboard存在认证前SSRF漏洞,恶意用户无需认证即可通过该接口进行SSRF攻击(CVE-2021-44139)。
0x00 漏洞简介 ========= `Alibaba`开源限流熔断组件`Sentinel`是阿里巴巴发行的面向分布式服务架构的高可用防护开源组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。 > github源码地址及更多介绍:[](https://github.com/alibaba/Sentinel/)<https://github.com/alibaba/Sentinel/> 2021年11月,`SecCoder Security Lab`的`threedr3am`发现了`Sentinel`中的管控平台`sentinel-dashboard`存在认证前SSRF漏洞,恶意用户无需认证即可通过该接口进行SSRF攻击。 > report地址:[](https://github.com/alibaba/Sentinel/issues/2451)<https://github.com/alibaba/Sentinel/issues/2451> 0x01 环境搭建及复现 ============ 拉取源码:[](https://github.com/alibaba/Sentinel.git)<https://github.com/alibaba/Sentinel.git> 导入idea,切换branch到`release-1.8` ```bash git checkout release-1.8 ``` 运行`Sentinel/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/DashboardApplication.java`即可启动服务后台 ![start.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-f7c22607f438884155008c88ddcbda9533845450.png) 访问http://your-ip:8080 ![login.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-e345fe95729faeb39fc56a10d662e9fc1d7774a7.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](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-ae1c24189f0faf5b2a1b015454812507ee4472d2.png) nc接收到了请求 ![nc.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-38d556238dc07a315d17fbab91bd0d102dd53f97.png) 0x02 漏洞分析 ========= 在`src/main/java/com/alibaba/csp/sentinel/dashboard/controller/MachineRegistryController.java`的`receiveHeartBeat`方法打断点调试 ![1.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-c781792a63d395887b84f547648b8498bb6927ad.png) 发送payload跟进 ![1.5.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-c8bbca34e7ddaf555bbd82dfee6311369d8bdd0f.png) 进入`receiveHeartBeat`方法后,对端口进行了检验,需要正整数,而对ip进行了 **非空** 和 **长度(小于128)** 的检验后便传入`machineInfo`,跟进`addMachine`方法 ![2.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-045c203135b93b521b6db7df09db7c5bc3680bf4.png) ![3.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-41ca8db52c3348142f098cfc34e516781c7c1c5c.png) 继续步入 ![2.5.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-aad6114be5d77211a43585b8f847cb9ee069d3cb.png) 仅仅是把传入的app等字符取出,没有做其他检验就返回给`machineInfo` 至于`machineInfo`的值在何处被调用,需要看`src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java` `start`方法在构造方法中被调用 ![4.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-a39bce549bbafc0f2a64d84c61bcee6944967452.png) 跟进`start`方法中的`fetchAllApp`方法 ![5.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-e1e10cc611f4f163d6fb8d9b1208e33e00fd3a05.png) 该函数获取所有app对象放进list中,再把list传入app遍历调用`doFetchAppMetric` ![6.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-b4c367a00fed61f67fbb49c1975190255d94b6d3.png) 进入到`fetchOnce`,对app的信息做判断 ![7.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-08ec33df716f00e95f8d8d41c188b9709e318dae.png) `machineInfo`对象的值在这里取出 ![8.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-4a9541b2a17a901f8bc1bff4cba0d257a666c440.png) 之后拼接到url中,发出get请求,同时可以构造`#`注释后面拼接的内容。 整个过程中没有有效的参数过滤和校验,可以构造特殊参数进行ssrf利用。 0x03 修复 ======= 对比最新版本代码,官方修复方式是在`src/main/java/com/alibaba/csp/sentinel/dashboard/controller/MachineRegistryController.java`中调用`IPAddressUtil`工具类对IP地址增加合法检验,只有合法的IPv4和v6地址可以正确传入 ![fix.png](https://shs3.b.qianxin.com/attack_forum/2022/08/attach-da44560276158f08d8b6433ae1ec861f6fcff2d4.png) 0x04 参考 ======= - [](https://github.com/alibaba/Sentinel/issues/2451)<https://github.com/alibaba/Sentinel/issues/2451>
发表于 2022-08-30 09:43:58
阅读 ( 8507 )
分类:
漏洞分析
1 推荐
收藏
0 条评论
请先
登录
后评论
3r1cCheng
3 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!