tc4dy/CVE-2026-57821-PoC-Exploit

GitHub: tc4dy/CVE-2026-57821-PoC-Exploit

针对 Apache Fineract orderBy 参数 SQL 注入漏洞(CVE-2026-57821)的概念验证与利用工具包,提供无害验证和深度数据提取两种模式。

Stars: 1 | Forks: 0

![CVE-Picture](https://raw.githubusercontent.com/tc4dy/CVE-2026-57821-PoC-Exploit/main/cvepicture.png) # 🛡️ CVE-2026-57821 – Apache Fineract SQL 注入 ## 📋 漏洞概述 **CVE-2026-57821** 是在 Apache Fineract 的 office 列表 API endpoint 中发现的一个 **SQL 注入**漏洞。 ### 🎯 受影响组件 | 属性 | 详情 | | :--- | :--- | | **Endpoint** | `/api/v1/offices` | | **Parameter** | `orderBy` | | **Method** | `GET` | | **Authentication Required** | 是(仅限已认证用户) | | **Affected Versions** | Apache Fineract ≤ 1.14.0 | | **Patched Version** | Apache Fineract 1.15.0 | ### 🧠 漏洞原理 该漏洞的存在是因为 `orderBy` 参数在未经适当清理的情况下被直接嵌入到 SQL 查询中。拥有有效凭证的攻击者可以将包含在括号 `()` 中的 **subqueries** 注入到 `orderBy` 参数中。 **为什么这能绕过之前的修复:** - CVE-2024-32838 引入了一个 `ColumnValidator` 来清理 `ORDER BY` 子句 - 该验证器无法检测到括号内的 **bare subqueries** - 这允许在 `ORDER BY` 上下文中执行任意 SQL **攻击向量示例:** GET /api/v1/offices?orderBy=(SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)&limit=1 ### ⚡ 潜在影响 | 影响 | 描述 | | :--- | :--- | | **数据窃取** | 基于时间的盲注 SQL 注入可以提取敏感的数据库内容 | | **拒绝服务** | 繁重的查询会耗尽连接池资源 | | **信息泄露** | 基于报错的技术可以暴露数据库结构和数据 | ## 👤 发现与披露 | 属性 | 详情 | | :--- | :--- | | **发现者/报告者** | Terence Monteiro (Apache Fineract Team) | | **公开披露日期** | 2026 年 7 月 14 日 | | **Patched Version** | Apache Fineract 1.15.0 | | **官方公告** | [Apache 邮件列表](https://lists.apache.org/thread/lb7zwdv7qntzy6z05gzf7m8mxw9cbgsj) | | **GitHub 修复** | [PR #6048](https://github.com/apache/fineract/pull/6048) | ## 🗄️ 支持的数据库系统 该工具包会自动检测并适配针对 **11 种不同数据库后端**的利用技术: | 数据库 | 检测方法 | 利用技术 | | :--- | :--- | :--- | | **PostgreSQL** | 基于时间 (`pg_sleep`) | 基于时间的盲注 | | **MySQL** | 基于时间 (`SLEEP`) | 基于时间的盲注 | | **MariaDB** | 基于时间 + `@@version_comment` | 基于时间的盲注 | | **MSSQL** | 基于报错 (`CONVERT` 失败) | 基于报错 | | **Oracle** | 基于时间 (`DBMS_LOCK.SLEEP`) | 基于时间的盲注 | | **SQLite** | 繁重查询 (Cartesian Join) | 基于时间 (繁重) | | **Firebird** | 繁重查询 (Cartesian Join) | 基于时间 (繁重) | | **DB2** | 繁重查询 (Cartesian Join) | 基于时间 (繁重) | | **Informix** | 繁重查询 (Cartesian Join) | 基于时间 (繁重) | | **H2** | 繁重查询 (Cartesian Join) | 基于时间 (繁重) | | **未知 (通用)** | 回退到 PostgreSQL | 基于时间 | ## 🛠️ 工具包组件 本项目提供了 **两个 Python 脚本**,用于不同的安全评估场景: ### 📊 `verifier.py` – 安全且最小化的验证工具 **目的:** 在不提取数据的情况下快速证明漏洞的存在。 **功能:** - 发送特定于数据库的测试 payload - 检测时间延迟或错误消息 - 针对每种数据库类型报告 `VULNERABLE` 或 `NOT VULNERABLE` - **不窃取任何数据** **✅ 优点:** - 极速(几秒钟内完成) - 法律风险低(仅验证是否存在) - 非常适合初步安全扫描 - 适合合规性的报告输出 **📋 使用场景:** 用于确定目标是否存在漏洞的首次评估。 ### 🔬 `exploit.py` – 全面的安全分析器 **目的:** 全面利用该漏洞来提取数据库信息。 **功能:** - 自动检测数据库类型 - 使用 **二分搜索** 逐个字符提取 - 检索:**版本、当前用户、数据库名称、表列表**(可配置) - MSSQL:基于报错的提取 - 其他:基于时间的提取,带有基线校准 **✅ 优点:** - 提供影响的 concrete evidence - 展示漏洞的全部范围 - 详细的日志记录,带有颜色编码的输出 **📋 使用场景:** 确认漏洞后的深入安全分析。 ## ⚙️ 安装与配置 ### 前置条件 - Python 3.6+ - `requests` 库 ``` pip install requests ``` ## ⚙️ 配置变量 编辑两个脚本顶部的以下变量: | 变量 | 描述 | 默认值 | | :--- | :--- | :--- | | `TARGET` | Fineract API URL | `http://localhost:8080/fineract-provider/api/v1/offices` | | `USERNAME` | API authentication 用户名 | `mifos` | | `PASSWORD` | API authentication 密码 | `password` | | `TENANT_ID` | 租户标识符 | `default` | | `BASE_SLEEP` | 基于时间测试的休眠时间 (exploit.py) | `6` | | `SLEEP_SECONDS` | 基于时间测试的休眠时间 (verifier.py) | `5` | | `TIMEOUT` | HTTP 请求超时 | `25` (exploit) / `15` (verifier) | | `MAX_RETRIES` | 失败请求的重试次数 | `2` | # 🚀 使用指南 1️⃣ verifier.py – 快速扫描 ``` python3 verifier.py ``` 预期输出: ``` CVE-2026-57821 - Apache Fineract Vulnerability Verifier ══════════════════════════════════════════════════════════════════════════════════════ @tc4dy is here :) Good Luck! CONNECTION SUCCESS BASELINE: 0.234s STARTING VULNERABILITY VERIFICATION VERIFICATION RESULTS PostgreSQL: VULNERABLE MySQL: NOT VULNERABLE MariaDB: NOT VULNERABLE Oracle: NOT VULNERABLE MSSQL: NOT VULNERABLE CONCLUSION: TARGET IS VULNERABLE (CVE-2026-57821 CONFIRMED) Interpretation: If VULNERABLE appears for any database type, the target is affected. ``` # 🎯 技术规格 CVSS 评分 指标 值 CVSS v3.1 基础评分 8.1 (高) 向量 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H 攻击向量 网络 所需权限 低 用户交互 无 EPSS 评分 ``` 0.29% (probability of exploitation within 30 days) ``` CWE 映射 ``` CWE‑89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') ``` # 🧪 技术深度剖析 Payload 为何有效 Apache Fineract 1.14.0 中的漏洞代码: ``` // Simplified vulnerable logic String orderBy = request.getParameter("orderBy"); if (ColumnValidator.isValid(orderBy)) { // VALIDATOR FAILS FOR: "(SELECT ...)" // Only checks against simple column names String sql = "SELECT * FROM offices ORDER BY " + orderBy; // Executes query with user input directly } ``` 攻击者 Payload 示例: ``` GET /api/v1/offices?orderBy=(SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)&limit=1 ``` 生成的 SQL: ``` SELECT * FROM offices ORDER BY (SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END) ``` ColumnValidator 检查了列名,但漏掉了嵌套的 subquery,从而允许执行任意 SQL。 ## 🛡️ 缓解措施 | 行动 | 优先级 | | :--- | :--- | | **升级到 Apache Fineract 1.15.0+** | 🔴 关键 | | **应用 PR #6048 补丁** | 🔴 关键 | | **WAF 规则:** 阻止包含 `(SELECT`, `SLEEP(`, `pg_sleep(`, `WAITFOR` 的 `orderBy` | 🟠 高 | | **监控日志**中带有括号或 subquery 关键字的 `orderBy` | 🟠 高 | | **数据库连接池监控** 以检测资源耗尽 | 🟡 中 |
标签:CISA项目, Python, 安全测试, 攻击性安全, 无后门, 逆向工具