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



GHSA-HJVP-QHM6-WRH2

OpenClaw Node system.run Approval Context Bypass

Alon Barad
Alon Barad
Software Engineer

Mar 3, 2026·6 min read·35 visits

Executive Summary (TL;DR)

OpenClaw < 2026.2.26 allows execution approval bypass via loose context binding. Attackers can reuse approved command IDs with modified environment variables to achieve arbitrary code execution.

A critical context-binding weakness in the OpenClaw AI assistant platform allows attackers to bypass human-in-the-loop approval controls. Specifically, the `system.run` workflow in the Node host environment fails to cryptographically bind user approvals to the exact execution context, including environment variables and command arguments. This flaw permits an attacker to hijack a legitimate approval ID and reuse it to execute arbitrary code by injecting malicious environment variables (e.g., `GIT_EXTERNAL_DIFF`) or modifying arguments, effectively nullifying the security guarantees of the approval system.

Vulnerability Overview

The OpenClaw platform, designed as a personal AI assistant, includes a system.run capability that allows agents to execute shell commands on the host machine. To prevent unauthorized actions, this capability is governed by a human-in-the-loop approval workflow, particularly in host=node configurations. When an agent requests to run a command, the user must explicitly grant permission, generating a unique approval identifier associated with that specific request. This mechanism is intended to act as a security gate, ensuring that high-risk operations cannot proceed without user consent.

However, a vulnerability exists in how these approval identifiers are bound to the execution context. In affected versions, the binding mechanism relies on a loose association that primarily validates the command string but fails to enforce strict integrity over the entire runtime environment. This oversight means that the approval record does not cryptographically seal the command arguments (argv), the working directory (cwd), or, most critically, the environment variables (env) present at the time of the request.

The absence of strict context binding creates a race condition-like flaw where the parameters of an approved action can be swapped between the time of approval and the time of execution. While the system correctly verifies that a valid approval ID exists for the command being requested, it does not verify that the environment in which the command runs matches the environment the user approved. This discrepancy opens the door for environment variable injection attacks.

Root Cause Analysis

The root cause of this vulnerability is the use of a weak integrity binding between the approval artifact and the execution parameters. Specifically, the system utilized a legacy matching logic (matchLegacySystemRunApprovalBinding) that prioritized availability over strict security. This legacy logic performed a superficial check, ensuring that the requested command (e.g., git) matched the approved command, but it disregarded the volatile state of the execution environment.

In POSIX environments, the behavior of many binaries is heavily influenced by environment variables. For example, the git command's behavior can be fundamentally altered by variables such as GIT_EXTERNAL_DIFF or GIT_SSH_COMMAND, which can be used to execute arbitrary scripts. By failing to include a hash of the environment variables in the approval signature, OpenClaw treated an execution request for git status with a clean environment as identical to a request for git status with a malicious environment payload.

Additionally, the system failed to enforce canonicalization of the command arguments. The reliance on simple text matching rather than structured argv array comparison meant that subtle manipulations of arguments—such as inserting flag delimiters or leveraging shell expansion quirks—could potentially pass the approval check while altering the command's actual logic. This represents a failure to adhere to CWE-345 (Insufficient Verification of Data Authenticity) and CWE-1385 (Missing Verification in Workflow).

Code Analysis

The vulnerability resides in the src/gateway/node-invoke-system-run-approval-match.ts module, where the system validates whether a pending execution request matches a stored approval. Prior to the patch, the code allowed a fallback to a legacy matching function that lacked environment verification.

The fix introduces a strict verification protocol known as systemRunBindingV1. This new binding schema requires that every aspect of the execution context be hashed and compared. The following pseudocode illustrates the logic flow before and after the patch:

Vulnerable Logic (Simplified):

function validateApproval(request, approval) {
  // VULNERABLE: Only checks if the command string matches
  if (request.command === approval.command) {
      return true;
  }
  return false;
}

Patched Logic (Secure):

import { hashEnv } from './crypto-utils';
 
function validateApproval(request, approval) {
  // SECURE: Enforces V1 binding with environment hashing
  const currentEnvHash = hashEnv(request.env);
  
  if (approval.version !== 'v1') {
      throw new Error('Legacy approvals no longer supported');
  }
 
  // Check 1: Strict Argv Matching
  if (!deepEqual(request.argv, approval.argv)) {
      return false;
  }
 
  // Check 2: Environment Integrity
  if (currentEnvHash !== approval.envHash) {
      return false; // Blocks Env Injection
  }
 
  return true;
}

The patch (Commit 10481097f8e6dd0346db9be0b5f27570e1bdfcfa) explicitly removes the matchLegacySystemRunApprovalBinding function and enforces the matchSystemRunApprovalBindingV1 logic. It also introduces an environment blocklist for host=node flows, proactively filtering dangerous variables before they even reach the approval stage.

Exploitation Scenarios

To exploit this vulnerability, an attacker typically requires the ability to interact with the OpenClaw agent interface or compromise a low-privileged component that can request command execution. The attack vector focuses on hijacking a legitimate approval to piggyback malicious payloads.

Scenario: Environment Injection via Git

  1. Request: The attacker (or a compromised agent script) requests to run git status. This is a benign command that the user is likely to approve.
  2. Approval: The user receives a notification: "Allow agent to run 'git status'?" and clicks "Approve". The system generates an approvalId.
  3. Hijack: The attacker intercepts this approvalId. They then construct a new execution request using the same approvalId and the same command git status, but they inject the environment variable GIT_EXTERNAL_DIFF=/tmp/malicious_script.sh.
  4. Execution: The vulnerable validation logic sees that the approvalId is valid and the command is git status. It permits the execution.
  5. Payload Detonation: When git initializes, it detects the GIT_EXTERNAL_DIFF variable and executes /tmp/malicious_script.sh with the privileges of the host process, achieving arbitrary code execution.

This technique circumvents the core security promise of the tool. The user believes they authorized a safe read-only operation, but the lack of context binding allows the attacker to transmute that authorization into a full system compromise.

Impact Assessment

The impact of this vulnerability is significant for users relying on OpenClaw's approval mechanisms to secure their local environments. A successful exploit allows for Arbitrary Code Execution (ACE) on the host machine running the Node agent. Since personal AI assistants often run with the user's personal privileges (which typically include access to SSH keys, cloud credentials, and sensitive documents), the compromise is equivalent to a full user account takeover.

The vulnerability neutralizes the "Human-in-the-Loop" security control. Organizations or individuals utilizing host=node flows under the assumption that they are protected by manual approval are effectively unprotected against malicious modifications of approved commands. The CVSS score is moderated only by the requirement that the attacker must already have a way to submit execution requests or compromise the agent's internal message bus to reuse the approval ID.

Official Patches

GitHubCommit fixing the approval binding logic

Fix Analysis (1)

Technical Appendix

CVSS Score
6.5/ 10
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N

Affected Systems

OpenClaw Node Agent (host=node configuration)

Affected Versions Detail

Product
Affected Versions
Fixed Version
OpenClaw
OpenClaw
< 2026.2.262026.2.26
AttributeDetail
CWE IDCWE-345
CVSS Score6.5
Attack VectorLocal / Adjacent
Vulnerability TypeContext Binding Weakness
Affected Componentsystem.run
Exploit StatusPoC Available (Internal)

MITRE ATT&CK Mapping

T1574Hijack Execution Flow
Persistence / Privilege Escalation
T1202Indirect Command Execution
Defense Evasion
CWE-345
Insufficient Verification of Data Authenticity

Insufficient Verification of Data Authenticity

Vulnerability Timeline

Vulnerability Disclosed
2026-02-26
Patch Released (v2026.2.26)
2026-02-26

References & Sources

  • [1]Official Advisory GHSA-HJVP-QHM6-WRH2
  • [2]Fix Commit

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 3 hours ago•CVE-2026-54347
8.7

CVE-2026-54347: Stored Cross-Site Scripting in Froxlor DNS TXT Record Configuration

A critical stored Cross-Site Scripting (XSS) vulnerability was identified in Froxlor server administration software panel before version 2.3.8. Authenticated customers with DNS editor privileges can inject malicious JavaScript into DNS TXT records. Because the application processes these values via a raw formatting callback without context-aware HTML entity encoding, the payload executes in the security context of administrative users who view the affected domain's DNS zones.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 4 hours ago•CVE-2026-54348
7.2

CVE-2026-54348: Second-Order SQL Injection in Froxlor API Layer

An authenticated administrator with privileges to manage admin accounts (such as change_serversettings) can execute arbitrary SQL commands via a second-order SQL injection vulnerability. The flaw resides in Froxlor's administrative API endpoints, specifically during the handling of IP address mapping parameters which are stored as serialized arrays and later interpolated without sanitization into active database queries. This vulnerability allows high-privileged administrative attackers to compromise the database. By injecting a payload into administrative profile metadata, an attacker can extract sensitive credentials, manipulate backend settings, or potentially disrupt database integrity. The vulnerability affects all versions of Froxlor prior to 2.3.8.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 5 hours ago•CVE-2026-54543
5.4

CVE-2026-54543: DNS Resource Record (RR) Injection in Froxlor DomainZones API

CVE-2026-54543 is a DNS Resource Record (RR) Injection vulnerability in Froxlor, an open-source server administration control panel. Prior to version 2.3.8, the DomainZones.add API command failed to perform strict sanitization and validation on the user-controlled record (label) and type parameters before serializing them into BIND-compatible zone files. An authenticated customer with DNS zone management permissions can inject control characters, breaking out of the original record context to define unauthorized resource records within managed zones.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 6 hours ago•CVE-2026-42533
9.2

CVE-2026-42533: NGINX Map Directive and Regex Matching Pre-Auth Heap Buffer Overflow & Info Leak

CVE-2026-42533 is a critical security vulnerability discovered in NGINX Open Source, NGINX Plus, NGINX Ingress Controller, and related products, referred to as the 'Two-Pass Capture-Clobbering' bug. The flaw is situated within NGINX's internal evaluation engine when handling complex variables, exposing a heap-based buffer overflow and information leak when a configuration chains regular expression-based map directives with numbered capture groups. An unauthenticated remote attacker can exploit this weakness by transmitting crafted HTTP requests to trigger remote code execution or defeat ASLR.

Alon Barad
Alon Barad
7 views•7 min read
•about 6 hours ago•CVE-2026-55593
6.5

CVE-2026-55593: Persistent Administrative Hijacking via Cross-Site Request Forgery in Froxlor Ajax Router

Froxlor prior to version 2.3.8 contains a high-severity architectural flaw where the standalone lib/ajax.php entry point bypasses the centralized request validation in lib/init.php. Unauthenticated remote attackers can leverage Cross-Site Request Forgery (CSRF) to induce authenticated administrators to submit forged requests that modify API key whitelists and expiration dates, potentially yielding persistent, out-of-band administrative control.

Amit Schendel
Amit Schendel
4 views•8 min read
•about 7 hours ago•CVE-2026-62988
9.0

CVE-2026-62988: Multi-Factor Authentication and Credential Bypass in Froxlor API

An insecure data retrieval flaw in the Froxlor server administration panel API allows authenticated remote attackers to retrieve unredacted bcrypt password hashes and Base32-encoded Time-Based One-Time Password (TOTP) seeds. Affected endpoints include several 'get' and 'listing' handlers for customers, administrators, and FTP accounts. Utilizing these leaked parameters, attackers can crack the password hashes offline and concurrently generate valid second-factor authentication codes to completely bypass access controls.

Amit Schendel
Amit Schendel
8 views•6 min read