GHSA-v6x2-2qvm-6gv8 — openclaw
Fix: openclaw/openclaw@c99e769GHSA-v6x2-2qvm-6gv8 is a CWE-320 vulnerability in openclaw. A fix is available for openclaw — see the affected versions and patch details below.
OpenClaw reuses the gateway auth token in the owner ID prompt hashing fallback
Exploitation Status
No confirmed exploitation observed yet
- CISA’s own triage has not observed active exploitation or public proof-of-concept code for this CVE as of its last assessment.
Exploitation and automatability from CISA’s SSVC triage for GHSA-v6x2-2qvm-6gv8.
EPSS Exploitation Probability
EPSS (Exploit Prediction Scoring System) is a daily probability model maintained by FIRST.org. It estimates the likelihood a CVE will be exploited in production environments within the next 30 days, derived from real-world threat intelligence signals.
Real-World Exposure
How broadly this vulnerability is actually deployed: weekly install volume shows current usage, and reverse-dependency count shows how many other packages break if it stays unpatched.
openclawnpmDescription
Vulnerability
OpenClaw reused gateway.auth.token (and gateway.remote.token) as a fallback hash secret for owner-ID prompt obfuscation when commands.ownerDisplay=hash and commands.ownerDisplaySecret was unset.
This created secret dual-use between gateway authentication and prompt metadata hashing.
Impact
- Auth-secret dual-use across security domains (gateway auth and prompt metadata hashing).
- Hash outputs are visible to third-party model providers in system prompts.
- No direct plaintext token disclosure.
- Practical risk is highest when operators use weak gateway tokens and leave owner hash secret unset.
Affected Packages / Versions
- Package:
openclaw(npm) - Latest affected published version:
2026.2.21-2 - Vulnerable range:
<= 2026.2.21-2 - Patched version (planned next release):
2026.2.22
Affected Components
src/agents/cli-runner/helpers.tssrc/agents/pi-embedded-runner/run/attempt.tssrc/agents/pi-embedded-runner/compact.ts
Remediation
- Added a shared owner-display resolver and secret-generation helper.
- Removed fallback to
gateway.auth.tokenandgateway.remote.token. - Auto-generates and persists a dedicated
commands.ownerDisplaySecretwhen hash mode is enabled and secret is missing.
Fix Commit(s)
- c99e7696e6893083b256f0a6c88fb060f3a76fb7
Release Process Note
patched_versions is pre-set to the planned next release (2026.2.22). Once npm release 2026.2.22 is published, this advisory only needs to be published.
OpenClaw thanks @aether-ai-agent for reporting.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 📦npm | openclaw | all versions | 2026.2.22npm install openclaw@2026.2.22 |
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for openclaw, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update openclaw to 2026.2.22 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms GHSA-v6x2-2qvm-6gv8 is resolved across your whole dependency graph.
Workarounds
If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.
How O3 protects you
O3 Security's impact-aware SCA analyses which vulnerable code paths your application actually calls, so a match like GHSA-v6x2-2qvm-6gv8 can be triaged on real exposure rather than presence alone.
Tailored to GHSA-v6x2-2qvm-6gv8. Runtime protection reduces exposure until a permanent patch is applied and verified — it complements patching, it doesn't replace it.
Frequently Asked Questions
Is GHSA-v6x2-2qvm-6gv8 in your dependencies?
O3 Security finds GHSA-v6x2-2qvm-6gv8 across npm dependencies, including transitive ones, and its impact-aware SCA ranks findings by whether your code actually calls the vulnerable path.