OpenClaw Gateway WebSocket Authentication Bypass RCE — CVE-2026-28466
by Orioning · 2026-07-05
- Severity
- Critical
- CVE
- CVE-2026-28466
- Category
- network
- Affected product
- OpenClaw gateway
- Affected versions
- < 2026.2.14
- Disclosed
- 2026-07-05
- Patch status
- unpatched
References
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-03 |
| Author / Researcher | Orioning |
| CVE / Advisory | CVE-2026-28466 |
| Category | network |
| Severity | Critical |
| CVSS Score | Not specified in source |
| Status | Weaponized |
| Tags | openclaw, websocket, rce, gateway, auth-bypass, node-invoke, command-injection |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | OpenClaw gateway |
| Versions Affected | < 2026.2.14 |
| Language / Platform | Python 3 (PoC), targets a Node.js/Go-style WebSocket control gateway |
| Authentication Required | No (token is accepted without proper origin/scope validation) |
| Network Access Required | Yes |
Summary
OpenClaw exposes a WebSocket control-plane gateway (/ws) used to manage connected nodes/agents. The gateway’s connect handshake accepts a client-supplied auth token and role/scope set without properly validating that the presented token is bound to the claimed operator role, allowing a remote, unauthenticated-in-practice client to complete the connect handshake with full operator.admin scopes. Once connected as an operator, the client can issue a node.invoke request calling the system.run command against a target node, which executes an arbitrary OS command and returns stdout/stderr/exit code over the same socket. The PoC automates the full chain: connect, solve the challenge/nonce, authenticate, and invoke system.run with an attacker-supplied command string.
Vulnerability Details
Root Cause
The gateway’s WebSocket connect handshake does not adequately verify that the supplied token/origin is authorized for the requested operator.admin scope before granting it, letting a client self-assert elevated scopes (operator.read, operator.write, operator.admin) that are then trusted for subsequent node.invoke calls.
Attack Vector
- Open a WebSocket connection to the OpenClaw gateway’s
/wsendpoint. - Wait for the
connect.challengeevent containing a nonce. - Send a
connectrequest declaringrole: operatorwith full scopes (operator.read,operator.write,operator.admin) and an auth token. - On successful
connectresponse, send anode.invokerequest targeting a known/guessednodeIdwithcommand: system.runand an attacker-chosen shell command. - Receive command stdout/stderr/exit code back over the socket — arbitrary remote code execution achieved.
Impact
Full remote code execution on any node managed by a vulnerable OpenClaw gateway, without legitimate prior authorization, giving an attacker complete control over the host running the invoked command.
Environment / Lab Setup
Target: OpenClaw gateway < 2026.2.14 (reachable /ws WebSocket endpoint)
Attacker: Python 3 with the `websockets` package
Proof of Concept
PoC Script
See
CVE-2026-28466.pyin this folder.
| |
The script connects to the gateway’s WebSocket endpoint, completes the challenge/connect handshake requesting operator-admin scopes, then sends a node.invoke request invoking system.run with the supplied command, printing the returned stdout/stderr/exit code.
Detection & Indicators of Compromise
Signs of compromise:
- Gateway logs showing
connecthandshakes from unfamiliar origins/user agents completing withoperator.adminscope. node.invokecalls tosystem.runwith idempotency keys not generated by known operator tooling.- Unexpected outbound process execution correlated with WebSocket gateway activity.
Remediation
| Action | Detail |
|---|---|
| Primary fix | Upgrade OpenClaw gateway to >= 2026.2.14 per GHSA-gv46-4xfq-jv58 |
| Interim mitigation | Restrict network access to the gateway /ws endpoint to trusted management networks only, and rotate/invalidate any long-lived operator tokens. |
References
Notes
Mirrored from https://github.com/Orioning/CVE-2026-28466 on 2026-07-05. Functional websocket RCE script against OpenClaw gateway; note it has a hardcoded token/origin IP baked in (likely the author’s test target, not obfuscation).
| |