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)之间差异的实际执行日志。
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 ```
## 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. 免责声明 本项目仅用于教育和安全研究目的。请负责任地使用,未经彻底测试,请勿将这些配置应用于生产环境。
标签:CVE-2026-3494, DCL语句, Docker Compose, MariaDB, Maven, PoC, Proof of Concept, server_audit插件, SQL解析, 内联注释, 子域名变形, 安全测试, 审计日志绕过, 攻击性安全, 数据泄露, 日志遗漏, 暴力破解, 漏洞复现, 漏洞验证, 版本回归, 版权保护, 环境搭建, 网络安全, 请求拦截, 逆向工具, 隐私保护