CVE-2024-4985GitHub Enterprise Server SAML encrypted-assertion bypass
What broke
GitHub Enterprise Server's optional encrypted-SAML assertions feature did not bind the signature to the assertion it later consumed. An attacker who could reach the ACS forged a response and provisioned a site administrator, with no prior account. Reported through the GitHub Bug Bounty. Fixed in GHES 3.9.15, 3.10.12, 3.11.10, and 3.12.4 (May 2024). CVE-2024-9487 is the incomplete-fix follow-on. CVE-2024-6800 is a related wrapping path on the same product.
Why it matters
Encrypted assertions are sold as the "more secure" SAML mode. Here they were the bypass. GHES is often the crown-jewel service provider in an enterprise: source, Actions secrets, and deploy keys. An SSO forge there is a supply-chain incident, not a login ticket. The 2025 GHES canonicalization bug (CVE-2025-23369) is the same lesson a year later.
What to do
- Confirm every GHES appliance is past the May 2024 builds, then take the 9487 and 6800 updates as well.
- If encrypted assertions were on while unpatched, review newly provisioned site admins and PATs.
- Prefer OIDC to GitHub where you can. XML encryption does not save a broken verifier.
After you patch
A SAML bypass means the service provider accepted an assertion it should have rejected, so anyone who exploited it authenticated as a real user and left a normal-looking log line.
- Revoke every session issued by the affected service provider, then rotate its session signing keys. Patching stops new forgeries and does nothing about sessions already minted.
- Audit administrative accounts and group memberships for changes during the exposure window. Signing in as an administrator is the point of this class, and adding a second account is the standard persistence step.
- Rotate the identity provider signing certificate if the flaw involved signature validation, and confirm the service provider pins the expected certificate rather than trusting anything in the assertion.
- Check your own implementation for the same class: exact-match comparison on verification results, rejection of unexpected signature algorithms, and audience and recency checks on every assertion. See SAML 2.0 and SAML vs OIDC.
Sources
- NVD: CVE-2024-4985
- GitHub GHES release notes / bug-bounty advisory, May 2024
Related identity CVEs
- CVE-2025-23369GitHub Enterprise Server SAML bypass via libxml2 canonicalization
- CVE-2024-9487GitHub Enterprise Server SAML encrypted-assertion, incomplete fix
- CVE-2024-45409ruby-saml 2024 auth bypass (ahacker1), still in the blast radius
- CVE-2024-6800GitHub Enterprise Server SAML XML signature wrapping
Related on Start with Identity
- CVEruby-saml 2024 auth bypass (ahacker1), still in the blast radius
The original 2024 ruby-saml authentication bypass (CVSS 10.0). It is outside the last twelve months, but every 2025 ruby-saml CVE is an incomplete-fix descendan
- CVEruby-saml auth bypass, incomplete fix of CVE-2025-25292
The March 2025 ruby-saml patch did not close the parser differential. CVE-2025-54572 is the incomplete-fix follow-on: still a critical SSO impersonation if you
- CVECisco SAML 2.0 mixes authorization domains
Cisco's SAML 2.0 implementation did not keep authorization domains apart. A token or assertion meant for one domain could authorize in another. May 2024. The pr
- BlogFortinet's January SSO bypass hit boxes already patched for December's SAML bug
CVE-2026-24858 is the follow-on FortiCloud SSO SAML bypass. Devices patched for CVE-2025-59718 and 59719 were still exploitable. Actively exploited. CISA guidan
- GlossaryIdentity Federation
A trust relationship between identity providers and service providers that lets users authenticate once at their home IdP and access applications at the other p
- GlossarySSO
Single Sign-On. A user authenticates once and gains access to multiple applications without re-entering credentials. Implemented with SAML or OIDC in modern dep
Technique
This CVE is an instance of Federation trust abuse and SAML forgery. A service provider that accepts a SAML assertion it should have rejected treats a forged identity as authenticated, because the failure sits in signature validation code, not in cryptography.