Programmatic logins in Symfony skip post-authentication user checks
Key facts
- Attack vector
- Network
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- Low
- Attack requirements
- Present
- Impact type
- Security bypass
- Confidentiality · integrity · availability
- Low · Low · None
- Fix status
- Fixed
Attack profile from CVSS 4.0 · CNA. Fix status from CNA. Impact type from CWE-288.
Summary
Symfony versions before 5.4.56, from 6.0.0 before 6.4.50, from 7.0.0 before 7.4.23, and from 8.0.0 before 8.1.11 skip the custom user checker's checkPostAuth() method on programmatic logins. An application whose checker rejects accounts in checkPostAuth() still lets those accounts obtain an authenticated session through such a login, for example after a password reset or e-mail verification link. An attacker with low privileges can exploit this over the network without user interaction (CWE-288).
Written with Claude Haiku 5.5 from the sources below · 2026-11-06
Description from the CNA
The Symfony Security HTTP component AuthenticatorManager::authenticateUser() does not run the firewall user checker’s checkPostAuth() method when a user is authenticated programmatically, allowing an account rejected by a custom user checker, such as an expired account, to be authenticated in Symfony versions prior to 5.4.56, 6.x prior to 6.4.50, 7.x prior to 7.4.23, and 8.x prior to 8.1.11. AuthenticatorManager::authenticateUser() is used by UserAuthenticatorInterface::authenticateUser() and by the SecurityBundle’s Security::login() to authenticate a user programmatically, but it does not dispatch the security.authentication.success event, on which checkPostAuth() runs. The fix for CVE-2024-50341 made Security::login() call checkPreAuth(), but checkPostAuth() was still skipped. As a result, an account rejected by a custom user checker in checkPostAuth() is refused by form login and the other authenticators of the firewall, but can still be authenticated programmatically. Applications are affected when they use a custom user checker that rejects users in checkPostAuth() and authenticate users programmatically, for example after a password reset or an e-mail verification link. A user whose account is rejected can then obtain an authenticated session through that flow. The default user checker does nothing in checkPostAuth(), so the default configuration is not affected. The fix makes AuthenticatorManager::authenticateUser() dispatch the security.authentication.success event once the token is created and before it is stored, as authentications through the firewall do, so that checkPostAuth() runs and can reject the user.
Why it matters now
SSVC decision points
Not available: CISA has not published SSVC decision points for this record.
Affected products
No affected products listed by the sources yet.
Remediation
Upgrade Symfony to 5.4.56, 6.4.50, 7.4.23, or 8.1.11, matching your release line.
Written with Claude Haiku 5.5 from the sources below · 2026-11-06
Fixed in the same release
Records fixed by the same vendor advisory or release, as the CNA lists them.
- Release ·
sensiolabs symfony 5.4.56, 6.4.50 and 2 more versions
6 records Highest priority Priority LOW 6 LOW
Other records, highest priority first
- TI-2026-85971 Symfony YAML parser inefficient parsing enables denial of servicePriority LOW 38
- TI-2026-85989 Symfony Serializer lets clients turn server files into uploadsPriority LOW 37
- TI-2026-85987 Symfony DataUriNormalizer reads local files from uppercase data URIsPriority LOW 36
Timeline
- 2026-11-06 Threatist record created from CVE-2026-123746
References
More sensiolabs vulnerabilities
- TI-2019-13616 An issue was discovered in Symfony 3.4.0 through 3.4.34, 4.2.0 through 4.2.11, and 4.3.0… CVSS 3.1CRITICAL 9.8
- TI-2018-10604 An issue was discovered in Http Foundation in Symfony 2.7.0 through 2.7.48, 2.8.0 through… CVSS 3.1MEDIUM 6.5
- TI-2019-08131 In Symfony before 2.7.51, 2.8.x before 2.8.50, 3.x before 3.4.26, 4.x before 4.1.12, and… CVSS 3.1CRITICAL 9.8
- TI-2016-02159 Symfony before 2.8.6 and 3.x before 3.0.6 allows remote attackers to bypass… CVSS 3.0CRITICAL 9.8
- TI-2019-08459 An issue was discovered in Symfony before 4.2.12 and 4.3.x before 4.3.8. CVSS 3.1CRITICAL 9.8
- TI-2018-08136 An issue was discovered in the Ldap component in Symfony 2.8.x before 2.8.37, 3.3.x… CVSS 3.0CRITICAL 9.8
Sources
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences