simplesamlphp/xml-security

CVE-2026-32600

CVE-2026-32600 is a high-severity security vulnerability in simplesamlphp/xml-security (composer), affecting versions >= 2.0.0, < 2.3.1. It is fixed in 2.3.1, 1.13.9.

Key facts
CVSS score
8.2
High
Attack vector
Network
Issuing authority
GitHub Advisory Database
Affected package
simplesamlphp/xml-security
Fixed in
2.3.1, 1.13.9
Disclosed
2026

Summary

Summary XML nodes encrypted with either aes-128-gcm, aes-192-gcm, or aes-256-gcm lack validation of the authentication tag length. An attacker can use this to brute-force an authentication tag, recover the GHASH key, and decrypt the encrypted nodes. It also allows to forge arbitrary ciphertexts without knowing the encryption key. Details When decrypting with either aes-128-gcm, aes-192-gcm, or aes-256-gcm here, the $authTag is set from a substr(), but never has its length validated (it should be validated with something like strlen($authTag) == self::AUTHTAGLENGTH). For that reason, a shorter than expected data blob will allow for the $authTag to have as short a tag as only one byte (see PHP's documentation%20has%20been%20called.%20Otherwise%20the%20decryption%20may%20succeed%20if%20the%20given%20tag%20only%20matches%20the%20start%20of%20the%20proper%20tag.)). See this example: With a legit ciphertext in hand, this is enough to recover the GHASH key. With that key, any authenticated tags can be computed offline which allows for decryption of the ciphertext and forgery of arbitrary ciphertexts. PoC Setup a server expecting XML with an encrypted assertion Run this php script poc.php with php -S 127.0.0.1:8888 (taken from this saml test case) The script expects this private key: sp-private-key.pem. Create an XML document with an encrypted assertion (encrypted with aes-256-gcm) Here is the SAMLResponse used in the video below: samlresponse.txt Note: The steps from 3 to 6 are implemented in this exploit script: noncereusewithfmtvaloracle.py. You can run the script with sage -python noncereusewithfmtvaloracle.py -s 'url-encodedandbase64-encodedsamlresponse' Take the content of the <xenc:CipherValue> node and apply the following modifications Base64-decode the content Take the first 12 bytes and save them as the nonce Take the last 16 bytes and save them as the tag Now brute-force the tag of an empty ciphertext Loop through all 256 possible byte values (let's call that bytetagattempt) Concatenate together the nonce and the bytetagattempt Base64-encode the result Replace the content of the <xenc:CipherValue> node with this result On http errors 500, we learn that the tag is valid Do the same for the next byte of the tag until all 16 bytes have been brute-forced With this new tag and the empty ciphertext, compute the GHASH key (the way to do this has been described in this blog post) Use this GHASH key to compute authentication tags offline for arbitrary ciphertexts Decryption is done by observing XML parsing errors that occur after modifying the ciphertext, those can be seen as http errors 500 https://private-user-images.githubusercontent.com/20672053/531768743-2f6e4a7e-4384-4350-b423-7ddd77aa9152.webm?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzMzMTQ3MjEsIm5iZiI6MTc3MzMxNDQyMSwicGF0aCI6Ii8yMDY3MjA1My81MzE3Njg3NDMtMmY2ZTRhN2UtNDM4NC00MzUwLWI0MjMtN2RkZDc3YWE5MTUyLndlYm0WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMzEyJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDMxMlQxMTIwMjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zNDRhZThlYTY5OWNmNGZmMmNmOGJhYTNkNzAwMjNiMTVhMDMxOTIzMGRkN2Y3OGU3NTI3NmFkMWE2OTgwMDFhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.X9UVe9qpwX1YQYo34WmUI84KA0a28FKd4SGy15GEVMU Impact The general impact is: XML nodes encrypted with AES-GCM can be decrypted by observing parsing differences XML nodes encrypted with AES-GCM can be modified to decrypt to an arbitrary value The GCM internal GHASH key can be recovered In cases where the encryption key is embedded in the XML and is encrypted with the Service Provider's public key (like often done with SAML), the last two items don't have a big impact. This is because: With the Service Provider's public key, an arbitrary ciphertext can be created with a known symmetric key The symmetric keys are generated on the fly every time the IdP creates a new SAMLResponse In any case, secrets that are embedded in the XML, whether coming from an IdP, or from another scheme, can be decrypted. Important: If static symmetric keys are used, as the GHASH key could have leaked, you must rotate those keys. References For additional information on the issue, you can refer to this blog post about the OpenSSL issue and how it can be exploited.

Impact

Severity and exposure

CVE-2026-32600 has a CVSS score of 8.2 (High). The vector is network-reachable, no privileges required, and no user interaction. A CVSS score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether this affects your application depends on whether the vulnerable code is present and reachable in your environment.

A fixed version is available (2.3.1, 1.13.9). Upgrading removes the vulnerable code path.

Affected versions

composer

  • simplesamlphp/xml-security (>= 2.0.0, < 2.3.1)
  • simplesamlphp/xml-security (< 1.13.9)

Security releases

  • simplesamlphp/xml-security → 2.3.1 (composer)
  • simplesamlphp/xml-security → 1.13.9 (composer)
Kodem intelligence

Severity tells you how bad this could be in the worst case. It does not tell you whether you are exposed. Exploitability and impact are functions of runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A vulnerable package can sit in your dependency tree and never run.

Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter instead of chasing every advisory.

Kodem's runtime-powered SCA identifies whether CVE-2026-32600 is reachable in your applications. Explore open-source security for your team.

See if CVE-2026-32600 is reachable in your applications. Get a demo

Already deployed Kodem? See CVE-2026-32600 in your environment

Remediation advice

Upgrade the following packages to resolve this vulnerability:

  • Upgrade simplesamlphp/xml-security to 2.3.1 or later
  • Upgrade simplesamlphp/xml-security to 1.13.9 or later

Kodem Kai can prioritize this vulnerability in your dependency tree and generate a fix recommendation.

Frequently asked questions about CVE-2026-32600

What is CVE-2026-32600?

CVE-2026-32600 is a high-severity security vulnerability in simplesamlphp/xml-security (composer), affecting versions >= 2.0.0, < 2.3.1. It is fixed in 2.3.1, 1.13.9.

How severe is CVE-2026-32600?

CVE-2026-32600 has a CVSS score of 8.2 (High). This score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether it represents real risk in your environment depends on whether the vulnerable code is present and reachable.

Which versions of simplesamlphp/xml-security are affected by CVE-2026-32600?

simplesamlphp/xml-security (composer) versions >= 2.0.0, < 2.3.1 is affected.

Is there a fix for CVE-2026-32600?

Yes. CVE-2026-32600 is fixed in 2.3.1, 1.13.9. Upgrade to this version or later.

Is CVE-2026-32600 exploitable, and should I be worried?

Whether CVE-2026-32600 is exploitable in your environment depends on whether the vulnerable code is present and reachable. A CVSS score is a worst-case rating; it does not account for your specific deployment, configuration, or usage patterns. Kodem, an Intelligent Application Security platform, uses runtime intelligence to show which vulnerabilities actually execute in production, so you can focus on the ones that represent real risk. Get a demo

What actually determines whether CVE-2026-32600 is exploitable, and how bad it is?

Exploitability and impact are not fixed properties of a CVE. They depend on runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A high CVSS score on a dependency that never runs is not the same as real risk. Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter.

How do I fix CVE-2026-32600?
  • Upgrade simplesamlphp/xml-security to 2.3.1 or later
  • Upgrade simplesamlphp/xml-security to 1.13.9 or later

Stop the waste.
Protect your environment with Kodem.