textract 2.5.0 及之前的所有版本允许通过提供给多个提取器的文件路径进行操作系统命令注入。多条代码路径在清理不充分的情况下将该文件路径传入 child_process.exec()。能够影响文件名或路径的攻击者可以逃逸出命令行并在主机上执行任意命令。
| 产品 | 受影响版本 | 修复版本 |
|---|---|---|
| textract | 2.5.0 及之前的所有版本 | 截至 2026-03-24 尚无可用修复 |
CVE-2026-26831CWE-78 - 操作系统命令注入9.8(严重)CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hlib/extractors/doc.jslib/extractors/rtf.jslib/extractors/dxf.jslib/extractors/images.jslib/util.js其中一个示例是 doc.js 提取器:
exec('antiword -m UTF-8.txt "' + filePath + '"', ...)
另一个是 rtf.js 的路径处理,它在执行 shell 命令前仅转义空格。这无法阻止诸如 ;、反引号或 $() 等元字符。
应用程序通常在用户上传的文档上使用 textract。在这种场景下,恶意文件名可以在文本提取过程中触发命令执行。
例如,以下输入文件名:
test";whoami;".doc
在易受攻击的提取器运行时,可以逃逸出带引号的命令字符串。
截至撰写本文时,尚无已修复的 npm 版本发布。
如果您仍依赖此包:
textract。exec() 替换为参数安全的进程执行方式。