Stored XSS in the OpenClaw Control UI when rendering assistant identity (name/avatar) into an inline <script> tag without script-context-safe escaping. A crafted value containing </script> could break out of the script tag and execute attacker-controlled JavaScript in the Control UI origin.
openclaw (npm)<= 2026.2.14>= 2026.2.15 (next release; fix is already merged on main)The gateway Control UI HTML response previously injected assistantName and assistantAvatar directly into an inline <script> block using JSON.stringify(...). JSON.stringify does not prevent </script> from terminating the script element, enabling stored XSS if an operator/admin sets the assistant identity to a malicious string.
OpenClaw’s Control UI is intended for local use only (see SECURITY.md); this advisory’s CVSS reflects a loopback-only/local-access deployment assumption.
An attacker with the ability to set assistant identity values (config or agent identity) could cause JavaScript execution for Control UI visitors, enabling token/session theft and privileged actions in the UI.
script-src 'self', no inline scripts).adc818db4a4b3b8d663e7674ef20436947514e1b3b4096e02e7e335f99f5986ec1bd566e90b14a7eThis advisory pre-sets the patched version to the planned next release (2026.2.15). Once that version is published to npm, this advisory can be published without further edits.
Thanks @Adam55A-code for reporting.
{
"severity": "MODERATE",
"cwe_ids": [
"CWE-79"
],
"github_reviewed": true,
"github_reviewed_at": "2026-02-18T22:44:33Z",
"nvd_published_at": "2026-02-20T00:16:17Z"
}