Skip to content

Stored XSS in Freeform control panel builder and integrations views

Moderate
kjmartens published GHSA-jp3q-wwp3-pwv9 Jan 22, 2026

Package

composer solspace/craft-freeform (Composer)

Affected versions

>= 5.0.0, <= 5.14.6

Patched versions

5.14.7

Description

Summary

Freeform for Craft CMS contained a stored cross-site scripting issue in some control panel views. An authenticated Craft CP user with permission to create or edit Freeform forms or integrations could save HTML/JavaScript in certain labels or integration metadata. The payload could execute when another CP user viewed the affected Freeform builder or integration screens.

This issue affects control panel users only. It does not allow unauthenticated front-end visitors to inject JavaScript.

Details

Certain user-controlled values, including form field labels, section labels, and integration metadata, were rendered in Freeform’s React-based control panel UI using raw HTML rendering without sufficient sanitization.

Affected areas included parts of the form builder and integrations UI where saved values were displayed back to CP users.

Proof of Concept

Label-based XSS

  1. Log in to the Craft control panel as a user with permission to create or edit Freeform forms.
  2. In Craft CP, create/edit a Freeform field and set its label to <img src=x onerror="alert('xss-label')">.
  3. Open the form builder view containing the field.
  4. Alert executes (stored XSS).

Integration icon SVG

  1. Log in to the Craft control panel as a user with permission to create or edit Freeform forms.
  2. Set an integration "icon SVG" to <svg><script>alert('xss-icon')</script></svg>.
  3. Open the integrations CP view.
  4. Script executes.

Impact

A malicious authenticated CP user with Freeform form or integration editing permissions could execute JavaScript in another CP user’s browser when that user viewed the affected Freeform screens.

Depending on the victim’s permissions and browser/session protections, the injected script could perform actions in the Craft CP as the victim or access data available to that user.

Remediation

Update to Freeform 5.14.7 or later.

The issue was resolved by escaping or sanitizing user-controlled values before rendering them in the Freeform control panel UI and by avoiding raw HTML rendering where it was not required.

Workarounds

Restrict Freeform form and integration editing permissions to trusted users until the plugin can be updated.

Credits

Discovered by Prav33N-Sec

Severity

Moderate

CVSS overall score

This score calculates overall vulnerability severity from 0 to 10 and is based on the Common Vulnerability Scoring System (CVSS).
/ 10

CVSS v3 base metrics

Attack vector
Network
Attack complexity
Low
Privileges required
Low
User interaction
Required
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

CVSS v3 base metrics

Attack vector: More severe the more the remote (logically and physically) an attacker can be in order to exploit the vulnerability.
Attack complexity: More severe for the least complex attacks.
Privileges required: More severe if no privileges are required.
User interaction: More severe when no user interaction is required.
Scope: More severe when a scope change occurs, e.g. one vulnerable component impacts resources in components beyond its security scope.
Confidentiality: More severe when loss of data confidentiality is highest, measuring the level of data access available to an unauthorized user.
Integrity: More severe when loss of data integrity is the highest, measuring the consequence of data modification possible by an unauthorized user.
Availability: More severe when the loss of impacted component availability is highest.
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N

CVE ID

CVE-2026-26188

Weaknesses

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

The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users. Learn more on MITRE.

Credits