CVE-2026-46473Perl语言模块Authen::TOTP在0.1.1之前的版本中存在严重的安全设计缺陷。该模块负责生成双因素认证(TOTP)所需的共享密钥,但错误地使用了Perl内置的rand函数。由于rand并非密码学安全的随机数生成器,其输出具有可预测性,导致生成的TOTP密钥强度不足。攻击者可利用此缺陷预测密钥,进而生成有效的验证码,从而完全绕过双因素认证机制,非法获取系统访问权限。
该漏洞的根源在于Perl内置的rand函数不具备密码学安全性。rand通常使用伪随机数生成算法(如线性同余发生器),其内部状态可以通过观察少量输出序列进行数学推导。在Authen::TOTP受影响版本中,生成密钥时直接依赖rand选择字符。由于rand的种子通常与系统时间、进程ID(PID)等环境信息相关,攻击者如果能够获知密钥生成的大致时间范围或进程上下文,便能通过暴力枚举种子或统计预测的方式,恢复出随机数生成器的状态。一旦还原了生成逻辑,攻击者即可计算出受害者服务端的共享密钥。利用该密钥,攻击者可以本地计算出合法的TOTP动态验证码,在无需用户手机或令牌的情况下,成功通过双因素认证验证,导致账户被接管。