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
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
>= 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
>= 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
>= 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
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
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, aframe 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 applicationexposes through its registered Capacitor plugins.
The proxy handler was additionally served regardless of whether the
CapacitorHttpplugin was enabled, so applications that never enabledCapacitorHttpwere 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:
proxy path.
CapacitorHttpis enabled, and neverfor a document (main frame) request.
Legitimate
CapacitorHttpusage is unaffected.fetchandXMLHttpRequestaresubresource 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
CapacitorHttpis 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)andreturn
truewhenurl.getPath()starts with/_capacitor_http_interceptor_.On iOS, implement
shouldOverrideLoad(_:)and returntruefor the same path.Returning
truecancels the navigation; returnnull/nilfor all other URLsso normal navigation is unchanged.
Independently, sanitize user-controlled link targets before rendering them in the
WebView.
References