Devise has a confirmable "change email" race condition that permits user to confirm email they have no access to
Key facts
- Attack vector
- Network
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- High
- Attack requirements
- None
- Impact type
- —
- Confidentiality · integrity · availability
- None · High · None
- Fix status
- Fixed
Attack profile from CVSS 4.0 · CNA. Fix status from CNA and GitHub.
Summary
Devise is an authentication solution for Rails based on Warden. Prior to version 5.0.3, a race condition in Devise's Confirmable module allows an attacker to confirm an email address they do not own. This affects any Devise application using the `reconfirmable` option (the default when using Confirmable with email changes). By sending two concurrent email change requests, an attacker can desynchronize the `confirmation_token` and `unconfirmed_email` fields. The confirmation token is sent to an email the attacker controls, but the `unconfirmed_email` in the database points to a victim's email address. When the attacker uses the token, the victim's email is confirmed on the attacker's account. This is patched in Devise v5.0.3. Users should upgrade as soon as possible. As a workaround, applications can override a specific method from Devise models to force `unconfirmed_email` to be persisted when unchanged. Note that Mongoid does not seem to respect that `will_change!` should force the attribute to be persisted, even if it did not really change, so the user might have to implement a workaround similar to Devise by setting `changed_attributes["unconfirmed_email"] = nil` as well.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- Poc
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| heartcombo | devise | before 5.0.3 | 5.0.3 | Patch available | CNA |
| — | devise (RubyGems) | before 5.0.3 | 5.0.3 | Patch available | GHSA-57hq-95w6-v4fc |
- devise Vendorheartcombo Affected before 5.0.3 Fixed in 5.0.3 Patch available CNA
- devise (RubyGems) Vendor— Affected before 5.0.3 Fixed in 5.0.3 Patch available GHSA-57hq-95w6-v4fc
CPE configurations NVD · 1
| CPE | Versions | Role | Vendor |
|---|---|---|---|
| cpe:2.3:a:heartcombo:devise:*:*:*:*:*:ruby:*:* | before 5.0.3 | Vulnerable | heartcombo |
- cpe:2.3:a:heartcombo:devise:*:*:*:*:*:ruby:*:* Versions before 5.0.3 Vulnerable ·heartcombo
Remediation
- Fix · CNA devise (heartcombo) Fixed in 5.0.3
- Fix · GHSA-57hq-95w6-v4fc devise (RubyGems) Fixed in 5.0.3 Advisory →
Vendor assessments
Timeline
- 2026-10-02 Threatist record created from CVE-2026-32700
- 2026-10-03 Alias added: GHSA-57hq-95w6-v4fc
References
Advisory 2
More heartcombo Devise vulnerabilities
- TI-2015-06843 The Devise gem before 3.5.4 for Ruby mishandles Remember Me cookies for sessions, which… CVSS 3.1HIGH 7.5
- TI-2026-29075 Devise: Open Redirect via Unvalidated `request.referrer` in Timeoutable Session Timeout Handler CVSS 3.1MEDIUM 6.1
Sources
- CVE-2026-32700 · CVE Program
- CVE-2026-32700 · NVD
- FIRST EPSS
- GHSA-57hq-95w6-v4fc · GitHub Advisory Database · CC BY 4.0
- CVE-2026-32700 · Red Hat security data · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences