KKongTen/CVE-2026-3494_Verfication
GitHub: KKongTen/CVE-2026-3494_Verfication
针对 CVE-2026-3494 的漏洞复现与分析项目,揭示 MariaDB server_audit 插件在处理含行内注释 SQL 时的审计日志绕过问题及版本回退现象。
Stars: 0 | Forks: 0
# CVE-2026-3494 - MariaDB server_audit 日志验证 PoC
本项目提供了一个专门的环境,用于验证和分析在 SQL 查询中使用特定行内注释(`#`、`--`)时,MariaDB `server_audit` 插件中潜在的审计日志绕过漏洞。
## 关键发现
* **v11.8.6 版本中的日志遗漏**:观察到在 MariaDB v11.8.6 中(该版本之前被认为是已修补的版本),某些查询(例如带注释的 `SET PASSWORD` 或 `Error 1046` 情况)未能被记录在审计日志中。
* **潜在的解析器差异**:发现最新版本中 Audit Plugin 的解析器行为可能发生了变化,其中多行注释(`#`)可能导致 DCL 语句未被审计器正确处理或被忽略。
* **版本回退识别**:检测到一种行为,即在 v11.8.5 及更低版本中成功记录的日志在 v11.8.6 中被遗漏,这表明审计日志逻辑中可能存在回退。
## 1. 概述
* **CVE 参考**:CVE-2026-3494
* **受影响版本**:MariaDB 11.8.5 及更低版本(包括 10.x 分支)
* **漏洞详情**:当启用 `server_audit` 并配置了 `QUERY_DCL`、`QUERY_DDL` 和 `QUERY_DML` 等过滤规则时,某些包含行内注释的查询可能会绕过日志记录机制。
* **目标**:在相同的查询条件下,比较多个 MariaDB 版本(受影响版本与已修补版本)的审计日志行为。
## 2. 实际结果(验证)
以下矩阵总结了测试期间观察到的日志记录行为:
```
[MariaDB 10.3.39 / 11.8.5]
- CASE #1, #2A, #2B, #3, #4 → All LOGGED (Normal behavior)
[MariaDB 11.8.6 (Target Version)]
- CASE #2B (Error 1046) → NOT LOGGED (Logging Omission) ❗
- CASE #3 (Commented SET PASSWORD) → NOT LOGGED (Logging Omission) ❗
- CASE #1, #2A, #4 → LOGGED (Normal behavior)
```
## 3. 测试环境
本项目利用 Docker Compose 运行三个隔离的 MariaDB 实例:
| 版本 | 端口 | 状态 | 描述 |
| :--- | :--- | :--- | :--- |
| **MariaDB 10.3.39** | 3306 | **受影响** | 旧版稳定版验证 |
| **MariaDB 11.8.5** | 3307 | **受影响** | 最新受影响版本验证 |
| **MariaDB 11.8.6** | 3308 | **目标** | 评估最新的审计日志更改 |
## 4. 设置与执行
### 1) 基础设施设置 (Docker)
构建并启动 MariaDB 容器。该环境会自动配置 `server_audit` 插件并初始化测试用户。
```
# 构建并启动 containers
docker compose up --build -d
# 验证 container 状态
docker ps
```
### 2) 准备工作(主机)
安装所需的 Python 依赖项:
```
pip install pymysql
```
### 3) 运行 PoC
可以从项目内的任何目录执行该脚本。
```
python poc/poc.py
```
## 5. 测试用例详情
该 PoC 执行 5 个不同的场景:
1. **TEST_CASE_1(正常)**:不带注释的标准查询(对照组)。
2. **TEST_CASE_2_A(错误 1146)**:导致“Table doesn't exist”错误的查询。
3. **TEST_CASE_2_B(错误 1046)**:导致“No database selected”错误的查询(**Jira 复现用例**)。
4. **TEST_CASE_3(带注释的 SET PASSWORD)**:带有嵌入 `#` 注释的 `SET PASSWORD` 命令(**绕过检查**)。
5. **TEST_CASE_4(带注释的 SELECT)**:带有嵌入 `#` 注释的 `SELECT` 语句(**绕过检查**)。
## 6. 结果解释
* **`LOGGED`**:查询已成功记录在审计日志中。
* **`NOT LOGGED`**:查询未记录在日志中(潜在的绕过或回退)。
* **`>> Actual Log`**:以蓝色显示 `server_audit.log` 中的原始条目,以验证所记录语句的完整性。
## 7. 验证日志(实际证据)
以下是显示预期行为(11.8.5)与日志遗漏(11.8.6)之间差异的实际执行日志。
## 8. 项目结构
```
.
├── config/ # MariaDB server_audit configuration
├── init/ # Initialization scripts (User & Plugin setup)
├── logs/ # Audit log volume mounts
├── poc/
│ └── poc.py # Automated verification script
├── results/
│ └── full_execution_log.md # Detailed terminal output logs
├── docker-compose.yml # Multi-version environment definition
└── README.md # Project documentation (Current file)
```
## 9. 免责声明
本项目仅用于教育和安全研究目的。请负责任地使用,未经彻底测试,请勿将这些配置应用于生产环境。
MariaDB 11.8.5(预期日志行为)
``` [+] TEST_CASE_2_B_ERROR_1046 Result: LOGGED >> Actual Log: | 20260504 04:45:05,...,QUERY,mysql,'SELECT * FROM user',1046 [+] TEST_CASE_3_COMMENT_SET_PASSWORD Result: LOGGED >> Actual Log: | 20260504 04:45:07,...,QUERY,mysql,'SET PASSWORD # CVE-2026-3494 Test ...',1133 ```MariaDB 11.8.6(观察到日志遗漏)
``` [+] TEST_CASE_2_B_ERROR_1046 (No database selected) Result: NOT LOGGED <-- Omission detected [+] TEST_CASE_3_COMMENT_SET_PASSWORD (Inline Comment #) Result: NOT LOGGED <-- Omission detected ```标签:CVE-2026-3494, DCL语句, Docker Compose, MariaDB, Maven, PoC, Proof of Concept, server_audit插件, SQL解析, 内联注释, 子域名变形, 安全测试, 审计日志绕过, 攻击性安全, 数据泄露, 日志遗漏, 暴力破解, 漏洞复现, 漏洞验证, 版本回归, 版权保护, 环境搭建, 网络安全, 请求拦截, 逆向工具, 隐私保护