CVE-2026-56383: Stored XSS in Craft CMS Editable Table Component
Craft CMS has a stored cross-site scripting (XSS) flaw in its editable table component when using row heading column types. An administrator with change permissions can inject malicious JavaScript into row heading default values. This code then runs automatically when other users view pages containing that table field, potentially compromising their accounts or stealing sensitive data. The vulnerability affects Craft CMS versions 4.5.0-beta.1 through 4.16.18 and 5.0.0-RC1 through 5.8.22.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 4.8 MEDIUM · CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N
- Weaknesses (CWE)
- CWE-79
- Affected products
- 0 configuration(s)
- Published / Modified
- 2026-06-21 / 2026-06-23
NVD description (verbatim)
Craft CMS contains a stored cross-site scripting (XSS) vulnerability in the editableTable.twig component when using the 'Row Heading' column type. The application fails to sanitize input within row heading default values, allowing an attacker with an administrator account (with allowAdminChanges enabled) to inject arbitrary JavaScript that executes when another user views a page containing the affected table field. Affected versions are >= 4.5.0-beta.1 through 4.16.18 and >= 5.0.0-RC1 through 5.8.22; fixed in 4.16.19 and 5.8.23.
4 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The editableTable.twig component in affected Craft CMS versions fails to perform proper output encoding on row heading default values. An authenticated user with administrator privileges (when allowAdminChanges is enabled) can inject arbitrary JavaScript into the component configuration. Because the payload is stored server-side and executed client-side without sanitization when the table is rendered, any user viewing a page containing the affected field becomes a potential victim. The attack vector is network-based with low complexity; exploitation requires high privilege (admin account) but only minimal user interaction (the victim simply viewing the page). The CVSS vector (4.8 MEDIUM) reflects limited impact—confidentiality and integrity are compromised, but availability is not affected, and the scope is changed (cross-site).
Business impact
This vulnerability poses a moderate insider threat and supply-chain risk. Compromised administrator accounts—whether through credential theft, social engineering, or malicious insiders—can be weaponized to inject payloads that silently harvest credentials or session tokens from other users. For multi-tenant or SaaS deployments of Craft CMS, a single compromised admin can impact dozens of end users without detection. Organizations relying on Craft for content management of high-value portals or customer-facing sites face reputational and compliance risk if user data is exfiltrated or sessions hijacked.
Affected systems
Craft CMS versions 4.5.0-beta.1 through 4.16.18 (stable 4.x branch) and 5.0.0-RC1 through 5.8.22 (stable 5.x branch) are vulnerable. Installations must have the allowAdminChanges configuration setting enabled for the vulnerability to be exploitable. Organizations running earlier versions (below 4.5.0-beta.1) or versions 4.16.19+ and 5.8.23+ are not affected. The vulnerability only manifests when an editable table field with a 'Row Heading' column type is present and rendered in the application UI.
Exploitability
Exploitation requires administrative credentials and deliberate configuration of a malicious payload in the row heading default value field. This is not a remote, unauthenticated attack. However, the barrier to exploitation within an organization is relatively low: any compromised or rogue administrator can inject the payload, and the attack is difficult to spot without code review or CSP auditing. Once injected, the payload persists and automatically executes for all non-admin users viewing that page, making it a high-impact persistence mechanism despite the high privilege requirement for initial injection.
Remediation
Upgrade immediately to Craft CMS 4.16.19 or later for the 4.x branch, or 5.8.23 or later for the 5.x branch. These versions include proper input sanitization and output encoding for row heading values. Additionally, review administrator account permissions and audit the allowAdminChanges setting—disable it if not required for your workflow. Conduct a forensic review of all editable table field configurations in your Craft installation to detect any suspicious or unusual row heading default values that may have been injected prior to patching.
Patch guidance
Patches are available in Craft CMS 4.16.19 and 5.8.23. Apply the version appropriate to your deployment branch. If you are on an intermediate version (e.g., 4.16.x or 5.8.x), update to the latest patch release within your branch. Test patches in a staging environment that mirrors your production editable table configurations to ensure compatibility with any custom extensions or plugins. The upgrade process is typically non-breaking for patch releases; refer to the official Craft CMS upgrade documentation for detailed steps. Monitor your change logs and file integrity checksums post-patch to confirm successful application.
Detection guidance
Search your Craft CMS database and configuration for any editable table fields with row heading column types. Inspect the raw field configuration (typically stored in the `fields` table) for suspicious JavaScript, event handlers, or encoded payloads in default value properties. Review administrator activity logs for modifications to field configurations, particularly editable table fields, especially by recently created or rarely-used admin accounts. Consider deploying a Web Application Firewall (WAF) rule to detect and log XSS payloads in POST requests to field configuration endpoints. Content Security Policy (CSP) headers can help mitigate the impact if a payload is executed, limiting script execution to trusted domains.
Why prioritize this
Although the CVSS score is MEDIUM (4.8), this vulnerability warrants high prioritization due to its persistence mechanism and insider threat angle. A single injected payload affects all downstream users indefinitely until discovered and removed. Organizations with strong administrator access controls and mature change management processes can deprioritize slightly; those with weaker IAM hygiene or high-risk admin user populations should patch within days. The fact that it is not yet in CISA's KEV catalog suggests limited in-the-wild exploitation, but the attack is straightforward for a motivated insider.
Risk score, explained
The CVSS 3.1 score of 4.8 (MEDIUM) appropriately reflects the high privilege requirement (PR:H) and required user interaction (UI:R), which reduce exploitability. However, the score does not fully capture the persistence and scope impact for multi-user environments. In isolation, a single compromised admin's injection may affect low-privileged users (low confidentiality and integrity impact), but in aggregate across a customer base or organization, the reputational and compliance risk is substantial. Security teams should apply environmental scoring adjustments upward if their Craft CMS instances store or process sensitive user data (PII, financial records, healthcare information).
Frequently asked questions
Do we need to be an administrator to be affected by this vulnerability?
No. Administrators can inject the payload, but regular users who view a page containing the affected table field will be targeted by the malicious script. However, you do need an administrator account to perform the initial injection, so organizations with strict admin access controls are at lower risk.
What does 'allowAdminChanges enabled' mean, and how do I check if we have it enabled?
allowAdminChanges is a Craft CMS configuration setting that permits administrators to modify certain system settings (including field configurations) at runtime rather than only via code. Check your `craft/config/general.php` or environment variables for the `allowAdminChanges` parameter. If it is not explicitly set to `true`, it defaults to `false`, which disables the vulnerability vector for this CVE.
Can we detect if an attacker has already injected a payload into our installation?
Yes. Inspect your editable table field configurations in the control panel or database for unusual JavaScript, HTML event handlers, or suspicious strings in default value properties. Use your access logs to identify administrator changes made to field configurations, especially by accounts that do not normally modify fields. A security audit of recent field modifications is strongly recommended before patching.
If we patch to 4.16.19 or 5.8.23, do we need to do anything else?
Patching removes the vulnerability for future payloads, but you should still audit your field configurations to remove any injected payloads that may have been inserted before the patch was applied. Old payloads will remain active until manually deleted from the affected fields.
This analysis is provided for informational purposes to help organizations assess and prioritize vulnerability remediation. It is not a substitute for independent security testing, vendor advisories, or legal counsel. Organizations should verify patch applicability and compatibility within their specific environment before deployment. The information herein reflects the state of the vulnerability as of the publication date; refer to official Craft CMS security announcements for the most current guidance. SEC.co does not warrant the accuracy, completeness, or fitness of this content for any particular purpose. Source: NVD (public-domain), retrieved 2026-07-29. Analysis generated by SEC.co (claude-haiku-4-5).
Weaknesses (CWE)
Related vulnerabilities
- CVE-2016-20070MEDIUMPrivilege Escalation & Stored XSS in WordPress Booking Calendar Contact Form 1.0.23
- CVE-2018-25384MEDIUMStored XSS in Wikidforum 2.20 Allows Authenticated Attackers to Inject Malicious Scripts
- CVE-2019-25731MEDIUMStored XSS in Zuz Music 2.1 Contact Form
- CVE-2019-25737MEDIUMStored XSS in Live Chat Unlimited 2.8.3 – Admin Session Compromise
- CVE-2019-25739MEDIUMGigToDo 1.3 Stored XSS Vulnerability in Proposal Descriptions
- CVE-2019-25742MEDIUMStored XSS in Zoner Real Estate WordPress Theme 4.1.1 – Admin Account Compromise Risk
- CVE-2019-25743MEDIUMWordPress Soliloquy Lite 2.5.6 Stored XSS Vulnerability
- CVE-2019-25744MEDIUMWordPress Popup Builder 3.49 Stored XSS Vulnerability – Exploit Prevention & Patch Guide