Trix Editor CVE-2026-73428
MEDIUMAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with low-privilege account
-
DeliveryPaste crafted span with javascript: href into Trix editor
-
ExploitSubmit form to store malicious payload in database
-
ExecutionVictim user loads page rendering stored Trix content
-
PersistVictim clicks injected hyperlink
-
Impactjavascript: URI executes in victim 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 | Three sequential conditions must be met: (1) the attacker must hold an authenticated low-privilege session with write access to a Trix-powered editor input field (PR:L per CVSS vector - a standard user account is sufficient, no admin role required); (2) the attacker must paste crafted HTML containing a |
| Impact | The vendor-assigned CVSS 4.6 (Medium) accurately reflects the threat profile: network-reachable (AV:N), low complexity (AC:L), authenticated low-privilege attacker (PR:L), mandatory victim interaction (UI:R), unchanged scope (S:U), and limited confidentiality and integrity impact (C:L/I:L/A:N). The two sequential user-interaction dependencies - attacker must paste crafted content, victim must click the rendered link - meaningfully suppress real-world exploitation likelihood compared to fully automated or click-free XSS variants. No EPSS data was provided in the intelligence sources, and the vulnerability is not listed in CISA KEV, indicating no confirmed active exploitation at time of analysis. The primary attack surface is multi-user collaborative applications built on Trix (Rails Action Text being the most prevalent deployment), where attacker-generated rich text is displayed to other users; single-user deployments have no meaningful stored XSS exposure. Applications with server-side HTML sanitization are additionally protected even without patching. Given the medium CVSS, absence from KEV, and the UI:R dependency, this should be triaged as a routine patch-cycle item rather than an emergency response trigger - though any multi-user Rails application accepting untrusted Trix content should prioritize the 2.1.18 upgrade to close the window. |
| Exploit ScenarioDerived | An authenticated attacker with a low-privilege account pastes crafted HTML - a |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 13, 2026
Stored XSS in Trix editor (all versions prior to 2.1.18) allows an authenticated low-privilege user to persist a javascript: URI payload via the paste path, which executes in victim browsers when the rendered content is viewed and the injected link is clicked. The entry vector exploits HTMLParser's mishandling of a crafted <span data-trix-attachment="{}"> element, which bypasses attachment processing and routes unvalidated attributes - including a malicious href - into the document model through StringPiece.fromJSON. No public exploit has been identified and the vulnerability is absent from CISA KEV; a vendor-confirmed fix is available in version 2.1.18.
RemediationAI
Upgrade to Trix 2.1.18 or later, confirmed fixed in commit 9c0a993 and tagged release https://github.com/basecamp/trix/releases/tag/v2.1.18. For npm consumers run npm update trix or yarn upgrade trix; for Ruby/Rails applications update action_text-trix to >= 2.1.18 in the Gemfile and run bundle update action_text-trix. For applications unable to patch immediately, enabling server-side HTML sanitization (e.g., Rails' ActionView::Helpers::SanitizeHelper or a comparable library) will neutralize the javascript: URI on save, preventing persistence of the malicious href - note this workaround only protects against future submissions and does not remediate already-stored malicious content in the database, which would require reprocessing existing records. There is no Trix configuration flag to disable the vulnerable paste behavior without upgrading.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, rubygems
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Trix is a WYSIWYG rich text editor maintained by Basecamp, distributed as npm package trix and Ruby gem action_text-trix (bundled with Rails Action Text). The root cause is CWE-79 (Improper Neutralization of Input During Web Page Generation): the pre-2.1.18 StringPiece.fromJSON method returned new this(pieceJSON.string, pieceJSON.attributes) without inspecting whether attributes.href carried a javascript: URI scheme. The exploit entry point is the paste flow: HTMLParser encounters a <span> with data-trix-attachment="{}" - an empty attachment object - which causes the attachment handler to be skipped entirely. Because attachment-specific sanitization is bypassed, the element's data-trix-attributes values (including a crafted href) are applied directly to a plain StringPiece and serialized verbatim into the stored document HTML. The fix (commit 9c0a993) integrates DOMPurify.isValidAttribute("a", "href", value) before constructing the StringPiece, blocking javascript: URIs in standard, mixed-case, and whitespace-padded forms. This vulnerability shares its fix with GHSA-53p3-c7vp-4mcc, which covers a parallel drag-and-drop entry path through the Level0InputController.
Know when the next one hits your stack
- 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
S:C assigned because stored XSS causes attacker content to execute in a victim's browser - a different security domain from the attacker's session; PR:L confirmed by requirement for authenticated write access.
Primary rating from Vendor (github).
CVSS VectorVendor: github
DescriptionCVE.org
Trix is a what-you-see-is-what-you-get rich text editor for everyday writing. Prior to 2.1.18, Trix is vulnerable to stored cross-site scripting when crafted HTML is pasted into the editor. HTMLParser processes a mock attachment in a <span> with an empty data-trix-attachment="{}" value, causing data-trix-attributes to be applied to a plain string piece. StringPiece.fromJSON accepts an unvalidated href, allowing a javascript: URI to enter the document model and serialized HTML and execute when another user renders and clicks the content. Applications that apply server-side HTML sanitization can neutralize the payload on save. This issue is fixed in version 2.1.18.
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.
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB