Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAttacker authenticates to target application
-
DeliverySubmits crafted Trix HTML containing data-trix-serialized-attributes payload
-
ExploitContent stored without stripping attribute
-
ExecutionVictim loads page rendering attacker content
-
PersistDOMPurify bypass allows attribute to reach DOM
-
ImpactMalicious event handler executes in victim's browser session
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The attacker must have the ability to submit content that is stored and subsequently rendered by a Trix editor instance in a multi-user application - for example, write access to a post, comment, task, or document field backed by ActionText. Victim interaction is required: a separate user must load the page containing the attacker-controlled content (UI:R per CVSS vector). The CVSS PR:L metric confirms that at least low-level authenticated access is needed to inject content; unauthenticated exploitation is not supported by the available data. Exploitation is limited to applications running Trix versions below 2.1.17 that allow user-supplied HTML to pass through Trix's rendering pipeline without independent post-processing. Applications where all Trix content is authored exclusively by fully trusted operators, or where a separate sanitizer explicitly strips |
| Impact | The CVSS base score of 4.6 (AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N) correctly categorizes this as a medium-severity finding: the attacker must control storable content (PR:L) and a victim must load the rendered page (UI:R), which meaningfully limits opportunistic mass exploitation. No EPSS data was supplied in the source intelligence, and no CISA KEV listing was identified, indicating no confirmed widespread exploitation campaign at time of analysis. However, the published PR diff at https://github.com/basecamp/trix/pull/1282 contains a complete, functional XSS test payload demonstrating the |
| Exploit ScenarioDerived | An attacker with a standard user account in a multi-user Rails ActionText application (such as a shared document editor or support-ticket system) pastes crafted HTML into a Trix editor field; the payload embeds a |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 18, 2026
Cross-site scripting in Trix rich text editor versions prior to 2.1.17 allows network-reachable attackers with content-insertion privileges to execute arbitrary JavaScript in victims' browser sessions. The DOMPurify sanitizer lacked a hook to explicitly block the data-trix-serialized-attributes attribute, enabling crafted attachment HTML to survive sanitization and fire event handlers such as onerror upon rendering. No CISA KEV listing was identified at time of analysis, but the fix PR publicly exposes a working test payload, materially lowering the barrier to exploitation.
RemediationAI
Upgrade Trix to version 2.1.17 or later - for npm consumers run npm update trix, for RubyGems consumers run bundle update action_text-trix - which introduces an explicit DOMPurify uponSanitizeAttribute hook that sets keepAttr = false for any data-trix-serialized-attributes attribute, closing the sanitizer bypass at its root. The patched release is available at https://github.com/basecamp/trix/releases/tag/v2.1.17 and the authoritative advisory is at https://github.com/basecamp/trix/security/advisories/GHSA-qmpg-8xg6-ph5q. If an immediate upgrade is not possible, a compensating control is to strip data-trix-serialized-attributes server-side before storing or displaying any Trix-generated HTML; this requires covering every rendering path including email previews and API consumers, and will not be robust without an allow-list approach. Restricting rich-text authorship to a narrow set of trusted accounts reduces exposure but does not eliminate the vulnerability and is not a substitute for patching.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, rubygems, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Trix (CPE: cpe:2.3:a:basecamp:trix:*:*:*:*:*:*:*:*) is a WYSIWYG rich text editor published by Basecamp, distributed as both the npm package trix and the RubyGems package action_text-trix for Rails ActionText integration. The editor relies on DOMPurify for HTML sanitization but did not register a uponSanitizeAttribute hook to strip Trix-internal attributes before they reached the DOM. The data-trix-serialized-attributes attribute carries serialized attachment metadata - when injected by an attacker into a data-trix-attachment element, it is passed through DOMPurify unchanged and later interpreted during rendering, allowing execution of embedded event handlers. CWE-79 (Improper Neutralization of Input During Web Page Generation) applies: the root cause is attribute-level sanitization bypass rather than a failure of DOMPurify itself. The fix adds two lines to both html_sanitizer.js and the ActionText asset bundle, explicitly setting data.keepAttr = false whenever the offending attribute name is encountered.
Know when Trix gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N
Attacker needs low-privilege content submission (PR:L) and victim must view output (UI:R); no availability impact and scope remains unchanged.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Trix is a what-you-see-is-what-you-get rich text editor for everyday writing. Prior to 2.1.17, Trix is vulnerable to cross-site scripting when a data-trix-serialized-attributes attribute bypasses the DOMPurify sanitizer. An attacker can craft HTML containing a data-trix-serialized-attributes attribute with a malicious payload that, when rendered, executes arbitrary JavaScript in the user's session and may perform unauthorized actions or disclose sensitive information. This issue is fixed in version 2.1.17.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
EUVD-2026-60825
GHSA-qmpg-8xg6-ph5q
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB