Description
Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') vulnerability in phoenixframework phoenix_html allows an attacker who controls attribute names to inject attributes and script into rendered HTML via Phoenix.HTML.attributes_escape/1.

attributes_escape/1 in lib/phoenix_html.ex escapes attribute values but not attribute names. key_escape/1 passes a binary key through html_escape, which neutralizes quotes and angle brackets but not whitespace, so a key such as x onmouseover ends the attribute and starts a new one. An atom key is only dasherized, so any character passes, including quotes and >. Nested data, aria and phx keys take the same paths. An application is affected when it builds attribute keys from untrusted input and renders them through HEEx <tag {@attrs}>, content_tag/3, or a direct call. Before 3.0.0 the same code lived in Phoenix.HTML.Tag.

This issue affects phoenix_html: from 1.0.0 before 3.3.5 and from 4.0.0 before 4.4.0.
Published: 2026-10-30
Score: 5.3 Medium
EPSS: n/a
KEV: No
Impact: Cross‑site Scripting
Action: Patch Now
AI Analysis

Impact

Phoenix.HTML attributes_escape/1 escapes attribute values but not attribute names, letting an attacker who controls attribute keys inject arbitrary attributes and scripts into rendered HTML. This improper neutralization causes a classic cross‑site scripting flaw that can compromise user confidentiality, tamper with data, and potentially execute code in the victim’s browser context.

Affected Systems

This vulnerability impacts the Phoenix HTML library from Phoenix Framework. Affected versions include 1.0.0 up to and including 3.3.4, and 4.0.0 up to and including 4.3.9. Applications that render dynamic attributes via HEEx <tag {@attrs}>, content_tag/3, or a direct call to attributes_escape/1 are susceptible when they build attribute names from untrusted input.

Risk and Exploitability

The CVSS score is 5.3, indicating medium severity, and the EPSS score is not available, so current exploitation probability is unknown. The flaw is not listed in the CISA KEV catalog. Attackers can typically exploit the vulnerability remotely by supplying crafted attribute names through web requests—such as form fields or query parameters—that an application passes to attributes_escape/1 or HEEx macros. If untrusted input drives attribute name generation, an attacker can inject scripts or event handlers that execute inside the user’s browser.

Generated by OpenCVE AI on October 30, 2026 at 21:38 UTC.

Remediation

Vendor Workaround

Do not derive attribute names from untrusted input. Where dynamic attribute keys are needed, check each key against an allow list, or against a pattern such as ^[a-zA-Z][a-zA-Z0-9:._-]*$, before passing the map to attributes_escape/1 or a HEEx {@attrs} expression. Do not create atoms from request data.


OpenCVE Recommended Actions

  • Upgrade Phoenix.HTML to version 3.3.5 or later (or to 4.4.0 or later if using Phoenix 4).
  • Validate all attribute names derived from user input against a whitelist or the regular expression ^[a-zA-Z][a-zA-Z0-9:._-]*$ before passing them to attributes_escape/1 or HEEx {@attrs}.
  • Refactor code that builds attribute maps from request data so that only predetermined, sanitized attribute names remain in the map used for rendering.

Generated by OpenCVE AI on October 30, 2026 at 21:38 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 30 Oct 2026 20:30:00 +0000

Type Values Removed Values Added
Description Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') vulnerability in phoenixframework phoenix_html allows an attacker who controls attribute names to inject attributes and script into rendered HTML via Phoenix.HTML.attributes_escape/1. attributes_escape/1 in lib/phoenix_html.ex escapes attribute values but not attribute names. key_escape/1 passes a binary key through html_escape, which neutralizes quotes and angle brackets but not whitespace, so a key such as x onmouseover ends the attribute and starts a new one. An atom key is only dasherized, so any character passes, including quotes and >. Nested data, aria and phx keys take the same paths. An application is affected when it builds attribute keys from untrusted input and renders them through HEEx <tag {@attrs}>, content_tag/3, or a direct call. Before 3.0.0 the same code lived in Phoenix.HTML.Tag. This issue affects phoenix_html: from 1.0.0 before 3.3.5 and from 4.0.0 before 4.4.0.
Title Phoenix.HTML vulnerable to attribute injection via unvalidated attribute names in attributes_escape/1
First Time appeared Phoenixframework
Phoenixframework phoenix Html
Weaknesses CWE-79
CPEs cpe:2.3:a:phoenixframework:phoenix_html:*:*:*:*:*:*:*:*
Vendors & Products Phoenixframework
Phoenixframework phoenix Html
References
Metrics cvssV4_0

{'score': 5.3, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N'}


Subscriptions

Phoenixframework Phoenix Html
cve-icon MITRE

Status: PUBLISHED

Assigner: EEF

Published:

Updated: 2026-10-30T20:25:06.758Z

Reserved: 2026-10-30T12:15:02.726Z

Link: CVE-2026-117645

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-10-30T21:16:51.170

Modified: 2026-10-30T21:16:51.170

Link: CVE-2026-117645

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-30T21:30:11Z

Weaknesses
  • CWE-79

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