CVE-2024-45409
NoneCVSS
—
EPSS
10.7%
Published
Sep 10, 2024
CISA due date
—
Cloudanix analysis
A flaw in how some applications check digital signatures on login messages lets attackers pretend to be any user and gain access without knowing passwords.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Privilege Gain
- Component
- Library
- Class
- Authentication Bypass
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The Ruby SAML library fails to properly validate the XML signature on SAML Response and Assertion documents, allowing an attacker who possesses any legitimately signed document from the identity provider to substitute arbitrary content while preserving a valid signature.
Why it matters to the business
Attackers can obtain unauthorized access to any user account in affected applications, leading to account takeover, data exposure, and potential lateral movement within integrated systems; the vulnerability has been public for over two years with a moderate and stable exploit probability.
How an attack unfolds
An attacker first obtains a signed SAML Response or Assertion issued by the trusted IdP, then modifies the NameID, attributes, or other claims to impersonate any user, re-signs the document using the original signature value, and submits the forged response to the service provider, which accepts it due to the missing or incomplete signature verification check.
How to fix it
Upgrade ruby-saml to version 1.17.0 or 1.12.3; for GitLab installations, apply the commit f2789346710c02e9dae2b74802f4b9397538129e or later releases that incorporate the patched library. Validate that signature verification is enabled and strict after the upgrade.
How to confirm the fix worked
Confirm the installed ruby-saml gem version meets or exceeds 1.17.0 or 1.12.3, review application logs for successful SAML authentications after the upgrade, and test by replaying a legitimately signed document with modified claims to ensure rejection.
Typical attack path
- Obtain a valid signed SAML document from the target identity provider through normal authentication or interception
- Parse and alter the SAML Response or Assertion to change the subject identifier and any authorization attributes
- Submit the modified document to the vulnerable service provider endpoint without triggering signature validation failure
- Receive an authenticated session for the impersonated user account
How to detect it
Review web server and application logs for SAML Response submissions that result in authentication success shortly after the vulnerable library was in use; look for repeated or unusual NameID values that do not match expected user provisioning patterns.
What your security team should do
- Immediately upgrade all instances of ruby-saml and dependent applications such as GitLab to the fixed versions listed
- Audit recent authentication logs for any anomalous SAML logins that occurred before remediation
- Enforce strict signature and certificate validation settings in all SAML integrations
- Monitor EPSS score and any new exploit publications given the two-year public disclosure window
The record
The Ruby SAML library is for implementing the client side of a SAML authorization. Ruby-SAML in <= 12.2 and 1.13.0 <= 1.16.0 does not properly verify the signature of the SAML Response. An unauthenticated attacker with access to any signed saml document (by the IdP) can thus forge a SAML Response/Assertion with arbitrary contents. This would allow the attacker to log in as arbitrary user within the vulnerable system. This vulnerability is fixed in 1.17.0 and 1.12.3.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| RubyGems | omniauth-saml | 0 | 1.10.5 |
| RubyGems | omniauth-saml | 0 | 2.1.1 |
| RubyGems | omniauth-saml | 2.0.0 | 2.1.2 |
| RubyGems | omniauth-saml | 2.2.0 | 2.2.1 |
| RubyGems | ruby-saml | 0 | 1.12.3 |
| RubyGems | ruby-saml | 1.13.0 | 1.17.0 |
| Bitnami | gitlab | 0 | 16.11.10 |
| Chainguard | gitlab-rails-ee-17.1 | 0 | 17.1.8-r0 |
| Chainguard | gitlab-rails-ee-17.2 | 0 | 17.2.6-r0 |
| Chainguard | gitlab-rails-ee-17.3 | 0 | 17.3.3-r0 |
| Chainguard | gitlab-rails-ee-assets-17.2 | 0 | 17.2.6-r0 |
| Chainguard | gitlab-rails-ee-assets-17.3 | 0 | 17.3.3-r0 |
| Chainguard | gitlab-rails-ee-assets-fips-17.2 | 0 | 17.2.6-r0 |
| Chainguard | gitlab-rails-ee-assets-fips-17.3 | 0 | 17.3.3-r0 |
| Chainguard | gitlab-rails-ee-doc-17.2 | 0 | 17.2.6-r0 |
| Chainguard | gitlab-rails-ee-doc-17.3 | 0 | 17.3.3-r0 |
| Chainguard | gitlab-rails-ee-doc-fips-17.2 | 0 | 17.2.6-r0 |
| Chainguard | gitlab-rails-ee-doc-fips-17.3 | 0 | 17.3.3-r0 |
| Chainguard | gitlab-rails-ee-fips-17.1 | 0 | 17.1.8-r0 |
| Chainguard | gitlab-rails-ee-fips-17.2 | 0 | 17.2.6-r0 |
| Chainguard | gitlab-rails-ee-fips-17.3 | 0 | 17.3.3-r0 |
| Debian:11 | ruby-saml | 0 | No fix |
| Debian:11 | ruby-saml | 0 | 1.11.0-1+deb11u1 |
| Debian:12 | ruby-saml | 0 | 1.13.0-1+deb12u1 |
| Debian:13 | ruby-saml | 0 | No fix |
| Ubuntu:20.04:LTS | ruby-saml | 0 | No fix |
| Ubuntu:20.04:LTS | ruby-saml | 0 | 1.11.0-1ubuntu0.1 |
| Ubuntu:22.04:LTS | ruby-saml | 0 | No fix |
| Ubuntu:22.04:LTS | ruby-saml | 0 | 1.13.0-1ubuntu0.1 |
| Ubuntu:24.04:LTS | ruby-saml | 0 | No fix |
| Ubuntu:24.04:LTS | ruby-saml | 0 | 1.15.0-1ubuntu0.24.04.1 |
| Ubuntu:24.10 | ruby-saml | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | ruby-saml | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | ruby-saml | 0 | 1.1.2-1ubuntu1+esm1 |
| Ubuntu:Pro:18.04:LTS | ruby-saml | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | ruby-saml | 0 | 1.7.2-1ubuntu0.1~esm1 |
| gem | omniauth-saml | 2.0.0 | 2.1.2 |
| gem | omniauth-saml | 2.2.0 | 2.2.1 |
| gem | ruby-saml | 1.13.0 | 1.17.0 |
Related vulnerabilities
- CVE-2025-25291 Ruby SAML allows a SAML authentication bypass due to DOCTYPE handling (parser… Also affects omniauth-saml
- CVE-2025-25292 Ruby SAML allows a SAML authentication bypass due to namespace handling (parser… Also affects omniauth-saml
- CVE-2025-66568 ruby-saml Libxml2 Canonicalization errors can bypass Digest/Signature validation Also affects ruby-saml
- CVE-2025-66567 ruby-saml has a SAML authentication bypass due to namespace handling (parser differential) Also affects ruby-saml
- GHSA-x4h9-gwv3-r4m4 Ruby-saml allows a Libxml2 Canonicalization error to bypass Digest/Signature validation Also affects ruby-saml
- GHSA-9v8j-x534-2fx3 Ruby-saml has a SAML authentication bypass due to namespace handling (parser differential) Also affects ruby-saml
- CVE-2026-1751 A vulnerability has been discovered in GitLab CE/EE affecting all versions starting with… Also affects gitlab
- CVE-2025-3950 Exposure of Private Personal Information to an Unauthorized Actor in GitLab Also affects gitlab