CVE-2026-3690
OpenClaw Canvas Authentication Bypass Vulnerability
OpenClaw Canvas Authentication Bypass Vulnerability. This vulnerability allows remote attackers to bypass authentication on affected installations of OpenClaw. Authentication is not required to exploit this vulnerability.
The specific flaw exists within the implementation of the the authentication function for canvas endpoints. The issue results from improper implementation of authentication. An attacker can leverage this vulnerability to bypass authentication on the system. Was ZDI-CAN-29311.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
7.4
OpenClaw Canvas Authentication Bypass Vulnerability
OpenClaw Canvas Authentication Bypass Vulnerability. This vulnerability allows remote attackers to bypass authentication on affected installations of OpenClaw. Authentication is not required to exploit this vulnerability.
The specific flaw exists within the implementation of the the authentication function for canvas endpoints. The issue results from improper implementation of authentication. An attacker can leverage this vulnerability to bypass authentication on the system. Was ZDI-CAN-29311.
- Record
CVE-2026-3690- CVSS 3.0
- 7.4 High
CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-291
- Updated
- 2026-11-02
EUVDEUVD-2026-21622
7.4
OpenClaw Canvas Authentication Bypass Vulnerability. This vulnerability allows remote attackers to bypass authentication on affected installations of OpenClaw. Authentication is not required to exploit this vulnerability.
The specific flaw exists within the implementation of the the authentication function for canvas endpoints. The issue results from improper implementation of authentication. An attacker can leverage this vulnerability to bypass authentication on the system. Was ZDI-CAN-29311.
- Record
EUVD-2026-21622- CVSS 3.0
- 7.4 High
CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-93g8-mgqc-w7h9
7.4
OpenClaw Canvas Authentication Bypass Vulnerability. This vulnerability allows remote attackers...
OpenClaw Canvas Authentication Bypass Vulnerability. This vulnerability allows remote attackers to bypass authentication on affected installations of OpenClaw. Authentication is not required to exploit this vulnerability.
The specific flaw exists within the implementation of the the authentication function for canvas endpoints. The issue results from improper implementation of authentication. An attacker can leverage this vulnerability to bypass authentication on the system. Was ZDI-CAN-29311.
- Record
GHSA-93g8-mgqc-w7h9- CVSS 3.0
- 7.4 High
CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-291
- Updated
- 2026-11-02
GitHub AdvisoriesGHSA-vvjh-f6p9-5vcf
7.4
OpenClaw Canvas Authentication Bypass Vulnerability
ZDI-CAN-29311: OpenClaw Canvas Authentication Bypass Vulnerability
-- ABSTRACT -------------------------------------
Trend Micro's Zero Day Initiative has identified a vulnerability affecting the following products: OpenClaw - OpenClaw
-- VULNERABILITY DETAILS ------------------------
- Version tested: openclaw 2026.2.17
- Platform tested: macOS 26.3
Analysis
Description
The OpenClaw gateway's authorizeCanvasRequest() function implements an IP-based authentication fallback for canvas endpoints (/__openclaw__/a2ui/, /__openclaw__/canvas/, /__openclaw__/ws). When a WebSocket client authenticates from a private IP address, ALL subsequent HTTP requests from that same IP are granted canvas access without requiring their own authentication token.
In environments where multiple clients share a single IP address ��� corporate NAT, VPN concentrators, Kubernetes clusters, Docker host-mode networking ��� an unauthenticated attacker on the same network is granted full canvas access by virtue of sharing an IP with a legitimate authenticated client.
Root Cause
Three functions in src/gateway/server-http.ts create this vulnerability:
1. IP-matching function (line ~100)
function hasAuthorizedWsClientForIp(clients: Set<GatewayWsClient>, clientIp: string): boolean {
for (const client of clients) {
if (client.clientIp && client.clientIp === clientIp) {
return true;
}
}
return false;
}
This function checks if ANY connected WebSocket client shares the same IP. It does not verify that the HTTP request belongs to the same user, session, or browser as the WS client.
2. IP-based fallback in authorizeCanvasRequest (line ~109)
async function authorizeCanvasRequest(params: { ... }): Promise<GatewayAuthResult> {
// ... token check first ...
const clientIp = resolveGatewayClientIp({ ... });
// Only allow fallback for private/loopback addresses
if (!isPrivateOrLoopbackAddress(clientIp)) {
return lastAuthFailure ?? { ok: false, reason: "unauthorized" };
}
// THE VULNERABILITY: grants access based on IP alone
if (hasAuthorizedWsClientForIp(clients, clientIp)) {
return { ok: true };
}
return lastAuthFailure ?? { ok: false, reason: "unauthorized" };
}
If the HTTP request comes from a private IP that matches any authenticated WS client, access is granted without verifying the request's own credentials.
3. Canvas path routing
function isCanvasPath(pathname: string): boolean {
return (
pathname === A2UI_PATH || // /__openclaw__/a2ui
pathname.startsWith(`${A2UI_PATH}/`) ||
pathname === CANVAS_HOST_PATH || // /__openclaw__/canvas
pathname.startsWith(`${CANVAS_HOST_PATH}/`) ||
pathname === CANVAS_WS_PATH // /__openclaw__/ws
);
}
All canvas endpoints use this weaker authentication path instead of the standard authorizeGatewayConnect() which requires a valid token.
Attack Scenario
Corporate NAT Environment
- A company runs an OpenClaw gateway on an internal server with
--bind lanand a token for authentication. - Developer Alice connects her OpenClaw desktop app via WebSocket using her valid token. The gateway records her IP as the corporate NAT address (e.g.,
10.0.0.1). - Attacker Bob, on the same corporate network, also appears as
10.0.0.1to the gateway (NAT). - Bob sends an HTTP request to
http://gateway:18789/__openclaw__/a2ui/with NO authentication header. authorizeCanvasRequest()checks: Is10.0.0.1a private IP? Yes. Is there a WS client from10.0.0.1? Yes (Alice). Access granted.- Bob now has full access to all canvas endpoints ��� the A2UI interface, canvas content, and the canvas WebSocket ��� without ever authenticating.
Kubernetes / Docker Environments
In containerized deployments using shared networking (host mode, pod networking), multiple containers share the same IP. One…
- Record
GHSA-vvjh-f6p9-5vcf- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-291
- Updated
- 2026-11-02
NVD
7.4
OpenClaw Canvas Authentication Bypass Vulnerability. This vulnerability allows remote attackers to bypass authentication on affected installations of OpenClaw. Authentication is not required to exploit this vulnerability.
The specific flaw exists within the implementation of the the authentication function for canvas endpoints. The issue results from improper implementation of authentication. An attacker can leverage this vulnerability to bypass authentication on the system. Was ZDI-CAN-29311.
- Record
CVE-2026-3690- CVSS 3.0
- 7.4 High
CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-291
- Updated
- 2026-11-02
OSV
7.4
OpenClaw Canvas Authentication Bypass Vulnerability
OpenClaw Canvas Authentication Bypass Vulnerability. This vulnerability allows remote attackers to bypass authentication on affected installations of OpenClaw. Authentication is not required to exploit this vulnerability.
The specific flaw exists within the implementation of the the authentication function for canvas endpoints. The issue results from improper implementation of authentication. An attacker can leverage this vulnerability to bypass authentication on the system. Was ZDI-CAN-29311.
- Record
CVE-2026-3690- CVSS 3.0
- 7.4 High
CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-291
- Updated
- 2026-11-02
OSVGHSA-vvjh-f6p9-5vcf
7.4
OpenClaw Canvas Authentication Bypass Vulnerability
ZDI-CAN-29311: OpenClaw Canvas Authentication Bypass Vulnerability
-- ABSTRACT -------------------------------------
Trend Micro's Zero Day Initiative has identified a vulnerability affecting the following products: OpenClaw - OpenClaw
-- VULNERABILITY DETAILS ------------------------
- Version tested: openclaw 2026.2.17
- Platform tested: macOS 26.3
Analysis
Description
The OpenClaw gateway's authorizeCanvasRequest() function implements an IP-based authentication fallback for canvas endpoints (/__openclaw__/a2ui/, /__openclaw__/canvas/, /__openclaw__/ws). When a WebSocket client authenticates from a private IP address, ALL subsequent HTTP requests from that same IP are granted canvas access without requiring their own authentication token.
In environments where multiple clients share a single IP address ��� corporate NAT, VPN concentrators, Kubernetes clusters, Docker host-mode networking ��� an unauthenticated attacker on the same network is granted full canvas access by virtue of sharing an IP with a legitimate authenticated client.
Root Cause
Three functions in src/gateway/server-http.ts create this vulnerability:
1. IP-matching function (line ~100)
function hasAuthorizedWsClientForIp(clients: Set<GatewayWsClient>, clientIp: string): boolean {
for (const client of clients) {
if (client.clientIp && client.clientIp === clientIp) {
return true;
}
}
return false;
}
This function checks if ANY connected WebSocket client shares the same IP. It does not verify that the HTTP request belongs to the same user, session, or browser as the WS client.
2. IP-based fallback in authorizeCanvasRequest (line ~109)
async function authorizeCanvasRequest(params: { ... }): Promise<GatewayAuthResult> {
// ... token check first ...
const clientIp = resolveGatewayClientIp({ ... });
// Only allow fallback for private/loopback addresses
if (!isPrivateOrLoopbackAddress(clientIp)) {
return lastAuthFailure ?? { ok: false, reason: "unauthorized" };
}
// THE VULNERABILITY: grants access based on IP alone
if (hasAuthorizedWsClientForIp(clients, clientIp)) {
return { ok: true };
}
return lastAuthFailure ?? { ok: false, reason: "unauthorized" };
}
If the HTTP request comes from a private IP that matches any authenticated WS client, access is granted without verifying the request's own credentials.
3. Canvas path routing
function isCanvasPath(pathname: string): boolean {
return (
pathname === A2UI_PATH || // /__openclaw__/a2ui
pathname.startsWith(`${A2UI_PATH}/`) ||
pathname === CANVAS_HOST_PATH || // /__openclaw__/canvas
pathname.startsWith(`${CANVAS_HOST_PATH}/`) ||
pathname === CANVAS_WS_PATH // /__openclaw__/ws
);
}
All canvas endpoints use this weaker authentication path instead of the standard authorizeGatewayConnect() which requires a valid token.
Attack Scenario
Corporate NAT Environment
- A company runs an OpenClaw gateway on an internal server with
--bind lanand a token for authentication. - Developer Alice connects her OpenClaw desktop app via WebSocket using her valid token. The gateway records her IP as the corporate NAT address (e.g.,
10.0.0.1). - Attacker Bob, on the same corporate network, also appears as
10.0.0.1to the gateway (NAT). - Bob sends an HTTP request to
http://gateway:18789/__openclaw__/a2ui/with NO authentication header. authorizeCanvasRequest()checks: Is10.0.0.1a private IP? Yes. Is there a WS client from10.0.0.1? Yes (Alice). Access granted.- Bob now has full access to all canvas endpoints ��� the A2UI interface, canvas content, and the canvas WebSocket ��� without ever authenticating.
Kubernetes / Docker Environments
In containerized deployments using shared networking (host mode, pod networking), multiple containers share the same IP. One…
- Record
GHSA-vvjh-f6p9-5vcf- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-291
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
openclawnpm |
before 2026.2.19 | 2026.2.19 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-3690 is a high vulnerability (CVSS 7.4) in Openclaw, published March 4, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.67%, the 52nd percentile. Fixed in openclaw 2026.2.19.
References
zerodayinitiative.com/advisories/ZDI-26-228
github.com/openclaw/openclaw/security/advisories/GHSA-vvjh-f6p9-5vcf
nvd.nist.gov/vuln/detail/CVE-2026-3690
github.com/advisories/GHSA-93g8-mgqc-w7h9
github.com/openclaw/openclaw/commit/c45f3c5b004c8d63dc0e282e2176f8c9355d24f1
github.com/advisories/GHSA-vvjh-f6p9-5vcf
github.com/CVEProject/cvelistV5/tree/main/cves/2026/3xxx/CVE-2026-3690.json
github.com/openclaw/openclaw
Left out here: the rest of 2 source descriptions. The JSON record has them.