README.md
Rendering markdown...
# CVE-2025-70829:Datart 信息泄露漏洞
## 1. 漏洞概述
**CVE ID**: CVE-2025-70829
**影响产品**: Datart
**版本**: v1.0.0-rc.3
**漏洞类型**: 信息泄露 (Information Exposure)
Datart v1.0.0-rc.3 存在信息泄露漏洞,允许经过身份验证的攻击者通过自定义 H2 JDBC 连接字符串访问敏感数据。通过引导应用程序连接到自身的内部数据库文件,攻击者可以查询包含用户凭据和配置详情的系统表。
---
## 2. 复现步骤
### 前置条件
- 已拥有登录 Datart 仪表板的权限。
### 操作步骤
1. **登录** 到 Datart 系统 (v1.0.0-rc.3)。
2. 导航到 **"数据源"** 模块。
3. 点击 **新建数据源** 并选择类型 **"H2"**。
4. 在配置中,输入以下恶意的 JDBC URL 指向本地内部数据库文件:
```text
jdbc:h2:file:./bin/h2/datart.demo;MODE=MySQL
```
5. 点击 **"测试连接"** 确认可以访问内部系统数据库。
6. 保存该数据源。
7. 使用 SQL 编辑器(或使用此数据源创建图表)执行任意查询。
---
## 3. 敏感信息获取
### 获取用户凭据并伪造 JWT
通过从数据库中检索用户的密码哈希值,攻击者可以伪造有效的 JWT 令牌来冒充任何用户(例如管理员)。这是因为应用程序使用了硬编码的密钥 (`d@a$t%a^r&a*t`),并且在令牌载荷中包含了密码哈希的 Java `hashCode()`。
**SQL 查询:**
```sql
SELECT id, username, email, password, name FROM user;
```
> **利用方法**: 使用获取到的 `password` 哈希配合 `jwttest.py` 生成有效的 `Bearer` 令牌,以实现任意用户登录。
### 获取并解密数据源配置
攻击者还可以检索其他已连接数据源的配置信息。
**SQL 查询:**
```sql
SELECT * FROM source;
```
**解密:**
`source` 表中的 `config` 字段通常使用 AES 加密。应用程序使用了一个默认的硬编码安全密钥:
> **默认安全密钥**: `d@a$t%a^r&a*t`
您可以使用提供的 [Decrypt.java](Decrypt.java) 工具(其中已包含此默认密钥)来解密这些值,从而获取外部数据库的明文凭据。
### 使用示例
1. 将数据库中的加密字符串提供给 `Decrypt.java`。
2. 运行 Java 程序以显示连接详情(URL、用户名、密码)。