Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain target's email address via OSINT
-
DeliveryPre-register email on Chatwoot instance with attacker-controlled password
-
ExploitWait for victim to sign in via Google OAuth
-
ExecutionOAuth callback confirms pre-registered account without resetting password
-
PersistAttacker authenticates with original password
-
ImpactExfiltrate PII, API keys, and conversation data from victim's workspace
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Ownership verification
|
| Exploitation Conditions | Exploitation requires that the Chatwoot instance has an OmniAuth provider (specifically Google OAuth2 or any other configured OmniAuth integration) enabled and reachable for user registration and login. The attacker must pre-register the victim's email address before the victim's first OAuth-based sign-in - once the victim has authenticated via OAuth on a clean (non-pre-registered) account, the attack window for that user is closed. The victim must interact (UI:R) by choosing OAuth login rather than password-based login; a victim who exclusively uses password authentication is not exposed to this specific path. The attack does not require the attacker to hold any prior authentication (PR:N) or system privileges. Exploitation is not automatable per SSVC ('Automatable: no'), as it depends on the attacker correctly predicting which email addresses will later be used with OAuth. Deployments with OAuth disabled, or where email confirmation is enforced at the infrastructure level before account activation, are not exploitable via this path. |
| Impact | CVSS 6.8 (Medium) with vector AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N reflects a network-accessible attack requiring no attacker privileges but imposing high complexity (attacker must know and claim the victim's email before the victim's first registration) and user interaction (victim must choose OAuth login). The C:H and I:H scores are consistent with SSVC's 'Technical Impact: total' - a successful exploitation grants the attacker the same workspace access as the victim. However, AC:H and UI:R are genuine limiting factors: the attack window is narrow (before victim's first OAuth sign-in) and requires prior knowledge of the target email. EPSS of 0.04% at the 12th percentile and SSVC 'Exploitation: none' together indicate no observed exploitation activity, and CISA KEV listing is absent. Despite low exploitation probability, the attack is realistic in targeted scenarios (corporate email addresses discoverable via LinkedIn or data breaches), making this a meaningful risk for public-facing Chatwoot instances with OAuth enabled, particularly in B2B support environments handling sensitive customer data. No conflicting signals between data sources were identified. |
| Exploit ScenarioDerived | An attacker discovers a target's corporate email address (e.g., from a LinkedIn profile or leaked contact list), navigates to a public-facing Chatwoot instance's registration page, and pre-registers that email with a password they control before the legitimate user ever creates an account. When the legitimate user later clicks 'Sign in with Google,' the OmniAuth callback silently confirms the pre-existing unconfirmed account without resetting the password, and the attacker subsequently logs in with their original credentials to access the victim's customer support conversations, stored PII, and API keys. No public exploit code has been identified at time of analysis; the attack requires only knowledge of the target's email address and access to the Chatwoot registration endpoint. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jun 08, 2026
Pre-Account Takeover in Chatwoot's OmniAuth integration affects all releases from 2.14.0 through 4.12.x, allowing an attacker who pre-registers a victim's email address to retain persistent login access after the legitimate owner authenticates via Google OAuth. The OAuth callback controller failed to invalidate attacker-set password credentials when confirming a pre-existing unconfirmed account, leaving the attacker's session viable indefinitely. No public exploit identified at time of analysis and EPSS is 0.04% (12th percentile), consistent with SSVC's 'Exploitation: none' finding, though SSVC rates technical impact as 'total' given the attacker gains full workspace access including PII, API keys, and conversation history.
RemediationAI
Upgrade to Chatwoot 4.13.0, the vendor-confirmed fixed release documented in security advisory GHSA-8qxm-4p4p-cfhm and implemented via commit 211fb1102dd208daee414cff1b8d71ea27ac5ebf (https://github.com/chatwoot/chatwoot/commit/211fb1102dd208daee414cff1b8d71ea27ac5ebf) and PR #13878 (https://github.com/chatwoot/chatwoot/pull/13878). If immediate upgrade is not possible, disabling Google OAuth and all OmniAuth providers in Chatwoot's installation settings removes the trigger condition entirely; note this forces all users to password-based login and will break any existing SSO or social-login workflows. As a targeted compensating control, administrators can audit for unconfirmed user accounts (accounts where confirmed_at is null) with email addresses matching known user or corporate domains, then force-confirm legitimate accounts or delete suspicious pre-registered ones - this closes the attack window for already-staged pre-ATO attempts. Neither workaround substitutes for patching, as the underlying confirmation logic flaw persists.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is CWE-283 (Unverified Ownership): Chatwoot's Devise-based OmniAuth callback controller at app/controllers/devise_overrides/omniauth_callbacks_controller.rb called skip_confirmation! during an OAuth sign-in to mark an account as confirmed, but never checked whether a persisted, unconfirmed record with attacker-controlled credentials already existed for that email. Because skip_confirmation! sets confirmed_at in place, the account transitioned to confirmed status while retaining whatever password was previously set by the pre-registrant. The PR #13878 fix introduces two guard methods: oauth_user_needs_password_reset? (detects persisted-but-unconfirmed accounts) and set_random_password_if_oauth_user (overwrites the stored password digest with a cryptographically random value satisfying Devise secure_password requirements before confirmation proceeds), neutralizing any attacker-set credential. The affected CPE is cpe:2.3:a:chatwoot:chatwoot:*:*:*:*:*:*:*:*, encompassing the full version range from 2.14.0 onward until the fix.
Know when Chatwoot gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N
Primary rating from Vendor (GitHub_M) · only source for this CVE.
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Chatwoot is a customer engagement suite. From 2.14.0 to before 4.13.0, a Pre-Account Takeover (Pre-ATO) vulnerability existed in Chatwoot's authentication flow. Because email confirmation was not enforced before an account became usable, an attacker could pre-register an email address they did not own and set a password. If the legitimate owner of that email later signed in to Chatwoot using Google OAuth (or another OmniAuth provider), the OAuth flow silently confirmed the existing account without invalidating the attacker's pre-set credentials. The attacker could then continue to log in with the password they had originally chosen and access any data the victim subsequently entered into the dashboard, including PII, API keys, and other sensitive information. This vulnerability is fixed in 4.13.0.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Impact varies for each individual vulnerability in the application. Rated critical severity (CVSS 9.8), this vulnerabili
Unauthenticated arbitrary blob creation in Chatwoot before 4.16.0 lets remote attackers abuse the ActiveStorage direct-u
chatwoot is vulnerable to Inefficient Regular Expression Complexity. Rated high severity (CVSS 7.5), this vulnerability
Improper Authorization in GitHub repository chatwoot/chatwoot prior to 2.8. Rated high severity (CVSS 7.1), this vulnera
Cross-site Scripting (XSS) - DOM in GitHub repository chatwoot/chatwoot prior to 2.7.0. Rated medium severity (CVSS 6.1)
Insecure Storage of Sensitive Information in GitHub repository chatwoot/chatwoot prior to 2.6.0. Rated medium severity (
Cross-site Scripting (XSS) - Stored in GitHub repository chatwoot/chatwoot prior to 2.5.0. Rated medium severity (CVSS 5
A stored cross-site scripting (XSS) vulnerability exists in chatwoot/chatwoot versions 3.0.0 to 3.5.1. Rated medium seve
SQL injection in Chatwoot versions 2.2.0 through 4.11.1 allows any authenticated account user to execute arbitrary SQL v
Chatwoot's multi-tenant API fails to restrict the `account_id` parameter in four controllers (Portals, Automation Rules,
Cross-site scripting (XSS) in Chatwoot up to version 4.7.0 allows remote attackers to inject malicious scripts via the L
Server-side request forgery in Chatwoot's Shopify OAuth integration allows an authenticated user to make the Chatwoot se
EUVD-2026-31916
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB