CVE-2013-10031CVE-2013-10031是Plack-Middleware-Session会话中间件中的一个安全漏洞。该漏洞存在于0.17之前的所有版本,主要由于HMAC签名验证过程中使用了不安全的字符串比较方法。攻击者可以通过精确测量服务器响应时间,利用HMAC比较时的时序差异来推断或猜测有效的HMAC签名,从而绕过会话验证机制。由于该漏洞可通过网络远程利用,且无需任何认证或用户交互,因此具有较高的安全风险。受影响系统包括所有使用Plack-Middleware-Session进行会话管理的Perl/PSGI应用程序。
Plack-Middleware-Session在验证会话数据HMAC签名时,采用了标准的字符串比较操作(如eq或==操作符)进行签名验证。这种实现方式存在时序攻击漏洞,因为字符串比较函数在发现第一个不匹配字符时会立即返回,而不考虑后续字符。攻击者可以构造大量的HMAC猜测值,并通过精确测量服务器响应时间来判断每个字符是否正确。随着正确字符数量的增加,比较操作所需时间会略有增加,攻击者可以利用这种微妙的时间差异逐步推断出完整的有效HMAC签名。一旦攻击者获取有效签名,即可伪造会话cookie,冒充合法用户身份访问受保护资源。修复方案是使用恒定时间比较函数(如Crypt::Util::timing_eq或手动的位运算比较)替代标准字符串比较。