Authenticated attackers can read arbitrary files from the Gateway host by supplying absolute paths or path traversal sequences to the browser tool's upload action. The server passed these paths to Playwright's setInputFiles() APIs without restricting them to a safe root.
Severity remains High due to the impact (arbitrary local file read on the Gateway host), even though exploitation requires authenticated access.
This is not a "drive-by" issue.
An attacker must:
browser tool permitted by tool policy for the target session/context (and have browser support enabled).If an operator exposes the Gateway beyond loopback (LAN/tailnet/custom bind, reverse proxy, tunnels, etc.), the impact increases accordingly.
openclaw (npm)< 2026.2.14 (includes latest published 2026.2.13)>= 2026.2.14 (planned next release)Entry points:
POST /tools/invoke with {"tool":"browser","action":"upload",...}POST /hooks/file-chooser (browser control hook)When the upload paths are not validated, Playwright reads the referenced files from the local filesystem and attaches them to a page-level <input type="file">. Contents can then be exfiltrated by page JavaScript (e.g. via FileReader) or via agent/browser snapshots.
Impact: arbitrary local file read on the Gateway host (confidentiality impact).
Upload paths are now confined to OpenClaw's temp uploads root (DEFAULT_UPLOAD_DIR) and traversal/escape paths are rejected.
This fix was implemented internally; the reporter provided a clear reproduction and impact analysis.
Fix commit(s):
Thanks @p80n-sec for reporting.
{
"nvd_published_at": "2026-02-20T00:16:15Z",
"github_reviewed_at": "2026-02-18T00:46:49Z",
"cwe_ids": [
"CWE-22"
],
"severity": "HIGH",
"github_reviewed": true
}