Summary
An authenticated, low-privilege user (able to create/edit forms) can inject arbitrary HTML/JS into the Craft Control Panel (CP) builder and integrations views. User-controlled form labels and integration metadata are rendered with dangerouslySetInnerHTML without sanitization, leading to stored XSS that executes when any admin views the builder/integration screens.
Affected Product
Details
dangerouslySetInnerHTML without sanitization.dangerouslySetInnerHTML on user-controlled properties in bundled CP JS at packages/plugin/src/Resources/js/client/client.js.PoCs
<img src=x onerror="alert('xss-label')">.<svg><script>alert('xss-icon')</script></svg>.Impact Arbitrary JS in admin CP; session/CSRF token theft; potential full admin takeover via DOM-driven actions.
Remediation
dangerouslySetInnerHTML, or avoid it for labels/titles/icons.<img onerror> payloads to ensure no execution in builder/integration views.Workarounds
Credits
{
"cwe_ids": [
"CWE-79"
],
"github_reviewed": true,
"github_reviewed_at": "2026-01-22T21:41:14Z",
"nvd_published_at": "2026-02-12T23:16:09Z",
"severity": "LOW"
}