0.0.0.0 Day: Exploiting Private Networks Through The Browser
This talk demonstrates how the 0.0.0.0 IP address can be abused to bypass browser-based security restrictions, such as CORS and Private Network Access (PNA) policies. By leveraging this behavior, attackers can perform unauthorized requests to internal services, including local development tools and AI infrastructure like Ray. The researchers show how this technique enables remote code execution (RCE) on internal applications that are otherwise protected by network boundaries. The presentation highlights the critical need for robust, standardized security controls in browsers to prevent cross-network exploitation.
Bypassing Browser Security: How 0.0.0.0 Exploits Internal Networks
TLDR: Modern browsers have long struggled to secure internal network access, and the 0.0.0.0 IP address remains a critical, often overlooked bypass for these protections. By forcing a browser to send requests to 0.0.0.0, an attacker can circumvent CORS and Private Network Access (PNA) restrictions to interact with internal services. This technique enables remote code execution on vulnerable local applications, such as AI infrastructure tools like Ray, by turning a user's browser into a proxy for internal network attacks.
Security researchers recently demonstrated that the 0.0.0.0 IP address is not just a legacy artifact but a functional bypass for modern browser security controls. While browsers have spent years hardening their defenses against cross-site request forgery and unauthorized access to internal resources, they have consistently failed to account for how the operating system and network stack resolve this specific address. This oversight allows an attacker to reach services that are supposedly isolated behind a firewall or restricted to localhost.
The Mechanics of the 0.0.0.0 Bypass
The vulnerability stems from a fundamental lack of standardization in how browsers handle internal network requests. When a browser makes a request to a public domain, it enforces CORS and PNA policies to prevent the site from interacting with private, internal resources. However, these protections often rely on the browser identifying the target as "private" or "internal."
Because 0.0.0.0 is interpreted by many operating systems as "this host on this network," it acts as a wildcard. When a browser attempts to connect to 0.0.0.0, the request is often redirected to the local loopback interface. Because the browser does not explicitly block this address in the same way it blocks 127.0.0.1 or other RFC 1918 addresses, it can be used to reach services listening on local ports. An attacker can host a malicious script on a public website that, when visited by a victim, triggers an HTTP POST request to 0.0.0.0 on a specific port. If a service is listening there, the browser will attempt to communicate with it, effectively bypassing the security boundaries that would otherwise stop a request to a private IP.
Exploiting AI Infrastructure: The Ray Case Study
The real-world impact of this technique is significant, particularly for developers running internal infrastructure. The researchers highlighted how Ray, a popular framework for scaling AI workloads, was vulnerable to this exact attack vector. Ray exposes a dashboard and API that, by default, lack robust authentication.
By sending a crafted HTTP request to the Ray API via the victim's browser, an attacker can submit arbitrary jobs to the Ray cluster. This leads to Remote Code Execution on the machine running the Ray node. The researchers identified several vulnerabilities in Ray, including CVE-2023-6019, CVE-2023-6020, CVE-2023-6021, CVE-2023-48022, and CVE-2023-48023. These vulnerabilities demonstrate that even sophisticated, widely used tools are susceptible when they assume that network-level isolation is sufficient for security.
To reproduce this, an attacker only needs to know the port the target service is listening on. A simple JavaScript snippet using the fetch API is sufficient:
fetch('http://0.0.0.0:8265/api/jobs/', {
method: 'POST',
mode: 'no-cors',
body: JSON.stringify({
entrypoint: 'echo "Exploited" > /tmp/pwned'
})
});
The no-cors mode is key here. It allows the browser to send the request even if the server does not return the appropriate CORS headers. While the browser may block the script from reading the response, the request itself is still executed by the server, which is all an attacker needs for an RCE payload.
Pentesting and Bug Bounty Implications
For those conducting penetration tests or bug bounty research, this technique is a powerful way to escalate access within a client's environment. During an engagement, look for internal services that are accessible from the local machine but not exposed to the internet. If you can find a service that accepts HTTP requests and performs actions based on those requests, you have a potential target.
This is particularly relevant for developers who use port forwarding to expose internal services for testing. If a developer has a Kubernetes pod or a local development server forwarded to a port on their machine, that service is now a target for any malicious site they visit. When reporting these issues, emphasize that network-level security is not a substitute for application-level authentication.
Defensive Strategies
Defending against this requires a multi-layered approach. First, developers must treat all internal services as if they were exposed to the public internet. This means implementing proper authentication and authorization for every API endpoint, regardless of where it is hosted. Second, organizations should ensure that their internal services are not binding to 0.0.0.0 or other interfaces that are accessible to the browser. Binding to 127.0.0.1 is a safer default, though it does not fully mitigate the risk of DNS rebinding attacks. Finally, browser vendors are working on implementing stricter PNA policies, but until these are fully standardized and adopted, the best defense remains robust application-level security.
The browser is a complex, evolving attack surface. As we continue to push more powerful tools into the browser environment, we must ensure that the security models governing these interactions keep pace. The 0.0.0.0 issue is a reminder that even the most basic components of the network stack can be turned against us if we fail to account for their behavior in a modern, web-centric world. Keep testing your assumptions, and never trust that a service is safe just because it is "internal."
Vulnerability Classes
Target Technologies
OWASP Categories
All Tags
Up Next From This Conference

Breaking Secure Web Gateways for Fun and Profit

Listen to the Whispers: Web Timing Attacks That Actually Work

Abusing Windows Hello Without a Severed Hand
Similar Talks

Kill List: Hacking an Assassination Site on the Dark Web

Unmasking the Snitch Puck: The Creepy IoT Surveillance Tech in the School Bathroom

