Summary
The exported session HTML viewer allowed stored XSS when untrusted session content included raw HTML markdown tokens or unescaped metadata fields.
Impact
Opening a crafted exported HTML session could execute attacker-controlled JavaScript in the viewer context. This can expose session content in the page and enable phishing or UI spoofing in the trusted export view.
Affected Packages / Versions
- Package:
openclaw (npm)
- Affected versions:
<= 2026.2.22-2
- Patched version (released):
>= 2026.2.23
Technical Details
The exporter rendered markdown with marked.parse(...) and inserted HTML via innerHTML, but did not override the html renderer token path. Raw HTML (for example <img ... onerror=...>) was passed through. Additional tree/header metadata fields were interpolated without escaping in the export template.
Reproduction
- Create a session containing content like
<img src=x onerror=alert(1)>.
- Export the session to HTML.
- Open the exported file.
- Observe script execution from injected content.
Remediation
- Added a
marked html(token) renderer override that escapes raw HTML tokens.
- Escaped previously unescaped tree/header metadata fields in the export template.
- Added image MIME sanitization for exported data-URL image rendering.
- Added regression tests for markdown/token and metadata escaping paths.
Fix Commit(s)
f8524ec77a3999d573e6c6b8a5055bf35c49a2e6
Release Process Note
patched_versions is pre-set to the released version (>= 2026.2.23). This advisory now reflects released fix version 2026.2.23.
OpenClaw thanks @allsmog for reporting.
References
Summary
The exported session HTML viewer allowed stored XSS when untrusted session content included raw HTML markdown tokens or unescaped metadata fields.
Impact
Opening a crafted exported HTML session could execute attacker-controlled JavaScript in the viewer context. This can expose session content in the page and enable phishing or UI spoofing in the trusted export view.
Affected Packages / Versions
openclaw(npm)<= 2026.2.22-2>= 2026.2.23Technical Details
The exporter rendered markdown with
marked.parse(...)and inserted HTML viainnerHTML, but did not override thehtmlrenderer token path. Raw HTML (for example<img ... onerror=...>) was passed through. Additional tree/header metadata fields were interpolated without escaping in the export template.Reproduction
<img src=x onerror=alert(1)>.Remediation
markedhtml(token)renderer override that escapes raw HTML tokens.Fix Commit(s)
f8524ec77a3999d573e6c6b8a5055bf35c49a2e6Release Process Note
patched_versionsis pre-set to the released version (>= 2026.2.23). This advisory now reflects released fix version2026.2.23.OpenClaw thanks @allsmog for reporting.
References