Skip to content

Capacitor Android and iOS: remote content can be loaded at the app origin via the internal HTTP proxy path

Critical severity GitHub Reviewed Published Aug 31, 2026 in ionic-team/capacitor • Updated Oct 5, 2026

Package

npm @capacitor/android (npm)

Affected versions

>= 6.0.0, < 6.2.2
>= 7.0.0, < 7.6.9
>= 8.5.0, < 8.5.1
>= 8.3.5, < 8.4.3
>= 8.0.0, <= 8.3.4

Patched versions

6.2.2
7.6.9
8.5.1
8.4.3
npm @capacitor/ios (npm)
>= 6.0.0, < 6.2.2
>= 7.0.0, < 7.6.9
>= 8.5.0, < 8.5.1
>= 8.3.5, < 8.4.3
>= 8.0.0, <= 8.3.4
6.2.2
7.6.9
8.5.1
8.4.3
maven com.capacitorjs:core (Maven)
>= 6.0.0, < 6.2.2
>= 7.0.0, < 7.6.9
>= 8.5.0, < 8.5.1
>= 8.3.5, < 8.4.3
>= 8.0.0, <= 8.3.4
6.2.2
7.6.9
8.5.1
8.4.3
swift github.com/ionic-team/capacitor-swift-pm (Swift)
>= 6.0.0, < 6.2.2
>= 7.0.0, < 7.6.9
>= 8.5.0, < 8.5.1
>= 8.3.5, < 8.4.3
>= 8.0.0, <= 8.3.4
6.2.2
7.6.9
8.5.1
8.4.3

Description

Impact

Capacitor's WebView navigation guard validated only the host and scheme of a
target URL, not its path. Because the internal HTTP proxy path
(/_capacitor_http_interceptor_) is served at the application's own origin, a
frame navigation to it was always treated as in-app navigation and allowed.

Loading that path as a document caused the native layer to fetch an arbitrary,
caller-specified URL and return the response body to the WebView at the app's
own origin
. Script in that response then ran with full same-origin trust:
access to localStorage, cookies, and every native capability the application
exposes through its registered Capacitor plugins.

The proxy handler was additionally served regardless of whether the
CapacitorHttp plugin was enabled
, so applications that never enabled
CapacitorHttp were also affected.

Exploitation requires a victim to activate a link inside the application's
WebView. Any Capacitor application that renders user-controlled or unsanitized
links (chat messages, comments, rich-text content) is a viable delivery surface.

Both Android and iOS are affected.

Patches

Two changes on each platform:

  1. The navigation guard now blocks frame navigations whose path is the internal
    proxy path.
  2. The proxy handler is served only when CapacitorHttp is enabled, and never
    for a document (main frame) request.

Legitimate CapacitorHttp usage is unaffected. fetch and XMLHttpRequest are
subresource requests and do not pass through the navigation guard.

Upgrade to a patched version, then rebuild and redistribute your application.

Workarounds

If you cannot upgrade immediately, note first that disabling CapacitorHttp
is not sufficient
on affected versions, because the proxy path is served
regardless of that setting.

Registered plugins are consulted before the navigation guard runs, so a small
plugin can block the path. On Android, override shouldOverrideLoad(Uri url) and
return true when url.getPath() starts with /_capacitor_http_interceptor_.
On iOS, implement shouldOverrideLoad(_:) and return true for the same path.
Returning true cancels the navigation; return null/nil for all other URLs
so normal navigation is unchanged.

Independently, sanitize user-controlled link targets before rendering them in the
WebView.

References

@ItsChaceD ItsChaceD published to ionic-team/capacitor Aug 31, 2026
Published by the National Vulnerability Database Oct 1, 2026
Published to the GitHub Advisory Database Oct 5, 2026
Reviewed Oct 5, 2026
Last updated Oct 5, 2026

Severity

Critical

CVSS overall score

This score calculates overall vulnerability severity from 0 to 10 and is based on the Common Vulnerability Scoring System (CVSS).
/ 10

CVSS v3 base metrics

Attack vector
Network
Attack complexity
Low
Privileges required
None
User interaction
Required
Scope
Changed
Confidentiality
High
Integrity
High
Availability
None

CVSS v3 base metrics

Attack vector: More severe the more the remote (logically and physically) an attacker can be in order to exploit the vulnerability.
Attack complexity: More severe for the least complex attacks.
Privileges required: More severe if no privileges are required.
User interaction: More severe when no user interaction is required.
Scope: More severe when a scope change occurs, e.g. one vulnerable component impacts resources in components beyond its security scope.
Confidentiality: More severe when loss of data confidentiality is highest, measuring the level of data access available to an unauthorized user.
Integrity: More severe when loss of data integrity is the highest, measuring the consequence of data modification possible by an unauthorized user.
Availability: More severe when the loss of impacted component availability is highest.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N

EPSS score

Exploit Prediction Scoring System (EPSS)

This score estimates the probability of this vulnerability being exploited within the next 30 days. Data provided by FIRST.
(11th percentile)

Weaknesses

Origin Validation Error

The product does not properly verify that the source of data or communication is valid. Learn more on MITRE.

Unintended Proxy or Intermediary ('Confused Deputy')

The product receives a request, message, or directive from an upstream component, but the product does not sufficiently preserve the original source of the request before forwarding the request to an external actor that is outside of the product's control sphere. This causes the product to appear to be the source of the request, leading it to act as a proxy or other intermediary between the upstream component and the external actor. Learn more on MITRE.

CVE ID

CVE-2026-103922

GHSA ID

GHSA-rvm3-566m-v7fv

Source code

Credits

Loading Checking history
See something to contribute? Suggest improvements for this vulnerability.