Listen to this Post
How the CVE Works
The vulnerability occurs when `ComponentAttributes` instances (like those from only(), defaults(), or without()) render untrusted user input via `{{ attributes }}` without proper escaping. Attackers can inject malicious HTML attributes, leading to Cross-Site Scripting (XSS). For example, if user-controlled data includes "onload=malicious_code()", it executes when rendered. The flaw stems from missing Twig `EscaperRuntime` integration in older versions, allowing raw output of unsafe values.
DailyCVE Form:
Platform: Symfony UX Twig
Version: <2.25.1
Vulnerability: Attribute Injection
Severity: Critical
Date: 2023-XX-XX
What Undercode Say:
Analytics:
- Exploit Likelihood: High (requires user input reflection).
- Attack Vector: Client-side XSS via crafted attributes.
Exploit Example:
{ Malicious user input }
{% set userInput = 'class="x" onmouseover=alert(1)' %}
<div {{ attributes.addClass(userInput) }}></div>
Protection Commands:
1. Upgrade:
composer require symfony/ux-twig-component:2.25.1
2. Manual Escaping (Workaround):
{ Safe rendering }
<div {{ attributes.render('class') }}></div>
Code Fix (Patch Reference):
// Patched ComponentAttributes.php
use Twig\Escaper\EscaperRuntime;
public function __toString(): string {
return twig_escape_filter($this->escaper, $this->attributes);
}
Detection Script (Check Version):
composer show symfony/ux-twig-component | grep -i version
Mitigation Steps:
- Audit all `{{ attributes }}` usage.
- Replace direct rendering with
attributes.render(). - Sanitize dynamic attribute values via Twig filters (
|e).
References:
Sources:
Reported By: github.com
Extra Source Hub:
Undercode

