CVE-2026-43893exiftool-vendored 是一个广泛使用的 Node.js 库,用于提供 ExifTool 的跨平台访问功能。在 35.19.0 之前的版本中,该库被披露存在一个高危安全漏洞(CVE-2026-43893)。漏洞成因在于库在启动 ExifTool 时使用了 `-stay_open True` 模式,并通过标准输入逐行读取参数。在此模式下,多个调用方提供的字符串未经充分过滤便被插入到 ExifTool 参数中。攻击者可以通过在这些字符串中注入换行符或回车符,将原本单一的参数分割为多个参数,从而实现参数注入。尽管目前尚未证实该漏洞可导致远程代码执行,但攻击者可利用此漏洞读取 ExifTool 进程权限下的任意文件,或将输出写入攻击者指定的文件系统路径。官方已在 35.19.0 版本中修复了此问题,增加了对不安全控制字符的拒绝机制。
CVE-2026-43893 的核心在于参数注入。`exiftool-vendored` 为了提高性能,使用了 ExifTool 的 `-stay_open True -@ -` 模式。在这种持久化模式下,Node.js 进程与 ExifTool 子进程保持通信,并通过 stdin 发送指令。每个指令通常代表一个参数。
漏洞触发点在于,当应用程序将用户可控的字符串(如文件名、元数据标签值等)传递给 `exiftool-vendored` 的 API 时,库没有验证这些字符串中是否包含换行符(\n)、回车符(\r)或空字节(\0)。由于 ExifTool 按行解析 stdin 中的参数,一旦检测到换行符,它会认为当前参数结束,后续内容作为新的参数开始。
攻击者利用这一特性,可以构造恶意的输入字符串。例如,在一个原本用于指定文件名的参数中插入 `\n-TextOut\n/tmp/pwned.txt`。这会导致 ExifTool 不仅处理原文件名,还会执行 `-TextOut` 命令,将后续输出重定向到攻击者指定的路径。同理,通过注入特定的读取参数,攻击者可能诱导 ExifTool 读取服务器上的敏感配置文件(如 `/etc/passwd`)并将其内容包含在返回结果中。
由于 ExifTool 功能强大,参数众多,这种注入方式对系统的完整性和机密性构成了严重威胁(CVSS 完整性影响为高)。虽然目前没有公开的 RCE 漏洞利用代码,但文件读写能力已足够危险。修复后的 35.19.0 版本引入了严格的输入验证机制,会自动检测并拒绝包含上述控制字符的输入,从而从根本上切断了攻击链。