CVE-2026-8704Crypt::DSA 是一个用于 Perl 语言的 DSA(数字签名算法)实现库。在版本 1.19 及之前的版本中,该库存在一个安全漏洞。由于代码中使用了不安全的双参数 open 函数调用方式,攻击者可以利用这一缺陷。具体而言,这种调用方式允许将外部数据直接传递给文件打开操作,如果未经过适当的过滤,可能导致攻击者修改系统中现有的任意文件。该漏洞的 CVSS 评分为 6.5,属于中危级别。由于攻击无需认证且无需用户交互,通过网络即可发起攻击,因此对使用该组件的系统构成了一定的安全风险,可能影响数据的机密性和完整性。
该漏洞的根本原因在于 Crypt::DSA 库在处理文件操作时,使用了 Perl 的双参数 open 函数(例如 open(FH, $filename))。这种编程方式在 Perl 中被认为是危险的,因为它将文件名和打开模式(读、写、追加等)混合在一起。如果攻击者能够控制 $filename 变量的值,他们不仅可以指定要操作的文件路径,还可以注入特殊的模式字符(如 > 用于写入,| 用于执行管道命令)。虽然 CVE 描述主要提到“允许现有文件被修改”,这意味着攻击者可以利用 > 字符重定向输出流,从而覆盖或追加内容到服务器上的任意文件中。这种漏洞通常利用了不安全的反序列化、配置解析或直接的用户输入处理逻辑。攻击者可以通过网络向受影响的应用程序发送精心构造的恶意数据包。当应用程序解析这些数据并调用 Crypt::DSA 库的相关函数生成密钥或签名时,恶意的文件名会被传递给 open 函数。由于代码没有限制文件路径(如使用 open(FH, '<', $filename) 的三参数安全模式),攻击者可以遍历目录(例如使用 ../../../etc/passwd)或覆盖关键配置文件、脚本文件,从而实现进一步的攻击。