CVE-2026-39324Rack::Session是Rack框架的会话管理实现组件。在2.0.0至2.1.2之前的版本中,Rack::Session::Cookie在配置了加密密钥时,错误地处理了cookie解密失败的情况。当解密过程失败时,系统没有拒绝该无效cookie,而是回退到了默认的解码器。这使得未经身份验证的攻击者可以在不知道密钥的情况下,提供精心构造的恶意会话cookie。由于服务器接受了这些非法数据作为有效会话状态,攻击者可以操纵会话内容,从而绕过身份验证并获得系统的未授权访问。
该漏洞的根本原因在于Rack::Session::Cookie的错误处理逻辑存在缺陷。在正常流程中,服务端应使用配置的密钥对客户端传来的cookie进行解密和签名验证。然而,受影响的版本在解密失败(如签名不匹配或密文格式错误)时,并未执行中断操作,而是意外地回退到了默认的解码器。这种回退机制通常仅涉及Base64解码和Marshal反序列化,完全绕过了加密保护。攻击者利用此逻辑漏洞,可以生成一个恶意的序列化对象(例如包含管理员权限标识的Ruby Hash),对其进行Base64编码并发送给服务器。服务器在尝试验证失败后,将其作为未加密数据进行解析并加载到会话环境中。这导致攻击者能够完全控制会话数据,实现身份伪造甚至可能触发进一步的反序列化攻击。