
开源的 ruby - saml 库中,近日披露了两个极为严重的安全漏洞。这两个漏洞等级颇高,可能会让恶意攻击者有机可乘,绕过安全断言标记语言(SAML)的身份验证保护机制。
SAML 是一种基于 XML 的标记语言,同时也是一项开放标准,主要用于在不同各方之间交换身份验证以及授权数据。它支持单点登录(SSO)等实用功能,这使得用户能够凭借一组凭据,便捷地访问多个站点、服务以及应用程序。
这两个漏洞被分别标记为 CVE - 2025 - 25291 和 CVE - 2025 - 25292,在通用漏洞评分系统(CVSS)中,得分高达 8.8 分(满分 10 分)。受影响的库版本如下:
< 1.12.4
>= 1.13.0、< 1.18.0
这两个漏洞产生的根源,是 REXML 和 Nokogiri 这两种工具在解析 XML 时,方式存在差异。这种差异会导致两个解析器针对相同的 XML 输入,生成截然不同的文档结构。
而这种解析器的差异,给攻击者创造了可乘之机,他们能够借此执行签名包装攻击,最终导致身份验证被绕过。目前,ruby - saml 版本 1.12.4 和 1.18.0 已经对这些漏洞进行了修复。
微软旗下的 GitHub 在 2024 年 11 月发现并报告了这些漏洞。GitHub 方面表示,恶意攻击者极有可能利用这些漏洞,实施账户接管攻击。
GitHub 安全实验室研究员 Peter Stöckli 在一篇博文中指出:"攻击者只要拥有一个有效的签名,就能够利用目标组织用于验证 SAML 响应或断言的密钥,构建出 SAML 断言,进而得以以任意用户身份登录。"

他们还特别强调,该问题的关键在于哈希验证和签名验证之间出现了 "脱节",正是这种脱节,为攻击者利用解析器差异实施攻击,打开了方便之门。
此外,在版本 1.12.4 和 1.18.0 中,在处理压缩的 SAML 响应时,还意外引入了一个远程拒绝服务(DoS)缺陷(CVE - 2025 - 25293,CVSS 评分:7.7)。所以,建议用户尽快更新到最新版本,以此防范潜在的安全威胁。
值得一提的是,此次发现距 GitLab 和 ruby - saml 着手解决另一个同样可能导致身份验证绕过的关键漏洞(CVE - 2024 - 45409,CVSS 评分:10.0),仅仅过去了将近六个月的时间。
GitLab 发布更新
极狐 GitLab 已经发布了更新,用于修复社区版(CE)和企业版(EE)中的 CVE -2025-25291 和 CVE-2025-25292 漏洞,对应的版本为 17.9.2、17.8.5 和 17.7.7 。
GitLab 方面表示:"在使用 SAML 身份验证的 GitLab CE/EE 实例中,在某些特定情况下,若攻击者能够获取来自身份提供商(IdP)的有效签名 SAML 文档,就有可能以环境中 SAML IdP 的其他有效用户身份进行验证。"
不过,GitLab 也指出,这种攻击要想成功,前提是攻击者已经攻破了一个有效的用户账户,以此来绕过身份验证。