Skip to main content

Ionic Capacitor EUVDEUVD-2026-90973

| CVE-2026-103922 CRITICAL
Origin Validation Error (CWE-346)
2026-10-01 GitHub_M GHSA-rvm3-566m-v7fv
9.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Lure victim to activate untrusted link
  2. Delivery
    Navigate frame to /_capacitor_http_interceptor_ path
  3. Exploit
    Native proxy fetches attacker-controlled URL
  4. Execution
    Response rendered as document at app origin
  5. Impact
    Exfiltrate same-origin storage/cookies and invoke plugins

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Origin validation
Exploitation Conditions

The victim must be running a mobile app built on an affected Capacitor release (6.0.0 up to but not including 6.2.2 / 7.6.9 / 8.3.5 / 8.4.3 / 8.5.1) on Android or iOS, and must activate an attacker-supplied untrusted link inside the app's WebView (UI:R is the primary limiting factor). No authentication and no special configuration are required: critically, the app remains exploitable even when the CapacitorHttp plugin is DISABLED, because affected releases serve the /_capacitor_http_interceptor_ proxy path regardless of that setting - so disabling CapacitorHttp is NOT a mitigation. The realistic limiters are therefore only (1) the one required user interaction and (2) the app not yet being updated to a fixed version; there is no dependency on a non-default feature flag.

Impact

This is a genuine high-priority issue, not a CVSS-inflated one. The CVSS:3.1 vector (AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N, 9.3) describes a network-reachable, low-complexity, unauthenticated flaw whose only gating factor is a single user action (UI:R). The scope change (S:C) is well-justified: the native proxy renders attacker-fetched content inside the application's own origin, crossing the WebView security boundary, which is exactly what grounds the High confidentiality and integrity impacts (same-origin storage, cookies, and registered plugin capabilities). The CWE-346 (origin/scheme validation gap) is corroborated by the source-code evidence - the fix adds a path check in Bridge.launchIntent and gates WebViewLocalServer on request.isForMainFrame()/CapacitorHttp being enabled - so the technical mechanism is confirmed, not merely described. Exploitation status: no public exploit identified at time of analysis; there is NO EPSS score, NO CISA KEV listing, and NO POC provided in the input, so real-world exploitation signals are absent and cannot be asserted. The combination is 'high theoretical severity, unproven in-the-wild activity': treat as a priority to patch (broadly deployed framework, default-config exposure, aggravating fact that CapacitorHttp being disabled does NOT mitigate), but there is no evidence of active or automated exploitation at this time. One nuance worth verifying: the flaw is delivered over the network but ultimately abuses a locally-served proxy path, so AV:N is appropriate (attacker supplies a remote link/URL) even though the trigger is a client-side navigation.

Exploit ScenarioDerived

An attacker crafts a malicious link and lures a user of a Capacitor-based mobile app into activating it (e.g. via a message, ad, or compromised page rendered in-app). Activation navigates a frame to the app's own-origin /_capacitor_http_interceptor_ path, whose native proxy fetches an attacker-chosen URL and returns the response as a document at the app's origin, letting the attacker's script read same-origin storage and cookies and invoke registered Capacitor plugins. No public exploit code is identified in the provided data, but the GitHub security advisory and fix commits confirm the mechanism.

Act Now Prioritize within 24-48h. Why: CRITICAL severity + public POC available.
1 public PoC Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 01, 2026

Untrusted-link activation inside an Ionic Capacitor app on Android or iOS can render attacker-controlled HTML at the application's own origin via the internal /_capacitor_http_interceptor_ proxy path, giving that script full same-origin access to storage, cookies and registered Capacitor plugin capabilities. Affected releases are 6.0.0 up to (but not including) 6.2.2, 7.6.9, 8.3.5, 8.4.3 and 8.5.1; exploitation requires the victim to activate an attacker-supplied link in the WebView (UI:R) but no authentication (PR:N) and no non-default feature flag, so apps are exposed even when the CapacitorHttp plugin is disabled because vulnerable builds serve the proxy path regardless of that setting. No public exploit code or confirmed active exploitation was identified at time of analysis, though the high CVSS score of 9.3 (S:C/C:H/I:H) and the broad mobile install base make patch urgency high.

RemediationAI

Upgrade to a vendor-released fixed version on the matching maintenance line: Capacitor 6.2.2, 7.6.9, 8.3.5, 8.4.3 or 8.5.1 (see the advisory at https://github.com/ionic-team/capacitor/security/advisories/GHSA-rvm3-566m-v7fv and the fix commits such as 430356a91e1419fc66862dc09835081aa501677e for the Android Bridge path check and WebViewLocalServer main-frame restriction). Note explicitly that disabling the CapacitorHttp plugin is NOT a mitigation: vulnerable releases serve the /_capacitor_http_interceptor_ path regardless of that setting. If immediate upgrade is not possible, the effective compensating control is to prevent untrusted content from being navigated inside the app's WebView - restrict the allowNavigation configuration so only first-party/trusted hosts stay in the WebView and force all other links out to the system browser, and avoid rendering attacker-influenced links, redirects or frames that could target the reserved interceptor path. The trade-off is that broadening external-browser routing changes in-app UX for legitimate cross-origin flows and can break OAuth or deep-link handlers that expect to remain in the WebView, so it should be validated per application. Server-side URL allowlisting of any content the app loads, plus removal of any code that mirrors arbitrary user-supplied URLs into frame navigation, reduces the attack surface further but does not substitute for upgrading; no other vendor-provided workaround was identified in the available data.

Affected VersionsENISA

Android 8.5.0, < 8.5.1
Android 7.0.0, < 7.6.9
capacitor 8.0.0, < 8.3.5
core 8.3.5, < 8.4.3
capacitor 7.0.0, < 7.6.9
github.com/ionic-team/capacitor-swift-pm 8.3.5, < 8.4.3
IOS 7.0.0, < 7.6.9
core 6.0.0, < 6.2.2
github.com/ionic-team/capacitor-swift-pm 8.5.0, < 8.5.1
core 7.0.0, < 7.6.9
github.com/ionic-team/capacitor-swift-pm 6.0.0, < 6.2.2
capacitor 8.5.0, < 8.5.1
capacitor 8.3.5, < 8.4.3
Android 6.0.0, < 6.2.2
capacitor 6.0.0, < 6.2.2
Android 8.0.0, < 8.3.5
github.com/ionic-team/capacitor-swift-pm 8.0.0, < 8.3.5
IOS 6.0.0, < 6.2.2
core 8.0.0, < 8.3.5
IOS 8.3.5, < 8.4.3
github.com/ionic-team/capacitor-swift-pm 7.0.0, < 7.6.9
core 8.5.0, < 8.5.1
IOS 8.0.0, < 8.3.5
Android 8.3.5, < 8.4.3
IOS 8.5.0, < 8.5.1

Affected Packages

maven @capacitor/android fix: 6.2.2, 7.6.9, 8.4.3, 8.5.1
maven @capacitor/ios fix: 6.2.2, 7.6.9, 8.4.3, 8.5.1
maven com.capacitorjs:core fix: 6.2.2, 7.6.9, 8.4.3, 8.5.1
maven github.com/ionic-team/capacitor-swift-pm fix: 6.2.2, 7.6.9, 8.4.3, 8.5.1
npm @capacitor/android fix: 6.2.2, 7.6.9, 8.4.3, 8.5.1
npm @capacitor/ios fix: 6.2.2, 7.6.9, 8.4.3, 8.5.1
npm com.capacitorjs:core fix: 6.2.2, 7.6.9, 8.4.3, 8.5.1
npm github.com/ionic-team/capacitor-swift-pm fix: 6.2.2, 7.6.9, 8.4.3, 8.5.1
euvd android_6_0_0 fix: 6.2.2
euvd android_7_0_0 fix: 7.6.9
euvd android_8_0_0 fix: 8.3.5
euvd android_8_3_5 fix: 8.4.3
euvd android_8_5_0 fix: 8.5.1
euvd capacitor_6_0_0 fix: 6.2.2
euvd capacitor_7_0_0 fix: 7.6.9
euvd capacitor_8_0_0 fix: 8.3.5
euvd capacitor_8_3_5 fix: 8.4.3
euvd capacitor_8_5_0 fix: 8.5.1
euvd core_6_0_0 fix: 6.2.2
euvd core_7_0_0 fix: 7.6.9
euvd core_8_0_0 fix: 8.3.5
euvd core_8_3_5 fix: 8.4.3
euvd core_8_5_0 fix: 8.5.1
euvd github_com_ionic_team_capacitor_swift_pm_6_0_0 fix: 6.2.2
euvd github_com_ionic_team_capacitor_swift_pm_7_0_0 fix: 7.6.9
euvd github_com_ionic_team_capacitor_swift_pm_8_0_0 fix: 8.3.5
euvd github_com_ionic_team_capacitor_swift_pm_8_3_5 fix: 8.4.3
euvd github_com_ionic_team_capacitor_swift_pm_8_5_0 fix: 8.5.1
euvd ios_6_0_0 fix: 6.2.2
euvd ios_7_0_0 fix: 7.6.9
euvd ios_8_0_0 fix: 8.3.5
euvd ios_8_3_5 fix: 8.4.3
euvd ios_8_5_0 fix: 8.5.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 29 packages in maven, npm, 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-346 (Origin Validation Error). Capacitor is a cross-platform native runtime that serves a web application inside a native WebView at a privileged origin (https://localhost on Android, capacitor://localhost on iOS) and exposes a bridge that maps JavaScript calls to native plugins. Its navigation guard inspected only the host and scheme of a target URL, so a URL that preserved the app origin but pointed at the reserved path /_capacitor_http_interceptor_ was treated as in-app and kept inside the WebView. That path is backed by a native HTTP proxy which fetches an attacker-specified URL (via the u= parameter) and returns the response body as a document at the app origin. Because the returned document shares the origin of the real application, any script it contains executes with the same privileges as first-party app code - reading same-origin storage and cookies and invoking any registered Capacitor plugin capability through the bridge. The upstream fix adds a path check in the Android Bridge.launchIntent logic to block navigation to the interceptor path, and hardens WebViewLocalServer so the proxy is only served for XHR/fetch subresources when CapacitorHttp is explicitly enabled and never for main-frame requests; equivalent test scaffolding was added for iOS (HttpInterceptorNavigationTests). Critically, the vulnerable behaviour was not gated by the CapacitorHttp setting, so the standard hardening of disabling that plugin does not remove exposure on unpatched builds.

Know when Capacitor 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

Vendor (GitHub_M) PRIMARY 9.3 CRITICAL
AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N
vuln.today AI 9.3 CRITICAL

Attacker supplies a remote link (AV:N) with no auth (PR:N) but needs the victim to activate it (UI:R); proxied content executing at the app origin crosses the WebView boundary (S:C) exposing storage/cookies/plugins (C:H/I:H), with no availability impact (A:N).

3.1 AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:A/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Changed
Confidentiality
High
Integrity
High
Availability
None

Lifecycle Timeline

2
Patch available
Oct 01, 2026 - 18:17 EUVD
CVE Published
Oct 01, 2026 - 17:27 cve.org
CRITICAL 9.3

DescriptionCVE.org

Capacitor is a cross-platform native runtime for web applications. From 6.0.0 until 6.2.2, 7.6.9, 8.3.5, 8.4.3, and 8.5.1, the Android and iOS WebView navigation guard validates a target URL's host and scheme but not its path, allowing a victim who activates an untrusted link to navigate a frame to /_capacitor_http_interceptor_. The native proxy can fetch an attacker-selected URL and return the response as a document at the application's own origin, allowing script in that response to access same-origin storage, cookies, and registered Capacitor plugin capabilities. Applications remain affected when CapacitorHttp is disabled because affected releases serve the proxy path regardless of that setting. This issue is fixed in versions 6.2.2, 7.6.9, 8.3.5, 8.4.3, and 8.5.1.

Technical POC Analysis

No patch diff is included in the supplied evidence; this is reconstructed from the advisory.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Latest POC

1 public PoC link from github

Sign in to open the public PoC links collected for this CVE.

Executive ViewAI

Why It Matters

Ionic Capacitor mobile applications built on affected 6.x, 7.x, 8.x releases can be manipulated through a crafted link into executing attacker-controlled content as if it originated from the app itself, exposing user credentials, session cookies, locally stored data and any native device capabilities the app has registered. Because this affects applications on both Android and iOS across a very large install base and requires no authentication or special configuration to exploit, any organization shipping or distributing a Capacitor-based app faces data-disclosure and account-takeover risk at scale.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: block untrusted link activation inside the app WebView and route external links to the system browser; enforce an explicit WebView navigation allowlist and deny the /_capacitor_http_interceptor_ proxy path; disable or strictly gate deep-link/universal-link handling for untrusted senders; reduce secrets, tokens and personal data held in WebView-accessible storage and cookies and shorten session lifetimes; register only the Capacitor plugins required by the app to limit what same-origin script could reach; and monitor mobile app telemetry for anomalous in-app navigation or plugin invocation. Upgrading to the advisory's first unaffected releases (6.2.2, 7.6.9, 8.3.5, 8.4.3, 8.5.1) should be pursued as soon as vendor guidance confirms them.

Threat Intelligence Overview

EPSS Score
0.2%
Top 90% exploitable
Prevalence
High
widely-adopted cross-platform hybrid mobile app framework (Ionic ecosystem)
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub VulDB

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.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC Yes
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity + public POC available
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

66
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +46
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy