OpenClaw's dashboard leaked gateway auth material via browser URL/query and localStorage

Description

OpenClaw's macOS Dashboard flow exposed Gateway authentication material to browser-controlled surfaces.

Before the fix, the macOS app appended the shared Gateway token and password to the Dashboard URL query string when opening the Control UI in the browser. The Control UI then imported the token and persisted it into browser localStorage under openclaw.control.settings.v1.

This expanded exposure of reusable Gateway admin credentials into browser address-bar/query surfaces and persistent script-readable storage.

Affected Packages / Versions

  • Package: openclaw (npm)
  • Latest published version verified vulnerable: 2026.3.2
  • Affected range: <= 2026.3.2
  • Patched version: >= 2026.3.7

Impact

An attacker with access to browser-controlled surfaces or persistent browser storage could recover a valid Gateway admin token and reuse it against the OpenClaw management interface.

The exposure chain was:

  1. macOS Open Dashboard constructed a URL with auth material.
  2. The browser received that credential-bearing URL.
  3. The Control UI imported the token from the URL.
  4. The Control UI persisted the token in localStorage.

Fix

The fix aligns the macOS Dashboard flow with the safer existing CLI/bootstrap pattern and removes persistent browser token storage:

  • macOS Dashboard now passes the Gateway token via URL fragment instead of query parameters.
  • macOS Dashboard no longer propagates the shared Gateway password into browser URLs.
  • Control UI keeps Gateway tokens in memory only for the current tab.
  • Control UI scrubs legacy persisted tokens from openclaw.control.settings.v1 on load.
  • Regression tests cover fragment transport, password omission, and token-scrubbing behavior.

Fix Commit(s)

  • 10d0e3f3ca92326df0ca071fabffe463742f263c (March 7, 2026)

Release Process Note

npm 2026.3.7 was published on March 8, 2026. This advisory is fixed in the released package.

Thanks @whiter6666 for reporting.

Basic information

Type
reviewed
Severity
high
Advisory on GitHub
Open advisory ↗
Repository advisory
Open repository advisory ↗
Source code
Browse source ↗
Published (advisory)
2026-03-09 19:52:29 UTC
Updated
2026-03-09 19:52:33 UTC
GitHub reviewed
2026-03-09 19:52:29 UTC

CVSS Scores

Base score Version Severity Vector
7.1 3.1
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N Click to expand
Attack vector (AV:L)
They already need access on the box, or another person has to do something wrong; it’s not a remote drive-by.
Attack complexity (AC:L)
Once they can reach the bug, pulling it off is straightforward—no weird race conditions or rare setup.
Privileges required (PR:N)
No account or special rights needed—anonymous or random user is enough.
User interaction (UI:R)
A real person has to do something—click, install, enable—otherwise it doesn’t land.
Scope (S:U)
Damage stays in the same “trust bubble” as the broken component—no big spill into unrelated systems.
Confidentiality (C:H)
Serious risk that confidential data gets exposed in a big way.
Integrity (I:H)
They could widely tamper with or forge data—trust in the data is badly hurt.
Availability (A:N)
Service keeps running; no real outage angle.

Identifiers

Type Value
GHSA GHSA-rchv-x836-w7xp ↗

CWEs

CWE id Name
CWE-200 Exposure of Sensitive Information to an Unauthorized Actor

Credits

  • whiter6666 (reporter)

Affected packages (1)

Vulnerable version ranges and first patched releases as published by GitHub.

Ecosystem Package Vulnerable range First patched Vulnerable functions
npm openclaw <= 2026.3.2 2026.3.7

References

cvelogic Threat Intelligence