4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / README_CN.md MD
# 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、用户名、密码)。