Skip to content

CVE-2026-102894 GPUStack: SAML callback trusts an unverified SAMLResponse, allowing authentication bypass and account takeover

CriticalCVSS 9.1 EPSS 0.26%
Published
Updated
Exploit status
No public exploit known

Description

GPUStack is an open-source GPU cluster manager for AI model serving and GPU instance provisioning. From 0.7.1 until 2.2.2, the /auth/saml/callback endpoint decoded SAML XML, used its NameID and attributes to resolve or provision a user, and minted a gpustack_session JWT without calling OneLogin_Saml2_Auth.process_response to verify the signature, issuer, audience, destination, or time conditions. Any network client could submit an identity for an existing user, including an administrator, or provision a new non-administrator account, even when SAML was not configured. Response and Assertion identifiers were not consumed, so captured signed responses could also be replayed. This issue is fixed in version 2.2.2.

Affected products

ProductAffected versionsFixed in
pypi gpustack(PyPI) >= 0.7.1, < 2.2.2 2.2.2
pypi gpustack(PyPI) = 0.7.1 No fix listed
pypi gpustack(PyPI) = 2.0.0 No fix listed
pypi gpustack(PyPI) = 2.0.0rc1 No fix listed
pypi gpustack(PyPI) = 2.0.0rc2 No fix listed
pypi gpustack(PyPI) = 2.0.1 No fix listed
pypi gpustack(PyPI) = 2.0.1rc2 No fix listed
pypi gpustack(PyPI) = 2.0.2 No fix listed
pypi gpustack(PyPI) = 2.0.2rc1 No fix listed
pypi gpustack(PyPI) = 2.0.2rc2 No fix listed
pypi gpustack(PyPI) = 2.0.3 No fix listed
pypi gpustack(PyPI) = 2.0.3rc1 No fix listed
pypi gpustack(PyPI) = 2.1.0 No fix listed
pypi gpustack(PyPI) = 2.1.0rc1 No fix listed
pypi gpustack(PyPI) = 2.1.0rc2 No fix listed
pypi gpustack(PyPI) = 2.1.1 No fix listed
pypi gpustack(PyPI) = 2.1.1rc1 No fix listed
pypi gpustack(PyPI) = 2.1.2 No fix listed
pypi gpustack(PyPI) = 2.1.2rc2 No fix listed
pypi gpustack(PyPI) = 2.2.0 No fix listed
pypi gpustack(PyPI) = 2.2.0rc1 No fix listed
pypi gpustack(PyPI) = 2.2.0rc2 No fix listed
pypi gpustack(PyPI) = 2.2.0rc3 No fix listed
pypi gpustack(PyPI) = 2.2.0rc4 No fix listed
pypi gpustack(PyPI) = 2.2.1 No fix listed
Show 3 more
pypi gpustack(PyPI) = 2.2.1rc1 No fix listed
pypi gpustack(PyPI) = 2.2.2rc1 No fix listed
gpustack = >= 0.7.1, < 2.2.2 No fix listed

References