GHSA-g27f-9qjv-22pm json
OpenClaw log poisoning (indirect prompt injection) via WebSocket headers
published 8mo ago modified 8mo ago
- cvss
- 3.1
- version 3.1, GitHub
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- —
- no score, EPSS covers CVEs only
- public exploits
- 0
- none known
Summary
### Summary In `openclaw` versions prior to `2026.2.13`, OpenClaw logged certain WebSocket request headers (including `Origin` and `User-Agent`) without neutralization or length limits on the "closed before connect" path.
If an unauthenticated client can reach the gateway and send crafted header values, those values may be written into core logs. Under workflows where logs are later read or interpreted by an LLM (for example via AI-assisted debugging), this can increase the risk of indirect prompt injection (log poisoning).
### Affected Packages / Versions - Package: `openclaw` (npm) - Affected: `<= 2026.2.12` - Fixed: `>= 2026.2.13`
### Details - Component: `src/gateway/server/ws-connection.ts` - Trigger: WebSocket connection closes before completing the connect/handshake; header values are included in the log message and structured context.
### Impact This issue is primarily an indirect prompt injection risk and depends on downstream log consumption behavior. If you do not feed logs into an LLM or other automation, impact is limited.
### Fix Header values written to gateway logs are now sanitized and truncated (including removal of control/format characters and length limiting). - Fix commits: `d637a263505448bf4505b85535babbfaacedbaac`, `e84318e4bcdc948d92e57fda1eb763a65e1774f0` (PR #15592)
### Workarounds - Upgrade to `openclaw@2026.2.13` or later. - Treat logs as untrusted input when using AI-assisted debugging (sanitize/escape, and do not auto-execute instructions derived from logs). - Restrict gateway network exposure; apply reverse-proxy limits on header size where applicable.
Thanks @pkerkhofs for reporting.
Patch / fix
- npm openclaw 2026.2.13
Is GHSA-g27f-9qjv-22pm in your dependencies? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.
Check with FencerCVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| GitHub | 3.1 | 3.1 | CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:L/A:N |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| npm | openclaw | <2026.2.13 |
2026.2.13 |
Classification
- Weakness
-
- CWE-117 Improper Output Neutralization for Logs
References
-
github.com
/openclaw/openclaw/pull/15592
web
-
github.com
/openclaw/openclaw/commit/d637a263505448bf4505b85535babbfaacedbaac
web
-
github.com
/openclaw/openclaw/security/advisories/GHSA-g27f-9qjv-22pm
web, advisory
-
github.com
/openclaw/openclaw
package
-
github.com
/openclaw/openclaw/releases/tag/v2026.2.13
web
Sources
- GitHub Advisory GHSA-g27f-9qjv-22pm
- Maintainer advisory GHSA-g27f-9qjv-22pm
Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.
The maintainers of openclaw/openclaw published their own advisory on GitHub. Reviewed sources take precedence over it.