HIGH 7.6

CVE-2026-55409: Filament RichEditor Stored XSS in Disabled Fields (3.0.0–3.3.52)

Filament is a popular Laravel development framework that includes a RichEditor component for handling rich text input. Between versions 3.0.0 and 3.3.52, when a RichEditor field is disabled, the component displays its stored content without removing potentially dangerous HTML and JavaScript code. If an attacker can inject malicious code into that field's data—for example, through an API call or by tampering with form state—it will execute in the browsers of users viewing the form, compromising their sessions or stealing sensitive information. The fix arrives in version 3.3.53.

Source data · NVD / CISA · public domain

CVSS
3.1 · 7.6 HIGH · CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N
Weaknesses (CWE)
CWE-79
Affected products
0 configuration(s)
Published / Modified
2026-06-22 / 2026-06-23

NVD description (verbatim)

Filament is a collection of full-stack components for accelerated Laravel development. From 3.0.0 until 3.3.53, a disabled RichEditor field rendered its raw state without sanitizing HTML. Where the data stored in this field's state isn't sanitized already when the form state was filled, an attacker could plant malicious HTML or JavaScript and achieve XSS that executes for users who view the form. This vulnerability is fixed in 3.3.53.

1 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The vulnerability exists in Filament's RichEditor component when rendered in a disabled state. The component fails to sanitize HTML entities and JavaScript in its output, allowing stored XSS attacks. The attack vector requires prior authentication (PR:L) and user interaction to trigger (UI:R), but the impact is cross-site scripting that can steal credentials, hijack sessions, or deface forms viewed by other users. The root cause is the absence of HTML escaping or output encoding when the disabled state is rendered; the component assumes incoming data is already safe, which may not be true if state is populated from unsanitized sources (databases, APIs, or user input processed elsewhere).

Business impact

Organizations using affected Filament versions face XSS risk in any forms or dashboards that display disabled RichEditor fields. The practical impact depends on deployment context: internal admin panels have lower blast radius but affect trusted staff; customer-facing forms pose higher risk if user-controlled data flows into RichEditor state. Compromised user sessions could lead to unauthorized actions, data exfiltration, or lateral movement within applications. Incident response will require identifying all forms using RichEditor, auditing for stored malicious payloads, and notifying affected users if exploitation occurred.

Affected systems

All applications using Filament versions 3.0.0 through 3.3.52 that include RichEditor components in disabled state are potentially vulnerable. Exposure is highest in admin panels, customer dashboards, and any form where: (1) RichEditor is disabled but still rendered, (2) state is populated from user-controlled or insufficiently sanitized data sources, and (3) multiple users view the same form instance. Version 3.3.53 and later are unaffected. Earlier stable versions prior to 3.0.0 should be assessed separately against Filament's changelog.

Exploitability

Exploitation requires authenticated access (users must have login capability) and relies on social engineering or UI interaction to trigger viewing of the malicious form. An attacker cannot exploit this remotely without first gaining application access or compromising an account. However, once a payload is stored in a RichEditor field, it executes automatically for any subsequent user viewing that form—making it a persistent, high-confidence attack vector compared to reflected XSS. The barrier to weaponization is low if the attacker already has form submission access or can manipulate data at rest.

Remediation

Upgrade Filament to version 3.3.53 or later as soon as feasible. In parallel, apply defense-in-depth measures: (1) audit all RichEditor field data for HTML/JavaScript patterns, (2) sanitize any unsanitized state sources using a library like HTMLPurifier or similar, and (3) implement Content Security Policy headers to restrict inline script execution. For short-term risk reduction on unpatched systems, disable RichEditor components where possible or restrict access to forms containing them.

Patch guidance

Filament's patch for this vulnerability is included in version 3.3.53. Review the vendor's release notes at releases.filamentphp.com to confirm the fix and any breaking changes. Plan a staged rollout: test 3.3.53 in a development environment against your application's form workflows, verify that disabled RichEditor fields no longer render unescaped HTML, and confirm backward compatibility with any custom RichEditor extensions. If you use Composer, update via `composer update filament/filament:^3.3.53`.

Detection guidance

Search application logs and database records for disabled RichEditor field instances containing HTML tags such as <script>, <img onerror>, <svg onload>, or other event handlers. Use regex patterns to identify suspicious payloads (e.g., /\<script[^>]*\>|on\w+\=|javascript:/i). Monitor browser console errors and CSP violation reports for unexpected inline script execution. If CSP is not yet implemented, enable it in report-only mode to baseline current violations, then tighten rules to block inline scripts. Test forms with stored test payloads in a staging environment to verify sanitization is working post-patch.

Why prioritize this

This vulnerability merits prompt remediation despite not being on the CISA KEV list. The combination of authenticated access (moderate barrier), persistent execution (high impact once triggered), and ease of weaponization (straightforward HTML injection) creates meaningful risk. The CVSS 7.6 HIGH score reflects the cross-site impact (S:C) and high confidentiality impact (C:H), justified by session theft and data exfiltration scenarios. Organizations should prioritize based on form exposure: customer-facing or admin panels with many users should upgrade within 1–2 weeks; internal tools with few users can follow a standard patch cycle.

Risk score, explained

The CVSS 7.6 (HIGH) score reflects: Network-based attack vector (any authenticated user can trigger), Low attack complexity (no special conditions needed), Low privilege requirement (authenticated users suffice), Required user interaction (victim must view the form), and Scope changed (XSS can affect other users and the application beyond its security scope). Confidentiality is rated High because stolen session tokens or data are possible; Integrity is Low because the attacker modifies display only, not persistent app state; Availability is None. The score appropriately weights the persistent, cross-user impact of stored XSS in a commonly-accessed component.

Frequently asked questions

Do I need to sanitize existing data in my RichEditor fields after upgrading to 3.3.53?

Yes. The patch prevents future XSS, but does not remove payloads already stored in your database. Audit all RichEditor field values for HTML and JavaScript patterns, and clean them using a server-side sanitization library before users interact with those forms again. This is especially critical if you cannot determine when or how data was inserted.

Will the patch break my custom RichEditor configurations or extensions?

Filament's security fix adds HTML escaping to output, which should not break standard configurations. However, if you have custom code that deliberately injects HTML or JavaScript into RichEditor state, that code will break and must be refactored. Review any custom RichEditor rendering logic before deploying to production.

Is this vulnerability exploitable if I use Content Security Policy (CSP)?

A strict CSP blocking inline scripts and eval will reduce risk significantly, but it is not a substitute for the patch. Some browsers and older deployments may not enforce CSP reliably. Additionally, CSP can be bypassed through data exfiltration without executing inline script. Patching is the primary defense.

What if we are not using the RichEditor component in our Filament application?

You are not affected by this vulnerability. Only applications that include the RichEditor field and render it in a disabled state face risk. Other Filament components are not impacted by this issue.

This analysis is for informational purposes and does not constitute professional security advice. Organizations must validate vulnerability applicability against their specific Filament versions, custom configurations, and deployment environments. Verify all version numbers and patch references against official Filament release notes and security advisories. No exploit code or weaponized proof-of-concept is included. Testing any patches should occur in non-production environments first. Consult with your security team and vendor support before deploying patches to production systems. Source: NVD (public-domain), retrieved 2026-07-28. Analysis generated by SEC.co (claude-haiku-4-5).