Sylius has a XSS vulnerability in checkout login form
Date: 2026-03
Affected: composer/sylius/sylius, composer/sylius/sylius, composer/sylius/sylius
Attack vector: xss
Category: vulnerability-disclosure
Severity: Medium
CVE: CVE-2026-31822
CWE: CWE-79

### Impact A cross-site scripting (XSS) vulnerability exists in the shop checkout login form handled by the ApiLoginController Stimulus controller. When a login attempt fails, AuthenticationFailureHandler returns a JSON response whose message field is rendered into the DOM using innerHTML, allowing any HTML or JavaScript in that value to be parsed and executed by the browser. The message value originates from `AuthenticationException::getMessageKey()` passed through Symfony's translator (security domain, using the request locale). In the default Sylius installation, this returns a hardcoded translation key (e.g. "Invalid credentials."), which is not directly user-controlled. However, using innerHTML with server-derived data violates defense-in-depth principles, and the risk escalates significantly under realistic scenarios: - Customized authentication handlers — if a project overrides AuthenticationFailureHandler to include user-supplied data in the message (e.g. "No account found for <username>"), an attacker can inject arbitrary JavaScript directly via the login form without any privileged access. - Translation injection — if translation files are sourced from an untrusted database or CMS and contain HTML, the message could carry a malicious payload. - Man-in-the-Middle — if the response is intercepted (e.g. on HTTP or via a compromised proxy), an attack


Mitigations:

Architectural layers (MAESTRO):