{"id":"GHSA-29fc-p6c4-24cg","summary":"Symfony's OidcTokenHandler Accepts JWTs Missing aud/iss/exp Claims","details":"### Description\n\n`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`.\n\n`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.\n\n### Resolution\n\nThe `OidcTokenHandler` now calls the `ClaimCheckerManager` with the list of mandatory claims so that tokens missing `aud`, `iss`, or `exp` are rejected.\n\nThe patch for this issue is available [here](https://github.com/symfony/symfony/commit/6b717aaac21b7e96798448d14c4355ea87690b3d) for branch 6.4.\n\n### Credits\n\nSymfony would like to thank Claude Mythos Preview (via Project Glasswing) for reporting the issue and providing the fix.","aliases":["CVE-2026-45069"],"modified":"2026-09-10T03:50:45.346316409Z","published":"2026-05-27T21:03:36Z","database_specific":{"severity":"MODERATE","github_reviewed":true,"github_reviewed_at":"2026-05-27T21:03:36Z","nvd_published_at":null,"cwe_ids":["CWE-1287","CWE-345"]},"references":[{"type":"WEB","url":"https://github.com/symfony/symfony/security/advisories/GHSA-29fc-p6c4-24cg"},{"type":"WEB","url":"https://github.com/symfony/symfony/commit/6b717aaac21b7e96798448d14c4355ea87690b3d"},{"type":"WEB","url":"https://github.com/FriendsOfPHP/security-advisories/blob/master/symfony/security-http/CVE-2026-45069.yaml"},{"type":"WEB","url":"https://github.com/FriendsOfPHP/security-advisories/blob/master/symfony/symfony/CVE-2026-45069.yaml"},{"type":"PACKAGE","url":"https://github.com/symfony/symfony"},{"type":"WEB","url":"https://symfony.com/cve-2026-45069"}],"affected":[{"package":{"name":"symfony/security-http","ecosystem":"Packagist","purl":"pkg:composer/symfony/security-http"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"6.3.0"},{"fixed":"6.4.40"}]}],"versions":["v6.3.0","v6.3.1","v6.3.12","v6.3.2","v6.3.4","v6.3.5","v6.3.6","v6.3.8","v6.4.0","v6.4.0-BETA1","v6.4.0-BETA3","v6.4.0-RC1","v6.4.0-RC2","v6.4.11","v6.4.12","v6.4.13","v6.4.14","v6.4.15","v6.4.18","v6.4.19","v6.4.21","v6.4.22","v6.4.23","v6.4.24","v6.4.25","v6.4.26","v6.4.3","v6.4.30","v6.4.31","v6.4.34","v6.4.39","v6.4.4","v6.4.7","v6.4.8","v6.4.9"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-29fc-p6c4-24cg/GHSA-29fc-p6c4-24cg.json"}},{"package":{"name":"symfony/security-http","ecosystem":"Packagist","purl":"pkg:composer/symfony/security-http"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"7.4.0"},{"fixed":"7.4.12"}]}],"versions":["v7.4.0","v7.4.1","v7.4.11","v7.4.3","v7.4.4","v7.4.6","v7.4.8","v7.4.9"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-29fc-p6c4-24cg/GHSA-29fc-p6c4-24cg.json"}},{"package":{"name":"symfony/security-http","ecosystem":"Packagist","purl":"pkg:composer/symfony/security-http"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"8.0.0"},{"fixed":"8.0.12"}]}],"versions":["v8.0.0","v8.0.1","v8.0.11","v8.0.3","v8.0.4","v8.0.6","v8.0.8","v8.0.9"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-29fc-p6c4-24cg/GHSA-29fc-p6c4-24cg.json"}},{"package":{"name":"symfony/symfony","ecosystem":"Packagist","purl":"pkg:composer/symfony/symfony"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"6.3.0"},{"fixed":"6.4.40"}]}],"versions":["v6.3.0","v6.3.1","v6.3.10","v6.3.11","v6.3.12","v6.3.2","v6.3.3","v6.3.4","v6.3.5","v6.3.6","v6.3.7","v6.3.8","v6.3.9","v6.4.0","v6.4.0-BETA1","v6.4.0-BETA2","v6.4.0-BETA3","v6.4.0-RC1","v6.4.0-RC2","v6.4.1","v6.4.10","v6.4.11","v6.4.12","v6.4.13","v6.4.14","v6.4.15","v6.4.16","v6.4.17","v6.4.18","v6.4.19","v6.4.2","v6.4.20","v6.4.21","v6.4.22","v6.4.23","v6.4.24","v6.4.25","v6.4.26","v6.4.27","v6.4.28","v6.4.29","v6.4.3","v6.4.30","v6.4.31","v6.4.32","v6.4.33","v6.4.34","v6.4.35","v6.4.36","v6.4.37","v6.4.38","v6.4.39","v6.4.4","v6.4.5","v6.4.6","v6.4.7","v6.4.8","v6.4.9"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-29fc-p6c4-24cg/GHSA-29fc-p6c4-24cg.json"}},{"package":{"name":"symfony/symfony","ecosystem":"Packagist","purl":"pkg:composer/symfony/symfony"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"7.4.0"},{"fixed":"7.4.12"}]}],"versions":["v7.4.0","v7.4.1","v7.4.10","v7.4.11","v7.4.2","v7.4.3","v7.4.4","v7.4.5","v7.4.6","v7.4.7","v7.4.8","v7.4.9"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-29fc-p6c4-24cg/GHSA-29fc-p6c4-24cg.json"}},{"package":{"name":"symfony/symfony","ecosystem":"Packagist","purl":"pkg:composer/symfony/symfony"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"8.0.0"},{"fixed":"8.0.12"}]}],"versions":["v8.0.0","v8.0.1","v8.0.10","v8.0.11","v8.0.2","v8.0.3","v8.0.4","v8.0.5","v8.0.6","v8.0.7","v8.0.8","v8.0.9"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-29fc-p6c4-24cg/GHSA-29fc-p6c4-24cg.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V4","score":"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"}]}