{"id":"GHSA-jmmg-jqc7-5qf4","summary":"OpenClaw's browser-origin WebSocket auth hardening gap could enable loopback password brute-force chains","details":"This issue is a browser-origin WebSocket auth chain on local loopback deployments using password auth. It is serious, but conditional: an attacker must get the user to open a malicious page and then successfully guess the gateway password.\n\n## Context and Preconditions\n\nOpenClaw’s web/gateway surface is designed for local use and trusted-operator workflows. In affected versions, a browser-origin client could combine three behaviors:\n\n- Origin checks not enforced for some non-Control-UI WebSocket client IDs.\n- Loopback auth attempts exempt from password-failure throttling.\n- Silent local pairing path available to browser-origin non-Control-UI clients.\n\nSuccessful exploitation requires all of the following:\n\n- Gateway reachable on loopback (default).\n- Password auth mode in use.\n- Victim opens attacker-controlled web content.\n- Password is guessable within feasible brute-force/dictionary attempts.\n\n## Practical Impact\n\nIf the password is guessed, an attacker can establish an authenticated operator WebSocket session and invoke control-plane methods available to that role. This is not an unauthenticated internet-exposed RCE class issue by itself; it is a local browser-origin auth-hardening gap with meaningful impact under the conditions above.\n\n## Affected Packages / Versions\n\n- Package: `openclaw` (npm)\n- Affected versions: `\u003c=2026.2.24` (latest published npm version as of February 26, 2026)\n- Patched versions : `\u003e=2026.2.25`\n\n## Fix Commit(s)\n\n- `c736f11a16d6bc27ea62a0fe40fffae4cb071fdb`\n\n## Fix Details\n\n- Enforce browser-origin checks for direct browser WebSocket clients beyond Control UI/Webchat (trusted-proxy forwarded flows remain supported).\n- Apply browser-origin auth failure throttling with loopback exemption disabled.\n- Block silent auto-pairing for non-Control-UI browser-origin clients.\n\n## Release Process Note\n\n`patched_versions` is pre-set to the planned next npm release (`2026.2.25`) so once that release is published, the advisory is published.\n\nOpenClaw thanks @luz-oasis for reporting.","aliases":["CVE-2026-32025"],"modified":"2026-03-20T21:16:24.814894Z","published":"2026-03-03T22:18:09Z","database_specific":{"nvd_published_at":"2026-03-19T22:16:37Z","cwe_ids":["CWE-287","CWE-307","CWE-346"],"severity":"MODERATE","github_reviewed":true,"github_reviewed_at":"2026-03-03T22:18:09Z"},"references":[{"type":"WEB","url":"https://github.com/openclaw/openclaw/security/advisories/GHSA-jmmg-jqc7-5qf4"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-32025"},{"type":"WEB","url":"https://github.com/openclaw/openclaw/commit/c736f11a16d6bc27ea62a0fe40fffae4cb071fdb"},{"type":"PACKAGE","url":"https://github.com/openclaw/openclaw"},{"type":"WEB","url":"https://www.vulncheck.com/advisories/openclaw-password-brute-force-via-browser-origin-websocket-authentication-bypass"}],"affected":[{"package":{"name":"openclaw","ecosystem":"npm","purl":"pkg:npm/openclaw"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"2026.2.25"}]}],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/03/GHSA-jmmg-jqc7-5qf4/GHSA-jmmg-jqc7-5qf4.json","last_known_affected_version_range":"\u003c= 2026.2.24"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H"},{"type":"CVSS_V4","score":"CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N"}]}