Mar 3, 2026·4 min read·53 visits
OpenClaw < 2026.2.23 fails to block abbreviated command-line flags. Attackers can use shortened versions of dangerous flags (like `--compress-p` for `sort`) to bypass the allowlist and achieve Remote Code Execution.
A critical security bypass in OpenClaw's `safeBins` mechanism allows authenticated users to execute arbitrary commands. The vulnerability exploits a discrepancy between OpenClaw's strict string matching validator and the GNU `getopt_long` argument parser used by underlying system binaries. By using unique abbreviations of restricted flags (e.g., `--compress-prog` instead of `--compress-program`), attackers can evade security controls.
OpenClaw provides a safeBins feature designed to allow the execution of specific system binaries (such as sort, grep, and jq) while restricting dangerous arguments. This feature relies on a deny-list approach, where specific flags known to facilitate arbitrary code execution or filesystem manipulation are explicitly forbidden. For example, the sort utility has the --compress-program flag blocked because it allows the execution of external binaries.
The vulnerability arises from a logic error in how these restrictions are enforced. OpenClaw's validator checks for exact string matches against the deny list. However, standard GNU utilities use getopt_long for argument parsing, which automatically expands unique abbreviations of long options. This discrepancy allows an attacker to supply an abbreviated flag that the validator does not recognize but the underlying binary accepts and executes.
The root cause is an Incomplete List of Disallowed Inputs (CWE-184) combined with an argument parsing inconsistency. The vulnerability exists because the application attempts to filter input without normalizing it to the canonical form expected by the consumer (the system binary).
In src/infra/exec-safe-bin-policy.ts, the validation logic iterated through user-provided arguments and compared them strictly against a deniedFlags Set. If the user provided --compress-program, the check failed (correctly). However, if the user provided --compress-prog, the check passed because that specific string was not in the deny list. The underlying sort binary, however, treats --compress-prog as an alias for --compress-program due to getopt_long behavior, creating a bypass condition.
The vulnerable code relied on a direct look-up of the provided argument against a set of forbidden strings. It failed to account for the flexibility of command-line parsers.
// Vulnerable Logic (Simplified)
const deniedFlags = new Set(['--compress-program', '--output']);
function validate(args) {
for (const arg of args) {
// EXACT match check allows bypass via abbreviations
if (deniedFlags.has(arg)) {
throw new Error('Denied flag detected');
}
}
}The fix, introduced in commit 3b8e33037ae2e12af7beb56fcf0346f1f8cbde6f, implements a canonicalization layer. Before validation occurs, the system now resolves all long options to their full names using a logic that mimics getopt_long.
// Patched Logic (Conceptual)
function validate(args) {
for (const arg of args) {
// 1. Canonicalize the argument (e.g., '--compress-p' -> '--compress-program')
const canonical = resolveLongOption(arg, knownFlags);
// 2. Validate the CANONICAL form
if (deniedFlags.has(canonical)) {
throw new Error('Denied flag detected');
}
}
}This ensures that any valid abbreviation is expanded to its full form before the security check is applied. If the abbreviation is ambiguous (matches multiple flags), the patch correctly rejects the input.
Exploitation assumes the attacker has authenticated access to the OpenClaw API and that the tools.exec module is configured with sort as an allowed binary. The attacker sends a JSON payload to the execution endpoint, crafting the arguments to use the abbreviated flag.
sort binary in the safeBins configuration.--compress-prog (or any unique prefix like --compress-p) to define the external program sh. Pass the malicious command as an argument to sh.--compress-prog in the deny list, and spawns the process.Proof of Concept:
{
"tool": "exec",
"args": {
"cmd": "sort",
"args": [
"--compress-prog=sh -c 'id > /tmp/pwned'",
"-o",
"/dev/null",
"/dev/null"
]
}
}Upon execution, sort interprets the flag as --compress-program and invokes sh, executing the attacker's command.
This vulnerability is rated Critical (CVSS 9.9). Successful exploitation results in Remote Code Execution (RCE) with the privileges of the OpenClaw service account.
The vulnerability is currently weaponized with public exploit scripts available, making immediate remediation essential for all exposed instances.
The primary mitigation is to upgrade OpenClaw to version 2026.2.23 or later. This version includes the patch that canonicalizes command-line arguments before validation.
If upgrading is not immediately possible, administrators should update their safeBins configuration to temporarily remove sort and any other binaries that support getopt_long style abbreviations and have known dangerous flags. Note that simply adding --compress-prog to the deny list is insufficient, as attackers can vary the abbreviation length (e.g., --compress-pro, --compress-p). Removing the binary from the allowed list is the only safe configuration workaround.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H| Product | Affected Versions | Fixed Version |
|---|---|---|
OpenClaw OpenClaw | < 2026.2.23 | 2026.2.23 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-184 |
| Attack Vector | Network (AV:N) |
| CVSS Score | 9.9 (Critical) |
| EPSS Score | 0.00089 |
| Impact | Remote Code Execution |
| Exploit Status | Weaponized |
The software filters or validates input but relies on a list of disallowed inputs that is incomplete or can be bypassed using alternate representations.
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.
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.
CVE-2026-70666 is a critical Server-Side Request Forgery (SSRF) vulnerability in Netflix Lemur's ACME certificate management integration. Prior to version 1.9.3, the system allowed authority-role users to bypass initial ACME URL allowlist validations when updating an existing authority. Additionally, the underlying ACME network client blindly parsed and connected to dynamic endpoint URLs supplied in JSON responses from the configured ACME directory, allowing attackers to route arbitrary JWS-signed requests to internal services or cloud metadata endpoints.
A security vulnerability in Netflix Lemur, a TLS certificate management framework, allows authenticated operators to bypass Server-Side Request Forgery (SSRF) mitigations. The issue exists within the certificate revocation verification workflow, specifically inside the CRL and OCSP retrieval logic. By exploiting HTTP redirects or DNS rebinding (Time-of-Check Time-of-Use) mechanisms, an attacker can coerce the server into issuing arbitrary network requests to internal services, such as the cloud instance metadata service (IMDS) or loopback addresses. This bypass neutralizes previous network-boundary validation logic and allows blind read/write SSRF targeting internal infrastructure resources.
Netflix Lemur, an open-source TLS certificate management framework, is affected by a Server-Side Request Forgery (SSRF) vulnerability. This vulnerability arises from an incomplete patch for a previous security flaw, CVE-2026-55166. While Lemur version 1.9.2 validated the ACME directory URL against an allowlist during authority creation, it failed to perform the same checks when updating existing authorities. An authenticated user possessing an authority role can exploit this omission to replace the directory URL with internal or cloud metadata endpoints. During subsequent certificate issuance, the Lemur backend executes unauthorized requests, potentially leaking sensitive metadata or credentials.
An authorization bypass and information disclosure vulnerability in Netflix Lemur before version 1.9.3 allows authenticated, low-privilege users to retrieve raw destination configurations, exposing plaintext credentials such as SFTP passwords and private key passphrases.