GitHub Advisoryadvisory · Packagist

GHSA-h5vq-qfcg-4m6p Symfony's HtmlSanitizer URL Attributes Pass Through BiDi Override Characters → Visual href Spoofing

MEDIUM Published 2026-05-27 Modified 2026-05-27 Official page ↗
Aliases
CVE-2026-45064
Ecosystem
Packagist
Packages
symfony/html-sanitizer, symfony/symfony
Severity
Moderate
CVSS vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
Weaknesses
CWE-1007, CWE-451
Reviewed
2026-05-27

Affected packages

• Packagist symfony/html-sanitizer: >= 6.1.0, < 6.4.40 → fixed in 6.4.40 • Packagist symfony/html-sanitizer: >= 7.0.0, < 7.4.12 → fixed in 7.4.12 • Packagist symfony/html-sanitizer: >= 8.0.0, < 8.0.12 → fixed in 8.0.12 • Packagist symfony/symfony: >= 6.1.0, < 6.4.40 → fixed in 6.4.40 • Packagist symfony/symfony: >= 7.0.0, < 7.4.12 → fixed in 7.4.12 • Packagist symfony/symfony: >= 8.0.0, < 8.0.12 → fixed in 8.0.12

Description

Description `Symfony\Component\HtmlSanitizer\TextSanitizer\UrlSanitizer::parse()` (used by `UrlSanitizer::sanitize()` and therefore by every `HtmlSanitizer` config that allows links or media) accepts URLs that contain Unicode explicit-direction BiDi formatting characters: U+202A–U+202E (LRE / RLE / PDF / LRO / RLO) and U+2066–U+2069 (LRI / RLI / FSI / PDI). These characters are passed through unchanged into the `href` / `src` attributes produced by `HtmlSanitizer`. When the resulting HTML is rendered in a browser, the override characters reverse or alter the visual ordering of the URL text, so the displayed link can differ arbitrarily from the actual destination: a classic visual-spoofing / phishing primitive against viewers of sanitized content. Resolution `UrlSanitizer::parse()` now rejects URLs containing the explicit-direction BiDi formatting code points (U+202A–U+202E, U+2066–U+2069) before invoking the underlying URL parser. As an unrelated companion fix in the same patch, spaces inside path/query/fragment are now percent-encoded rather than rejected outright, while spaces in the scheme/authority remain rejected by the post-encoding whitespace check. The patch for this issue is available here for branch 5.4. Credits Symfony would like to thank Himanshu Anand for reporting the issue and Nicolas Grekas for providing the fix.

Related

Alias · CVE (1)

  • CVE-2026-45064 Symfony is a PHP framework for web and console applications and a set of reusable PHP components. vulnerability

Weakness · CWE (2)

  • CWE-1007 Insufficient Visual Distinction of Homoglyphs Presented to User weakness
  • CWE-451 User Interface (UI) Misrepresentation of Critical Information weakness

References