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-CWQ8-6F96-G3Q4
8.8

GHSA-CWQ8-6F96-G3Q4: Fail-Open Security Bypass in OpenClaw Plugin Installation

Amit Schendel
Amit Schendel
Senior Security Researcher

Apr 2, 2026·5 min read·3 visits

PoC Available

Executive Summary (TL;DR)

A fail-open flaw in OpenClaw allows malicious plugins to bypass security scans and execute arbitrary code by triggering scanner errors or relying on ignored warnings.

OpenClaw versions prior to March 30, 2026, contain a critical fail-open vulnerability in the plugin installation mechanism. The security scanner designed to block dangerous code patterns fails to halt the installation process when encountering internal errors or critical security findings.

Vulnerability Overview

OpenClaw utilizes a plugin and skills architecture to extend the capabilities of the personal AI assistant. To secure this ecosystem, the application implements a security gate during the installation process. This gate relies on a module named BuiltinInstallScan to inspect source code for dangerous patterns, such as the use of eval() or child_process.exec().

Prior to the March 30, 2026 update, this security mechanism contained a logic flaw resulting in a fail-open posture. The vulnerability occurs when the scanner processes malformed code or encounters explicitly blocked functions. The system logs these events but fails to terminate the installation pipeline.

By bypassing the intended security restrictions, attackers can deploy malicious plugins into the host environment. The execution of unverified code within the AI assistant's context leads to severe security boundary violations.

Root Cause Analysis

The vulnerability stems from improper handling of exceptional conditions within the plugin installation logic. Specifically, the functions scanDirectoryTarget and scanBundleInstallSourceRuntime process the output of the static analyzer. These functions fail to translate critical findings or internal scanner errors into terminal states for the installation loop.

When the static analyzer encounters an error or identifies critical security violations, it generates a result object indicating the failure. The installation pipeline inspects this object, emits a console warning, and then proceeds with the installation. The system incorrectly prioritizes availability and seamless installation over strict security enforcement.

This design flaw creates two distinct failure modes. First, the system ignores intentional malicious operations flagged by the scanner. Second, it allows malformed plugins that crash the analyzer to bypass inspection entirely. Both scenarios result in the deployment of untrusted code.

Code Analysis

The pre-patch implementation relies on a try-catch block that suppresses errors without interrupting the control flow. The vulnerable code resides in src/plugins/install.ts and src/plugins/install-security-scan.runtime.ts. When an exception occurs during the scan, the error is caught, logged, and execution continues.

// Pre-patch logic in install-security-scan.runtime.ts
try {
  const builtinScan = await scanDirectoryTarget({ /* parameters */ });
  // The system logs warnings for critical findings but returns a success state.
} catch (err) {
  params.logger.warn?.(`Scan failed: ${err}. Installation continues...`);
}

The patch introduced in commit 7a953a52271b9188a5fa830739a4366614ff9916 resolves this issue by enforcing a fail-closed model. The developers introduced a new helper function named buildBlockedScanResult. This function explicitly validates the scan status and the count of critical findings.

function buildBlockedScanResult(params: {
  builtinScan: BuiltinInstallScan;
  targetLabel: string;
}): InstallSecurityScanResult | undefined {
  if (params.builtinScan.status === "error") {
    return {
      blocked: {
        code: "security_scan_failed",
        reason: buildScanFailureBlockReason({ /* parameters */ }),
      },
    };
  }
  if (params.builtinScan.critical > 0) {
    return {
      blocked: {
        code: "security_scan_blocked",
        reason: buildCriticalBlockReason({ /* parameters */ }),
      },
    };
  }
  return undefined;
}

The installation loop now processes the InstallSecurityScanResult object returned by this function. If the result indicates a blocked state, the pipeline terminates immediately. This ensures that plugins with critical findings or those that crash the scanner cannot be installed.

Exploitation Methodology

Attackers can exploit this vulnerability using two primary techniques. The first involves crafting a plugin designed to crash the BuiltinInstallScan static analyzer. By structuring the code with extremely deep recursion or a malformed Abstract Syntax Tree (AST), the attacker forces the scanner to throw an exception. The system logs the failure and proceeds to install the malicious payload.

The second technique relies on user oversight during the installation of unauthorized plugins. The attacker includes explicitly dangerous operations, such as environment variable exfiltration via child_process.exec(). The static analyzer detects these operations and increments the critical findings counter. Because the system fails open, the plugin is installed alongside a non-blocking console warning.

Exploitation requires the attacker to distribute the malicious plugin through unofficial channels and convince a user to initiate the installation process. In automated environments or deployments where standard output is suppressed, the warning goes entirely unnoticed.

Impact Assessment

Exploiting this fail-open vulnerability grants the attacker arbitrary code execution within the OpenClaw runtime environment. The executed code inherits the privileges of the Node.js process hosting the AI assistant. This level of access permits extensive interaction with the underlying operating system.

Malicious plugins can access the local file system, modify application configurations, and initiate outbound network connections. Attackers can leverage these capabilities to establish persistence or pivot to adjacent systems on the local network. The execution context bypasses all intended sandbox restrictions.

Personal AI assistants frequently process and store highly sensitive information, including API keys, authentication tokens, and user interactions. The compromise of this environment results in a total loss of confidentiality. Attackers can seamlessly exfiltrate this data using the network privileges granted to the application.

Remediation and Detection

The definitive remediation for this vulnerability is updating OpenClaw to the release incorporating commit 7a953a52271b9188a5fa830739a4366614ff9916. This update replaces the vulnerable fail-open logic with a strict fail-closed enforcement mechanism. Organizations should ensure all deployments are running versions published after March 30, 2026.

For systems where immediate patching is not feasible, administrators must implement manual verification procedures. Users should execute the openclaw security audit --deep command to perform a comprehensive retrospective scan of all installed plugins and skills. Any components flagged by this audit must be manually removed from the system.

Security operations teams can detect exploitation attempts by monitoring application logs. The presence of the strings code safety scan failed or dangerous code patterns detected during a plugin installation event indicates that the scanner identified an issue. On vulnerable versions, these logs confirm that a potentially malicious plugin was successfully installed.

Official Patches

OpenClawPull Request #57729 implementing fail-closed logic

Fix Analysis (1)

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

Affected Systems

OpenClaw Plugin InstallerOpenClaw Skills RuntimeBuiltinInstallScan Module

Affected Versions Detail

Product
Affected Versions
Fixed Version
OpenClaw
OpenClaw
< fixed version (March 30, 2026)commit 7a953a52
AttributeDetail
CWE IDCWE-390
Attack VectorLocal / User-Assisted
CVSS Score8.8 (High)
ImpactArbitrary Code Execution
Exploit StatusProof of Concept Available
CISA KEVNot Listed

MITRE ATT&CK Mapping

T1204.002User Execution: Malicious File
Execution
T1129Shared Modules
Execution
CWE-390
Detection of Error Condition Without Action

Detection of Error Condition Without Action

Vulnerability Timeline

Patch committed to OpenClaw repository
2026-03-30

References & Sources

  • [1]GitHub Advisory GHSA-CWQ8-6F96-G3Q4
  • [2]Fix PR #57729
  • [3]Fix Commit 7a953a52

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.