CVE-2026-55735 影响 Elixir 生态中的 ueberauth guardian 库(版本 1.0.0 至 2.4.1 之前)。该漏洞源于 Guardian.revoke/3 函数在撤销会话时未正确验证 JWT 的签名。具体而言,revoke/3 使用 peek/1 解码传入的 token,而 peek/1 仅对 JWT 的头部和载荷进行 base64 解码,不执行任何签名校验。解码得到的未验证 claims 会直接传递给 token 模块的 revoke 回调以及实现中的 on_revoke 回调——这些回调属于会改变状态的操作(例如从白名单中删除或向黑名单插入条目)。相比之下,refresh/2 和 exchange/4 都会先调用 decode_and_verify 完成签名验证后再处理 claims,因此 revoke/3 是唯一不验证签名就执行状态变更的路径。攻击者若能获知或猜测受害者的标识性 claims(如 jti、sub),即可使用任意密钥伪造一个携带这些 claims 的 JWT,并将其提交给任何将调用者提供的 token 汇入 Guardian.revoke/3 的端点(典型的登出或会话撤销功能)。当 token 模块依据 claims 变更状态时,受害者的合法会话会被强制注销。该漏洞构成未认证的会话撤销拒绝服务(DoS),攻击者无需知道服务端的签名密钥。目前没有证据表明该漏洞已被在野利用,也未列入 KEV。修复方案为升级到 guardian 2.4.1 或更高版本;在无法立即升级的环境中,应限制 revoke 相关端点的网络暴露,并考虑在进入 revoke 前增加额外的 token 验证逻辑。
💡 影响/原因: 该漏洞允许未认证攻击者伪造 JWT 强制注销任意用户会话,造成拒绝服务。利用门槛低(仅需猜测 jti/sub),且无需签名密钥,影响所有使用 guardian 进行会话撤销的 Elixir 应用,风险面广,应当优先修复。