In affected versions of openclaw, node-host system.run approvals could display only an extracted shell payload such as jq --version while execution still ran a different outer wrapper argv such as ./env sh -c 'jq --version'.
This is an approval-integrity bug. An attacker who could place or select a local wrapper binary and induce a wrapper-shaped command could get local code executed after the operator approved misleading command text.
openclaw (npm)<= 2026.3.82026.3.11Wrapper resolution normalized executables by basename and extracted inner shell payload text for approval display, while execution still preserved the full wrapper argv. Approval storage and UI therefore showed text that did not match the exact command OpenClaw would execute.
OpenClaw now binds approvals to the exact executed argv and keeps extracted shell payload text only as secondary preview data. The fix shipped in openclaw@2026.3.11.
Upgrade to 2026.3.11 or later.
{
"github_reviewed": true,
"nvd_published_at": null,
"cwe_ids": [
"CWE-436",
"CWE-863"
],
"github_reviewed_at": "2026-03-13T15:47:46Z",
"severity": "HIGH"
}