技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
Alibaba Sentinel SSRF漏洞代码审计
小瑟斯
发表于 广东
漏洞分析
384浏览 · 2025-05-16 20:41
返回文档
一、Sentinel介绍
引用自官方介绍
随着微服务的流行,服务和服务之间的稳定性变得越来越重要,Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
二、漏洞分析
Sentinel组件曾经有发现过SSRF漏洞(CVE-2021-44139),关于此漏洞,已有很多师傅进行过分析复现,本文在此不赘述,本文着重于分析的SSRF漏洞是另外一处,获取集群状态功能相关的SSRF漏洞。
三、Sentinel版本
我这里分析的版本是v1.8.8,在2025-05获取时处于最新Releases版。
四、漏洞代码
(1)漏洞点主要位于com/alibaba/csp/sentinel/dashboard/controller/cluster/ClusterConfigController.java的第119行---146行,该区域代码功能主要是获取集群或者目标机器状态功能相关,让我们来分析下代码
(2)通过第120行判断出首先它接收三个参数:app(应用名称)、ip(IP地址)和port(端口号),然后在第123行---130行,判断三个参数是否为空,为空则抛出对应的异常,然后第132行和133行,调用 checkIfSupported 方法检查当前版本是否支持该 app、ip 和 port 的组合。如果不支持,则调用 unsupportedVersion 方法返回不支持的响应。
(3)接下来第136行---144行,使用 clusterConfigService.getClusterUniversalState 方法异步获取集群状态,之后使用 thenApply 将结果转换为成功的结果对象,然后使用 get 方法阻塞等待结果,期间如果发生 ExecutionException,记录错误日志并返回错误响应,如果发生其他异常,记录错误日志并返回失败的结果,错误码为 -1,错误信息为异常消息。
(4)跟进clusterConfigService.getClusterUniversalState 方法,来到com/alibaba/csp/sentinel/dashboard/service/ClusterConfigService.java,第148行---166行,定义了一个名为 getClusterUniversalState 的方法,该方法返回一个 CompletableFuture<ClusterUniversalStateVO> 对象。这个方法的主要目的是从 Sentinel API 客户端获取集群的通用状态信息,并根据这些信息进一步获取客户端和服务器的相关信息。
(5)第149行sentinelApiClient.fetchClusterMode(ip, port)则是调用 sentinelApiClient 的 fetchClusterMode 方法,获取集群模式信息,这个方法返回一个 CompletableFuture 对象,之后的第150行.thenApply(e -> new ClusterUniversalStateVO().setStateInfo(e))则是当 fetchClusterMode 方法完成时,将结果 e 传递给 thenApply 方法,thenApply 方法创建一个新的 ClusterUniversalStateVO 对象,并设置其 stateInfo 属性为 e。
(6)跟进sentinelApiClient.fetchClusterMode 方法,来到com/alibaba/csp/sentinel/dashboard/client/SentinelApiClient.java,第626行---637行,这段主要功能是通过给定的 IP 地址和端口号来获取集群模式,并将其解析为 ClusterStateSimpleEntity 对象,然后使用 executeCommand 方法发送请求到指定的 IP 和端口,路径为 FETCH_CLUSTER_MODE_PATH。
(7)跟进第631行的executeCommand执行方法,看看执行了什么,来到第253行,没有发现相关的SSRF代码,再继续跟进第254行的executeCommand执行方法,跳转到了266行,也没有发现相关的SSRF代码,再继续跟进第267行的executeCommand执行方法,来到了第280行。
(8)第280行---第315行,前面传入的各个参数,都集中在这里进行进一步校验和检查处理,进行参数检查与合法性验证,之后构建基础的URL字符串,包括协议(http://)、IP地址、端口号以及API路径,最后构造HTTP请求(GET或POST),然后异步执行该请求。
(9)第310行最后使用HttpGet方法发起http请求时,没有对IP地址合法性进行完整校验,进而导致了SSRF漏洞的产生。
五、漏洞复现
通过前面的ClusterConfigController.java代码,我们得知了漏洞接口是/state_single,然后第57行定义了起始路径/cluster,然后再传入3个参数,分别是app、ip、port,最后得出的漏洞地址是【http://localhost:8080/cluster/state_single】,该接口需要登录后才能访问。
构造访问的漏洞地址:
【http://localhost:8080/cluster/state_single?app=SSRF-TEST&ip=127.0.0.1&port=80】
六、总结
本文主要分析了Sentinel组件获取集群状态功能点建立http连接时,没有对IP地址合法性进行完整校验,进而导致SSRF漏洞,总体来说并不难,新人第一次投稿分析此类文章,如有描述错误,还请各位师傅多多指教。
参考链接:
https://github.com/alibaba/Sentinel/issues/2451
https://sentinelguard.io/zh-cn/docs/introduction.html
https://www.cnblogs.com/charonlight/p/17552045.html
0
人收藏
0
人喜欢
转载
分享
0
条评论
某人
表情
可输入
255
字
评论
发布投稿
热门文章
1
2025ISCC练武区域赛和决赛pwn以及擂台pwn合集
2
通过Elastic EDR看smbexec并进行二次开发Bypass
3
php代码审计篇 - 信呼OA 前台注入分析一
4
D3CTF-d3kshrm(预期&非预期)题解
5
Tomcat解析XML引入的新颖webshell构造方式
近期热点
一周
月份
季度
1
2025ISCC练武区域赛和决赛pwn以及擂台pwn合集
2
通过Elastic EDR看smbexec并进行二次开发Bypass
3
php代码审计篇 - 信呼OA 前台注入分析一
4
D3CTF-d3kshrm(预期&非预期)题解
5
Tomcat解析XML引入的新颖webshell构造方式
暂无相关信息
暂无相关信息
优秀作者
1
T0daySeeker
贡献值:28700
2
一天
贡献值:24800
3
1674701160110592
贡献值:18000
4
1174735059082055
贡献值:15000
5
Yale
贡献值:14000
6
LeeH
贡献值:10000
7
MeteorKai
贡献值:9000
8
姓*户
贡献值:8600
9
Arcueid
贡献值:8000
10
熊猫正正
贡献值:8000
目录
一、Sentinel介绍
二、漏洞分析
三、Sentinel版本
四、漏洞代码
五、漏洞复现
六、总结
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板