CVE-2026-32700CVE-2026-32700是Devise认证框架中的一个严重安全漏洞,存在于Confirmable模块中。该漏洞允许未经授权的攻击者通过竞态条件攻击确认他们不拥有的电子邮件地址。Devise是Ruby on Rails应用广泛使用的认证解决方案,基于Warden实现。在5.0.3之前的版本中,当应用使用reconfirmable选项(这是使用Confirmable进行邮箱更改时的默认设置)时,攻击者可以通过发送两个并发的邮箱更改请求来利用此漏洞。攻击者利用confirmation_token和unconfirmed_email字段之间的去同步现象,实现对受害者邮箱地址的非法确认。此漏洞可能导致账户接管、敏感信息泄露等严重安全问题,影响使用该框架的所有Web应用的安全性。
该漏洞的根本原因在于Devise的Confirmable模块在处理邮箱更改请求时存在竞态条件。具体来说,当用户请求更改邮箱时,系统会同时更新confirmation_token和unconfirmed_email字段。在并发请求场景下,这两个字段的更新时机存在时间窗口,攻击者可以利用此窗口使两个字段指向不同的邮箱地址。攻击者发送的请求中,confirmation_token被发送到攻击者控制的邮箱,但数据库中的unconfirmed_email字段却被设置为受害者的邮箱地址。当攻击者使用收到的token进行确认操作时,系统会错误地将受害者的邮箱绑定到攻击者的账户上。这种去同步现象源于Mongoid等ORM对changed_attributes的处理机制未能正确强制持久化未实际变化的属性。攻击者利用并发请求在短时间内创建多个待确认的邮箱更改,从而实现对目标邮箱的劫持。