CVE-2026-45069
Symfony: OidcTokenHandler Accepts JWTs Missing aud/iss/exp Claims
Symfony is a PHP framework for web and console applications and a set of reusable PHP components. Prior to 6.4.40, 7.4.12, and 8.0.12, OidcTokenHandler::verifyClaims() registered audience (aud), issuer (iss), and expiry (exp) checkers but did not pass the mandatory claims list to ClaimCheckerManager::check(), so a validly signed JWT that omitted those claims could pass verification. This issue is fixed in versions 6.4.40, 7.4.12, and 8.0.12.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- Low
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
8.8
Symfony: OidcTokenHandler Accepts JWTs Missing aud/iss/exp Claims
Symfony is a PHP framework for web and console applications and a set of reusable PHP components. Prior to 6.4.40, 7.4.12, and 8.0.12, OidcTokenHandler::verifyClaims() registered audience (aud), issuer (iss), and expiry (exp) checkers but did not pass the mandatory claims list to ClaimCheckerManager::check(), so a validly signed JWT that omitted those claims could pass verification. This issue is fixed in versions 6.4.40, 7.4.12, and 8.0.12.
- Record
CVE-2026-45069- CVSS 4.0
- 8.8 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-345, CWE-1287
- Updated
- 2026-11-02
EUVDEUVD-2026-44357
8.8
Symfony is a PHP framework for web and console applications and a set of reusable PHP components. Prior to 6.4.40, 7.4.12, and 8.0.12, OidcTokenHandler::verifyClaims() registered audience (aud), issuer (iss), and expiry (exp) checkers but did not pass the mandatory claims list to ClaimCheckerManager::check(), so a validly signed JWT that omitted those claims could pass verification. This issue is fixed in versions 6.4.40, 7.4.12, and 8.0.12.
- Record
EUVD-2026-44357- CVSS 4.0
- 8.8 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-29fc-p6c4-24cg
4.9
Symfony's OidcTokenHandler Accepts JWTs Missing aud/iss/exp Claims
Description
OidcTokenHandler is Symfony's built-in access-token handler for OpenID Connect: it validates a bearer JWT and returns the authenticated user identity. It delegates claim validation to the web-token/jwt-checker library's ClaimCheckerManager.
OidcTokenHandler::verifyClaims() registers audience (aud), issuer (iss), and expiry (exp) checkers, but never passes the $mandatoryClaims argument to ClaimCheckerManager::check(). That method only validates claims that are present in the token: a checker for an absent claim is silently skipped. A validly-signed JWT that simply omits aud, iss, and exp therefore passes verification.
Resolution
The OidcTokenHandler now calls the ClaimCheckerManager with the list of mandatory claims so that tokens missing aud, iss, or exp are rejected.
The patch for this issue is available here for branch 6.4.
Credits
Symfony would like to thank Claude Mythos Preview (via Project Glasswing) for reporting the issue and providing the fix.
- Record
GHSA-29fc-p6c4-24cg- CVSS 4.0
- 4.9 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:U - Weakness
- CWE-345, CWE-1287
- Updated
- 2026-11-02
NVD
8.8
Symfony is a PHP framework for web and console applications and a set of reusable PHP components. Prior to 6.4.40, 7.4.12, and 8.0.12, OidcTokenHandler::verifyClaims() registered audience (aud), issuer (iss), and expiry (exp) checkers but did not pass the mandatory claims list to ClaimCheckerManager::check(), so a validly signed JWT that omitted those claims could pass verification. This issue is fixed in versions 6.4.40, 7.4.12, and 8.0.12.
- Record
CVE-2026-45069- CVSS 4.0
- 8.8 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-345, CWE-1287
- Updated
- 2026-11-02
OSV
8.8
Symfony: OidcTokenHandler Accepts JWTs Missing aud/iss/exp Claims
Symfony is a PHP framework for web and console applications and a set of reusable PHP components. Prior to 6.4.40, 7.4.12, and 8.0.12, OidcTokenHandler::verifyClaims() registered audience (aud), issuer (iss), and expiry (exp) checkers but did not pass the mandatory claims list to ClaimCheckerManager::check(), so a validly signed JWT that omitted those claims could pass verification. This issue is fixed in versions 6.4.40, 7.4.12, and 8.0.12.
- Record
CVE-2026-45069- CVSS 4.0
- 8.8 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-1287, CWE-345
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-45069
9.1
Symfony is a PHP framework for web and console applications and a set of reusable PHP components. Prior to 6.4.40, 7.4.12, and 8.0.12, OidcTokenHandler::verifyClaims() registered audience (aud), issuer (iss), and expiry (exp) checkers but did not pass the mandatory claims list to ClaimCheckerManager::check(), so a validly signed JWT that omitted those claims could pass verification. This issue is fixed in versions 6.4.40, 7.4.12, and 8.0.12.
- Record
DEBIAN-CVE-2026-45069- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-02
OSVGHSA-29fc-p6c4-24cg
4.9
Symfony's OidcTokenHandler Accepts JWTs Missing aud/iss/exp Claims
Description
OidcTokenHandler is Symfony's built-in access-token handler for OpenID Connect: it validates a bearer JWT and returns the authenticated user identity. It delegates claim validation to the web-token/jwt-checker library's ClaimCheckerManager.
OidcTokenHandler::verifyClaims() registers audience (aud), issuer (iss), and expiry (exp) checkers, but never passes the $mandatoryClaims argument to ClaimCheckerManager::check(). That method only validates claims that are present in the token: a checker for an absent claim is silently skipped. A validly-signed JWT that simply omits aud, iss, and exp therefore passes verification.
Resolution
The OidcTokenHandler now calls the ClaimCheckerManager with the list of mandatory claims so that tokens missing aud, iss, or exp are rejected.
The patch for this issue is available here for branch 6.4.
Credits
Symfony would like to thank Claude Mythos Preview (via Project Glasswing) for reporting the issue and providing the fix.
- Record
GHSA-29fc-p6c4-24cg- CVSS 4.0
- 4.9 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:U - Weakness
- CWE-1287, CWE-345
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-45069
8.8
Symfony is a PHP framework for web and console applications and a set of reusable PHP components. Prior to 6.4.40, 7.4.12, and 8.0.12, OidcTokenHandler::verifyClaims() registered audience (aud), issuer (iss), and expiry (exp) checkers but did not pass the mandatory claims list to ClaimCheckerManager::check(), so a validly signed JWT that omitted those claims could pass verification. This issue is fixed in versions 6.4.40, 7.4.12, and 8.0.12.
- Record
UBUNTU-CVE-2026-45069- CVSS 4.0
- 8.8 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N - CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
symfony/security-httpPackagist |
6.3.0 up to 6.4.40 | 6.4.40 |
symfony/security-httpPackagist |
7.4.0 up to 7.4.12 | 7.4.12 |
symfony/security-httpPackagist |
8.0.0 up to 8.0.12 | 8.0.12 |
symfony/symfonyPackagist |
6.3.0 up to 6.4.40 | 6.4.40 |
symfony/symfonyPackagist |
7.4.0 up to 7.4.12 | 7.4.12 |
symfony/symfonyPackagist |
8.0.0 up to 8.0.12 | 8.0.12 |
symfonyDebian:13 |
before 6.4.41+dfsg-0+deb13u1, plus listed versions 6.4.21+dfsg-26.4.21+dfsg-2+deb13u16.4.24+dfsg-16.4.25+dfsg-16.4.40+dfsg-0+deb13u1 |
6.4.41+dfsg-0+deb13u1 |
symfonyDebian:14 |
before 7.4.12+dfsg-1, plus listed versions 6.4.21+dfsg-26.4.24+dfsg-16.4.25+dfsg-17.0.4+dfsg-17.0.5+dfsg-1 Show 45 moreShow less7.0.6+dfsg-17.0.7+dfsg-17.1.0~beta1+dfsg-17.1.0~rc1+dfsg-17.1.2+dfsg-17.1.3+dfsg-17.1.4+dfsg-17.1.5+dfsg-17.2.0~beta1+dfsg-17.2.0~beta2+dfsg-17.2.0~rc1+dfsg-17.2.1+dfsg-17.2.2+dfsg-17.2.3+dfsg-17.2.4+dfsg-17.2.5+dfsg-17.2.6-17.3.0+dfsg-17.3.0~beta1+dfsg-17.3.0~beta2+dfsg-17.3.0~rc1+dfsg-17.3.1+dfsg-17.3.2+dfsg-17.3.3+dfsg-17.3.4+dfsg-17.3.5-17.4.0+dfsg-17.4.0+dfsg-27.4.0~beta1-17.4.0~beta1-27.4.0~beta2+dfsg-17.4.0~beta2+dfsg-27.4.0~beta2+dfsg-37.4.0~rc1+dfsg-17.4.0~rc2+dfsg-17.4.0~rc3+dfsg-17.4.10+dfsg-17.4.2+dfsg-17.4.2+dfsg-27.4.3+dfsg-17.4.4+dfsg-17.4.5+dfsg-17.4.6+dfsg-17.4.6+dfsg-27.4.7+dfsg-1 |
7.4.12+dfsg-1 |
symfony/security-httpPackagist |
6.3.0 up to 6.4.40, plus listed versions v6.3.0v6.3.1v6.3.12v6.3.2v6.3.4 Show 30 moreShow lessv6.3.5v6.3.6v6.3.8v6.4.0v6.4.0-BETA1v6.4.0-BETA3v6.4.0-RC1v6.4.0-RC2v6.4.11v6.4.12v6.4.13v6.4.14v6.4.15v6.4.18v6.4.19v6.4.21v6.4.22v6.4.23v6.4.24v6.4.25v6.4.26v6.4.3v6.4.30v6.4.31v6.4.34v6.4.39v6.4.4v6.4.7v6.4.8v6.4.9 |
6.4.40 |
symfony/security-httpPackagist |
7.4.0 up to 7.4.12, plus listed versions v7.4.0v7.4.1v7.4.11v7.4.3v7.4.4v7.4.6v7.4.8v7.4.9 |
7.4.12 |
Show 12 moreShow less
| Package | Affected | Fixed |
|---|---|---|
symfony/security-httpPackagist |
8.0.0 up to 8.0.12, plus listed versions v8.0.0v8.0.1v8.0.11v8.0.3v8.0.4v8.0.6v8.0.8v8.0.9 |
8.0.12 |
symfony/symfonyPackagist |
6.3.0 up to 6.4.40, plus listed versions v6.3.0v6.3.1v6.3.10v6.3.11v6.3.12 Show 45 moreShow lessv6.3.2v6.3.3v6.3.4v6.3.5v6.3.6v6.3.7v6.3.8v6.3.9v6.4.0v6.4.0-BETA1v6.4.0-BETA2v6.4.0-BETA3v6.4.0-RC1v6.4.0-RC2v6.4.1v6.4.10v6.4.11v6.4.12v6.4.13v6.4.14v6.4.15v6.4.16v6.4.17v6.4.18v6.4.19v6.4.2v6.4.20v6.4.21v6.4.22v6.4.23v6.4.24v6.4.25v6.4.26v6.4.27v6.4.28v6.4.29v6.4.3v6.4.30v6.4.31v6.4.32v6.4.33v6.4.34v6.4.35v6.4.36v6.4.37 |
6.4.40 |
symfony/symfonyPackagist |
7.4.0 up to 7.4.12, plus listed versions v7.4.0v7.4.1v7.4.10v7.4.11v7.4.2 Show 7 moreShow lessv7.4.3v7.4.4v7.4.5v7.4.6v7.4.7v7.4.8v7.4.9 |
7.4.12 |
symfony/symfonyPackagist |
8.0.0 up to 8.0.12, plus listed versions v8.0.0v8.0.1v8.0.10v8.0.11v8.0.2 Show 7 moreShow lessv8.0.3v8.0.4v8.0.5v8.0.6v8.0.7v8.0.8v8.0.9 |
8.0.12 |
symfonyUbuntu:16.04:LTS |
All versions, plus listed versions 2.7.1+dfsg-12.7.5+dfsg-12.7.9+dfsg-12.7.9+dfsg-1ubuntu22.7.10-0ubuntu2 |
None known |
symfonyUbuntu:Pro:18.04:LTS |
All versions, plus listed versions 2.8.7+dfsg-1.3ubuntu13.4.3+dfsg-1ubuntu43.4.6+dfsg-13.4.6+dfsg-1ubuntu0.13.4.6+dfsg-1ubuntu0.1+esm13.4.6+dfsg-1ubuntu0.1+esm2 |
None known |
symfonyUbuntu:Pro:20.04:LTS |
All versions, plus listed versions 4.3.4+dfsg-1ubuntu14.3.8+dfsg-1ubuntu14.3.8+dfsg-1ubuntu1+esm14.3.8+dfsg-1ubuntu1+esm2 |
None known |
symfonyUbuntu:Pro:22.04:LTS |
All versions, plus listed versions 5.2.6+dfsg-1ubuntu75.4.4+dfsg-1ubuntu85.4.4+dfsg-1ubuntu8+esm1 |
None known |
symfonyUbuntu:Pro:24.04:LTS |
All versions, plus listed versions 5.4.23+dfsg-1ubuntu15.4.35+dfsg-3ubuntu16.4.5+dfsg-3ubuntu26.4.5+dfsg-3ubuntu36.4.5+dfsg-3ubuntu3+esm1 |
None known |
symfonyUbuntu:25.10 |
All versions, plus listed versions 6.4.18+dfsg-1ubuntu16.4.21+dfsg-26.4.21+dfsg-2ubuntu16.4.24+dfsg-1 |
None known |
symfonyUbuntu:26.10 |
All versions, plus listed versions 7.4.7+dfsg-1ubuntu17.4.9+dfsg-1ubuntu17.4.13+dfsg-2ubuntu17.4.14+dfsg-1ubuntu27.4.15+dfsg-2ubuntu27.4.16+dfsg-1ubuntu2 |
None known |
symfonyUbuntu:26.04:LTS |
All versions, plus listed versions 6.4.24+dfsg-17.4.5+dfsg-1ubuntu17.4.6+dfsg-2ubuntu17.4.7+dfsg-1ubuntu1 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-45069 is a high vulnerability (CVSS 8.8) in Sensiolabs Symfony, published May 27, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.26%, the 17th percentile. Fixed in symfony/security-http 6.4.40.
References
github.com/symfony/symfony/security/advisories/GHSA-29fc-p6c4-24cg
github.com/symfony/symfony/releases/tag/v6.4.40
github.com/symfony/symfony/releases/tag/v7.4.12
github.com/symfony/symfony/releases/tag/v8.0.12
github.com/symfony/symfony/commit/6b717aaac21b7e96798448d14c4355ea87690b3d
github.com/FriendsOfPHP/security-advisories/blob/master/symfony/security-http/CVE-2026-45069.yaml
Show 10 moreShow less
github.com/FriendsOfPHP/security-advisories/blob/master/symfony/symfony/CVE-2026-45069.yaml
symfony.com/cve-2026-45069
github.com/advisories/GHSA-29fc-p6c4-24cg
github.com/CVEProject/cvelistV5/tree/main/cves/2026/45xxx/CVE-2026-45069.json
nvd.nist.gov/vuln/detail/CVE-2026-45069
security-tracker.debian.org/tracker/CVE-2026-45069
github.com/symfony/symfony
ubuntu.com/security/CVE-2026-45069
cve.org/CVERecord?id=CVE-2026-45069
symfony.com/blog/cve-2026-45069-oidctokenhandler-accepts-jwts-missing-aud-iss-exp-claims
Left out here: 10 versions. The JSON record has them.