CVE-2026-9638CVE-2026-9638是Crypt::PBKDF2 Perl库中的一个高危安全漏洞,CVSS评分7.5。该漏洞影响0.261630之前的所有版本。问题根源在于这些版本使用Perl内置的rand()函数生成密码学盐值(salt),而rand()函数生成的是伪随机数,其输出具有可预测性,不适合用于安全敏感的加密场景。攻击者可以通过预测salt值来加速暴力破解或字典攻击,从而可能破解使用该库进行密码哈希的应用程序。密码学盐值的主要作用是确保相同密码在不同用户或不同场景下产生不同的哈希值,防止预计算攻击(如彩虹表攻击)。当salt可预测时,这一保护机制将完全失效,攻击者可以预先计算常见密码的哈希值并快速比对。该漏洞无需认证即可远程利用,且攻击复杂度低,对使用受影响版本Crypt::PBKDF2的应用程序构成严重威胁。
Crypt::PBKDF2模块在生成盐值时调用了Perl的rand()函数。rand()是线性同余生成器(LCG),其输出序列由初始种子决定,在给定先前输出或了解种子生成方式的情况下可以预测后续值。代码第86-93行展示了问题代码:直接使用rand()生成指定长度的随机字节作为salt。正确的做法应使用Crypt::Random::Source、Crypt::Prng或类似的加密安全随机数生成器(CSPRNG)。攻击者若能获取部分salt信息或了解系统rand()的初始状态(可能通过其他漏洞或系统信息泄露),即可预测后续生成的salt值。对于使用PBKDF2进行密码存储的应用,攻击者可以预先计算常见密码+常见salt的组合哈希值,显著降低破解难度。对于使用PBKDF2派生的密钥(如加密密钥),攻击者若能预测salt并知道加密数据,可能直接派生密钥进行解密。漏洞利用路径:1. 识别目标系统使用Crypt::PBKDF2 < 0.261630;2. 获取salt生成规律或种子信息;3. 预测salt值;4. 执行离线密码破解或密钥派生攻击。