Feb 17, 2026·5 min read·1 visit
OpenClaw's code thought '0.0.0.0' was a safe loopback address. It wasn't. This logic error exposed the Chrome DevTools Protocol to the network, allowing remote attackers to hijack browsers and steal credentials.
OpenClaw (formerly Clawdbot), a personal AI assistant, contained a critical network binding vulnerability where the application incorrectly treated wildcard IP addresses (0.0.0.0) as loopback addresses. This allowed the sensitive Chrome extension relay service—intended only for local communication—to be exposed to the entire network, granting remote attackers control over the victim's browser via the Chrome DevTools Protocol.
Personal AI assistants are the new shiny toys. We give them access to our calendars, our emails, and, via browser extensions, our active web sessions. OpenClaw (formerly Clawdbot) is one such tool, designed to automate your digital life by bridging the gap between a desktop agent and your Chrome browser. To make this magic happen, it spins up a local relay server.
Ideally, this relay is a whisper—a private conversation between the agent and the browser running on localhost. It utilizes the Chrome DevTools Protocol (CDP), a powerful interface that allows for deep inspection and control of the browser. If you control the CDP, you control the user.
But in OpenClaw's case, the implementation of "privacy" was strictly optional. Due to a fundamental misunderstanding of network interfaces, this private whisper was turned into a broadcast, inviting anyone on the local network (or the internet, if you're unlucky enough to be on a public IP) to drive your browser like a stolen car.
The root cause here is a classic developer face-palm moment: confusing binding addresses with security boundaries. The application needed a way to verify if the host it was about to bind to was "local" and therefore safe. To do this, they implemented a utility function called isLoopbackHost.
In networking 101, 127.0.0.1 (loopback) means "me," and 0.0.0.0 (wildcard) means "everyone." If you bind a server to 0.0.0.0, the operating system listens on every available network interface. If you bind to 127.0.0.1, it only listens to internal traffic.
OpenClaw's developers decided that 0.0.0.0 looked close enough to localhost to be considered safe. They wrote a whitelist that explicitly authorized the wildcard address as a loopback equivalent. This is akin to locking your front door (127.0.0.1) but deciding that leaving all the windows and the back door wide open (0.0.0.0) is basically the same thing because they are all part of the house.
Let's look at the smoking gun. This function was used to validate configuration inputs. If this returned true, the application assumed it was binding to a safe, local-only environment. Note the inclusion of both 0.0.0.0 and the IPv6 equivalent ::.
The Vulnerable Code (src/browser/extension-relay.ts context):
function isLoopbackHost(host: string) {
const h = host.trim().toLowerCase();
return (
h === "localhost" ||
h === "127.0.0.1" ||
h === "0.0.0.0" || // <--- HERE IS THE CRIME
h === "[::1]" ||
h === "::1" ||
h === "[::]" || // <--- AND HERE (IPv6)
h === "::" // <--- AND HERE
);
}Because of this list, if a user or a container configuration specified 0.0.0.0 as the host (common in Docker or VPS setups to ensure connectivity), OpenClaw would happily oblige, thinking it was still in "private mode."
The fix, introduced in commit 8d75a496bf5aaab1755c56cf48502d967c75a1d0, finally acknowledges that 0.0.0.0 is definitely not loopback. They switched to a more robust check that actually parses the IP.
The Fix (src/gateway/net.ts):
export function isLoopbackHost(host: string): boolean {
if (!host) return false;
const h = host.trim().toLowerCase();
if (h === "localhost") return true;
// ... stripping brackets ...
// explicitly uses a library or logic that knows 0.0.0.0 != 127.0.0.1
return isLoopbackAddress(unbracket);
}So, how do we weaponize this? If an OpenClaw instance is running and bound to 0.0.0.0, it exposes a WebSocket server used for the Chrome extension relay. This isn't some custom, obscure protocol—it's standard Chrome DevTools Protocol (CDP).
An attacker on the same LAN (or WAN, if no firewall exists) simply scans for the OpenClaw port. Once found, they initiate a WebSocket connection. There is no heavy authentication gatekeeping this specific relay connection in vulnerable versions because the system assumed the connection was local.
Once connected, the attacker can send JSON payloads to execute arbitrary JavaScript in the context of the victim's browser.
This bypasses the need for phishing or malware on the victim's machine. The victim just needs to have the "helpful" AI assistant running.
The impact of this vulnerability is catastrophic for the user's privacy. We aren't just talking about crashing the application; we are talking about full session hijacking.
Because the attacker gains access to the CDP, they can:
For an AI assistant marketed as a "second brain," this vulnerability effectively gives that brain a lobotomy and replaces it with a malicious actor.
The remediation is straightforward: stop lying to your code about what an IP address means. The patch removes the wildcard addresses from the isLoopbackHost allowlist.
If you are running OpenClaw, you must upgrade to v2026.2.12 immediately.
If you cannot patch for some reason (why?), you must ensure your host firewall (iptables, Windows Firewall) strictly blocks external access to the ports OpenClaw uses. Never rely on the application layer to enforce network segmentation when the application layer thinks 0.0.0.0 is a secure local address.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H| Product | Affected Versions | Fixed Version |
|---|---|---|
OpenClaw OpenClaw | < 2026.2.12 | 2026.2.12 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-1327 |
| Attack Vector | Network |
| CVSS | 9.8 (Critical) |
| Impact | Remote Code Execution / Session Hijacking |
| Affected Component | Chrome Extension Relay / CDP Endpoint |
| Status | Patched |