mediumVulnerability

CVE-2026-55793

# Stored XSS via Structure entry title in table view ## Summary An Author-level control panel user can store a JavaScript payload in an entry title. When an admin, or any control panel user with `saveEntries` for the same Structure section, drags another entry under the poisoned entry in table view, the payload executes in the victim’s session. The issue is exploitable because the title is escaped into `data-title` by the server, decoded again by the browser, read with jQuery `.data('title')`, and then concatenated into a new HTML string without attribute escaping. Execution was verified with `alert(document.domain)`. Impact was verified against an elevated admin session by changing the admin user’s email through `users/save-user`, then using the password-reset flow to take over the account. ## Preconditions - Attacker has `createEntries` + `saveEntries` on a Structure-type section (Author-style CP account; no admin permission required). - Victim has `saveEntries` on the same section. Craft only renders drag handles when `structureEditable` is true, which requires this permission, so any admin qualifies. - Section must be type Structure. Channel and Single sections are unaffected. - Poisoned entry must have no children at the time of the drag (fires on the 0-to-1 descendant transition). - For the email-change account-takeover path, the victim must currently have an elevated session. The stored XSS itself does not require elevation. ## Root cause `ElementTableSorter.js` lines 643-652: ```js const ancestorTitle = this._updateAncestors._$ancestor.data('title'); $( '<button … aria-label="' + Craft.t('app', 'Show {title} children', {title: ancestorTitle}) + '"></button>' ).insertAfter(…); ``` `Craft.t` with a `{title}` token calls `_parseToken`, reaches `case 'none': return arg` (`Craft.js:193-194`), and returns the title verbatim. The result is handed to jQuery's `$()` and parsed as HTML. The server-side template correctly encodes the entry title into

Properties

ghsa_id
GHSA-xrqc-p465-2xvg
severity
medium
summary
Craft CMS: Stored XSS via Structure entry title in table view
epss_score
0.00257
cve_id
CVE-2026-55793
is_ghsa_only
false
ghsa_published
2026-07-06T21:35:02Z
source_url
https://github.com/advisories/GHSA-xrqc-p465-2xvg
epss_percentile
0.17592
ghsa_updated
2026-07-06T21:35:04Z

Related Entities (5)

ENRICHED_BY (1)

[Source]FIRST EPSS

VULNERABLE_TO (1)

[Software]composer/craftcms/cms

AFFECTS (1)

[Software]composer/craftcms/cms

HAS_WEAKNESS (1)

[Weakness]Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

REPORTED_BY (1)

[Source]GitHub Advisory Database

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-55793 — Ninja Signal Threat Intelligence | Ninja Signal