Description
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.
Published: 2026-11-06
Score: 2.3 Low
EPSS: n/a
KEV: No
Impact: Post‑authentication bypass allows unauthorized account access
Action: Patch
AI Analysis

Impact

This vulnerability arises when Symfony's AuthenticatorManager::authenticateUser skips the firewall user checker's checkPostAuth() routine during programmatic login. Because the post‑authentication check is never invoked, accounts that a custom user checker intends to reject—such as expired or suspended users—can still obtain an authenticated session. The weakness is CWE‑288, and the potential impact is unauthorized access or privilege escalation when the application relies on programmatic sign‑ins for sensitive operations.

Affected Systems

The flaw affects applications built with Symfony up to and including 5.4.55, 6.x up to 6.4.49, 7.x up to 7.4.22, and 8.x up to 8.1.10. Users of earlier Symfony releases must update to 5.4.56 or later, 6.4.50 or later, 7.4.23 or later, or 8.1.11 or later to receive the fix.

Risk and Exploitability

The CVSS base score of 2.3 indicates low overall risk, and EPSS is not available for this list, suggesting limited evidence of active exploitation. The vulnerability is not listed in the CISA KEV catalog. The most likely attack vector is an application or system that allows programmatic authentication—such as password‑reset or email‑verification flows—containing a custom checker that rejects users only in checkPostAuth(). An attacker exploiting this flaw could authenticate a rejected account via such flows, bypassing the intended security constraint.

Generated by OpenCVE AI on November 6, 2026 at 14:05 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade Symfony to a patched release (5.4.56+, 6.4.50+, 7.4.23+, 8.1.11+).
  • If upgrading is not possible, modify or disable custom user checkers that reject users solely in checkPostAuth(), ensuring they also reject during checkPreAuth() or preventing programmatic login for those accounts.
  • Review all programmatic authentication flows (password reset, email verification) to confirm they do not sign in accounts that should remain rejected, or apply an additional access control check after authentication to deny such sessions.

Generated by OpenCVE AI on November 6, 2026 at 14:05 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 06 Nov 2026 12:45:00 +0000

Type Values Removed Values Added
Description 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.
Title Symfony: Programmatic Logins Skip the checkPostAuth() Method of User Checkers
First Time appeared Sensiolabs
Sensiolabs symfony
Weaknesses CWE-288
CPEs cpe:2.3:a:sensiolabs:symfony:*:*:*:*:*:*:*:*
Vendors & Products Sensiolabs
Sensiolabs symfony
References
Metrics cvssV4_0

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


Subscriptions

Sensiolabs Symfony
cve-icon MITRE

Status: PUBLISHED

Assigner: Checkmarx

Published:

Updated: 2026-11-06T12:36:50.994Z

Reserved: 2026-11-06T12:28:14.998Z

Link: CVE-2026-123746

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-11-06T13:17:29.950

Modified: 2026-11-06T13:17:29.950

Link: CVE-2026-123746

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-11-06T14:15:04Z

Weaknesses
  • CWE-288

    Authentication Bypass Using an Alternate Path or Channel