CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-70612

CVE-2026-70612: Iframe Sandbox Escape and Host Protocol Launch in Electron

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 5, 2026·6 min read·56 visits

Executive Summary (TL;DR)

A validation flaw in Electron allowed sandboxed iframes to bypass security restrictions and launch OS-registered external protocol handlers without authorization.

Improper access control in Electron versions prior to 39.8.8, 40.9.0, 41.2.1, and 42.0.0-beta.3 allowed sandboxed iframes to bypass sandbox restrictions and trigger external application protocols on the host operating system. The application's custom permission handler was also not provided with the frame's sandbox state, preventing effective validation of the request context.

Vulnerability Overview

Electron is a widely adopted framework designed for building desktop applications using Chromium and Node.js. A critical component of its security architecture is the multi-process model, where web pages run within isolated renderer processes, and privileged operations are delegated to the main (browser) process. To securely isolate third-party or untrusted content, developers routinely load arbitrary web resources inside an <iframe> configured with the HTML5 sandbox attribute.

In standard Chromium architectures, a sandboxed iframe is restricted from performing actions that cross security boundaries, such as navigating the top-level window to custom external protocols (e.g., skype:, zoommtg:, mailto:, or custom URI handlers). These restrictions prevent untrusted code from executing arbitrary commands or calling third-party system applications that might contain vulnerability surface areas of their own.

CVE-2026-70612 represents an access control breakdown where Electron overridden handlers failed to propagate the sandbox state from the Blink renderer layer to the host application's decision engine. Consequently, a nested sandboxed subframe could execute a navigation request to arbitrary custom schemes, forcing the operating system to launch associated software binary packages outside the Electron sandbox boundary.

Root Cause Analysis

The root cause of this vulnerability lies in Electron's custom implementation of the Chromium browser-side interface HandleExternalProtocol. Chromium implements defensive checks inside its navigation pipeline to prevent sandboxed documents from launching external applications. These validations assess the initiating document's WebSandboxFlags to ensure that custom protocol navigations are explicitly permitted by the sandbox configuration (such as having the allow-top-navigation-to-custom-protocols or allow-top-navigation tokens).

Electron overrides ContentBrowserClient::HandleExternalProtocol inside its browser core (shell/browser/electron_browser_client.cc) to hook navigation requests and direct them through Electron's JS-facing shell.openExternal permission system. However, the overridden signature of HandleExternalProtocol did not preserve or process the sandbox_flags and is_primary_main_frame boolean arguments that Chromium's content layer provides to indicate the structural origin and isolation constraints of the requesting frame.

Because these critical parameters were omitted when transitioning execution to the UI thread via HandleExternalProtocolInUI, the application's internal handler operated under the false assumption that all requests were initiated by a trusted, top-level frame. Furthermore, because the frame's sandbox state was never populated, any user-configured setPermissionRequestHandler callbacks executed without vital contextual information, causing default-allow handlers to authorize the launch of external software packages.

Code Patch Analysis

The security patch introduced across the active branches of Electron directly resolves the missing state propagation and adds the required validation steps inside the core browser client.

// Vulnerable method signature in shell/browser/electron_browser_client.cc
void HandleExternalProtocolInUI(
    const GURL& url,
    content::WeakDocumentPtr document_ptr,
    content::WebContents::OnceGetter web_contents_getter,
    bool has_user_gesture) { 
    // Lack of is_primary_main_frame and sandbox_flags allowed processing of sandboxed iframe requests
}

To remediate this, the signature was updated to include the network mojom sandbox flags and structural boolean values:

// Patched method signature and logic in shell/browser/electron_browser_client.cc
void HandleExternalProtocolInUI(
    const GURL& url,
    content::WeakDocumentPtr document_ptr,
    content::WebContents::OnceGetter web_contents_getter,
    bool has_user_gesture,
    bool is_primary_main_frame,
    network::mojom::WebSandboxFlags sandbox_flags) {
  content::WebContents* web_contents = std::move(web_contents_getter).Run();
  if (!web_contents)
    return;
 
  content::RenderFrameHost* rfh = nullptr;
  if (document_ptr) {
    rfh = document_ptr.GetAsRenderFrameHost();
  }
  if (!rfh) {
    rfh = web_contents->GetPrimaryMainFrame();
  }
 
  // Sandboxed iframes without one of the appropriate sandbox-escape tokens
  // must not be able to launch external protocol handlers.
  if (!is_primary_main_frame) {
    using SandboxFlags = network::mojom::WebSandboxFlags;
    auto allow = [sandbox_flags](SandboxFlags flag) {
      return (sandbox_flags & flag) == SandboxFlags::kNone;
    };
    const bool allowed = allow(SandboxFlags::kTopNavigationToCustomProtocols) ||
                         (allow(SandboxFlags::kTopNavigationByUserActivation) &&
                          has_user_gesture);
    if (!allowed) {
      rfh->AddMessageToConsole(
          blink::mojom::ConsoleMessageLevel::kError,
          "Navigation to external protocol blocked by sandbox, because it "
          "doesn't contain any of: "
          "'allow-top-navigation-to-custom-protocols', "
          "'allow-top-navigation-by-user-activation', "
          "'allow-top-navigation', or 'allow-popups'.");
      return;
    }
  }
 
  GURL escaped_url(base::EscapeExternalHandlerValue(url.spec()));
  auto callback = base::BindOnce(&OnOpenExternal, escaped_url);
  permission_helper->RequestOpenExternalPermission(rfh, std::move(callback), has_user_gesture);
}

The fix successfully aligns Electron's navigation pathway with standard Chromium enforcement structures (crbug.com/1148777). By evaluating the bitwise intersection of sandbox_flags, the application drops unauthorized protocol navigation attempts on subframes immediately, outputting an explicit warning to the developer console.

Exploitation Methodology

To exploit this vulnerability, an attacker must have the ability to execute untrusted code (such as via Cross-Site Scripting or hosting a malicious third-party site) inside an iframe of an affected Electron application. The hosting window would load the attacker-controlled URL with standard sandbox restrictions:

<iframe sandbox="allow-scripts" src="https://attacker.com/payload.html"></iframe>

Once loaded inside the sandboxed iframe, the attacker executes JavaScript to trigger a navigation event targeting a specific protocol registered on the victim's host operating system. Because the sandbox attributes are bypassed during external protocol evaluation in vulnerable Electron versions, this command is forwarded directly to the operating system:

// Inside payload.html
window.location.href = "ms-settings:workplace";
// Or other application-defined protocols known to accept argument parameters

The operating system then resolves the custom scheme handler and attempts to execute the target binary. Depending on the nature of the registered protocol handlers on the user's workstation, this can lead to arguments being injected into command-line utilities, potentially achieving remote code execution (RCE) on the host computer system.

Impact Assessment

The security threat posed by this vulnerability varies from system to system, depending heavily on the external protocol handlers configured on the underlying operating system. The base vulnerability allows a sandboxed subframe context to achieve sandbox escape by shifting execution flow to processes external to Electron.

In scenarios where the host system has vulnerable handlers registered (for example, utility handlers that perform insecure file actions or allow command execution through argument manipulation), an unauthenticated attacker could transition from a low-privilege script execution environment within an iframe to full remote code execution inside the operating system. This represents a significant breakdown of the browser-host containment boundaries.

Because the scope of the containment has been altered (S:C), and no user interaction is required for the nested iframe to trigger the navigation scheme, this vulnerability represents a medium-severity issue with a CVSS base rating of 5.4. Applications that run general-purpose or untrusted web clients within sandboxed frames are at the highest level of risk.

Remediation and Mitigation

The ultimate remediation is to upgrade to a version of Electron that contains the official validation fix. These patches are backported to the primary support branches:

  • Electron 39.8.8
  • Electron 40.9.0
  • Electron 41.2.1
  • Electron 42.0.0-beta.3

If upgrading the primary Electron package is not immediately feasible, developers can employ defensive mitigations. Specifically, applications must explicitly intercept permission requests and drop external protocol attempts by overriding the session's permission request handler:

const { session } = require('electron');
 
session.defaultSession.setPermissionRequestHandler((webContents, permission, callback, details) => {
  if (permission === 'openExternal') {
    // Implement strong origin-based structural validation
    const url = details.externalURL;
    if (isTrustedProtocolAndOrigin(url, webContents.getURL())) {
      return callback(true);
    }
    // Default to denying untrusted requests
    return callback(false);
  }
  callback(true);
});

Implementing strict Content Security Policies (CSP) within nested iframes can also prevent unintended navigation redirections and execution vectors.

Official Patches

ElectronPull Request addressing the sandbox logic (Branch 39)
ElectronPull Request addressing the sandbox logic (Branch 40)
ElectronPull Request addressing the sandbox logic (Branch 41)
ElectronPull Request addressing the sandbox logic (Branch 42)

Fix Analysis (4)

Technical Appendix

CVSS Score
5.4/ 10
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N

Affected Systems

Electron applications rendering untrusted content in sandboxed iframes without rigorous custom permission handlers.

Affected Versions Detail

Product
Affected Versions
Fixed Version
electron
Electron
< 39.8.839.8.8
electron
Electron
>= 40.0.0-alpha.1 < 40.9.040.9.0
electron
Electron
>= 41.0.0-alpha.1 < 41.2.141.2.1
electron
Electron
>= 42.0.0-alpha.1 < 42.0.0-beta.342.0.0-beta.3
AttributeDetail
CWE IDCWE-284 (Improper Access Control)
Attack VectorNetwork
CVSS v3.1 Score5.4
EPSS ScoreNot indexed
ImpactMedium (Scope Change, potential host-level command execution)
Exploit StatusProof of Concept (PoC) available
KEV StatusNot listed in CISA KEV

MITRE ATT&CK Mapping

T1203Exploitation for Client Execution
Execution
T1218System Binary Execution Proxy
Defense Evasion
CWE-284
Improper Access Control

The product does not restrict or incorrectly restricts access to a resource from an unauthorized actor.

Known Exploits & Detection

GitHubOfficial advisory with details of sandbox bypassing functionality and references to testing specifications.

Vulnerability Timeline

Vulnerability identified and initial fix committed internally across branches.
2026-04-12
Advisory published and CVE-2026-70612 formally assigned.
2026-08-05

References & Sources

  • [1]Electron Security Advisory (GHSA-p2rr-rvmm-c5fp)
  • [2]Chromium Status: Restriction of navigation to custom protocols from sandboxed iframes

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 12 hours ago•CVE-2026-93363
4.3

CVE-2026-93363: Improper Access Control in Payload CMS Storage Upload Route

Payload CMS contains a missing authorization vulnerability (CWE-862) in its client-side upload instructions endpoint and the `@payloadcms/storage-vercel-blob` storage adapter. Two distinct logic defects allow authenticated users lacking collection-level `create` or `update` permissions to generate signed upload tokens and upload arbitrary files directly to external cloud storage.

Alon Barad
Alon Barad
6 views•9 min read
•about 13 hours ago•CVE-2026-55098
6.5

CVE-2026-55098: Cross-Database Authorization Bypass via DuckDB Table-Valued I/O Functions in Basekick-Labs Arc

CVE-2026-55098 (GHSA-93cm-2v4m-c56c) is an authorization bypass and sensitive information disclosure vulnerability in Basekick-Labs Arc prior to version 26.06.2. The flaw stems from an incomplete remediation of CVE-2026-47735, which failed to restrict the full suite of DuckDB table-valued filesystem I/O functions and quoted-identifier invocations. Because Arc's query parser ignores function calls during table reference extraction, authenticated users with minimal or empty permissions can invoke functions like parquet_scan(), glob(), and read_blob() to read, enumerate, and extract telemetry data across all tenant databases residing within the shared local storage root.

Alon Barad
Alon Barad
6 views•10 min read
•about 14 hours ago•CVE-2026-113787
6.1

CVE-2026-113787: Stored Cross-Site Scripting via Unescaped Style Attributes in odf-kit

CVE-2026-113787 is a stored Cross-Site Scripting (XSS) and HTML injection vulnerability affecting the odf-kit npm package from version 0.6.0 prior to 0.14.2. The HTML conversion engines (odtToHtml and odsToHtml) interpolate document-controlled styling and image attributes directly into inline style and src attributes without escaping double-quote characters. A remote attacker can supply a crafted .odt or .ods document to break out of HTML attribute boundaries and execute arbitrary JavaScript in the context of any web application rendering the converted HTML.

Alon Barad
Alon Barad
7 views•11 min read
•1 day ago•GHSA-M3QR-FVP4-78XJ
5.3

GHSA-m3qr-fvp4-78xj: Authentication Bypass and Log Disclosure in Basekick Labs Arc

GHSA-m3qr-fvp4-78xj is an authentication bypass and information disclosure vulnerability in Arc, an open-source, SQL-native time-series database developed by Basekick Labs and written in Go. Due to an improper route registration sequence within the Go Fiber HTTP server initialization pipeline, the application registered the /api/v1/logs endpoint prior to mounting the global authentication middleware. Because Fiber evaluates route handlers in strict declaration order and terminates request traversal when a handler returns without invoking c.Next(), unauthenticated remote callers can query the logs endpoint and retrieve up to 10,000 buffered operational log entries even when authentication is enabled.

Alon Barad
Alon Barad
9 views•8 min read
•1 day ago•CVE-2026-62848
7.3

CVE-2026-62848: Local Arbitrary Code Execution via Unsafe Deserialization in Metalama Named Pipe IPC

CVE-2026-62848 (GHSA-h26j-4vp7-x9w2) is a high-severity unsafe deserialization vulnerability in Metalama, a Roslyn-based meta-programming and code generation framework for C#. The flaw resides in the inter-process communication (IPC) channel used by Metalama within Microsoft Visual Studio. Across versions 2023.0 through 2026.1.18, the framework utilized either Newtonsoft.Json with TypeNameHandling.All or MessagePack with TypelessObjectResolver over local Windows named pipes without enforcing a strict type allow-list. Because the named pipes use predictable identifiers, any local process running under the same Windows user session can connect to the endpoint and transmit crafted serialized payloads, resulting in arbitrary Common Language Runtime (CLR) type instantiation and code execution within the host Visual Studio process.

Alon Barad
Alon Barad
10 views•9 min read
•1 day ago•GHSA-9PPR-WFW9-XVR2
5.3

GHSA-9ppr-wfw9-xvr2: DNS Cache TTL Manipulation Failure in Netfoil via Go Value-Copy Range Iteration

A logic flaw in github.com/tinfoil-factory/netfoil versions 0.3.0 through 0.6.0 prevents the DNS proxy from properly decrementing Time-To-Live (TTL) values on cached DNS responses and enforcing configured maximum TTL limits. Due to an idiomatic Go programming mistake where a range loop modifies value copies of slice elements rather than the underlying slice array, netfoil continually serves DNS answers with their original static TTLs. This condition causes downstream clients and resolvers to retain stale DNS records beyond their intended expiration window and bypasses local MaxTTL administrative policies.

Alon Barad
Alon Barad
8 views•10 min read