Ruby-saml 因 XML 解析器命名空间处理差异导致 SAML 认证绕过漏洞剖析

31 阅读2分钟

Ruby-saml 因命名空间处理(解析器差异)导致 SAML 认证绕过

漏洞编号:CVE-2025-66567

严重程度:严重 (CVSS 9.3)

漏洞详情

受影响的软件包:ruby-saml (RubyGems) 受影响版本:< 1.18.0 已修复版本:1.18.0

漏洞描述

摘要

在 ruby-saml 1.12.4 及更早版本中存在一个身份验证绕过漏洞。此漏洞源于对 CVE-2025-25292 的不完全修复。ReXML 和 Nokogiri 这两个 XML 解析器对同一 XML 输入会生成完全不同的文档结构,这使得攻击者能够执行签名包装(Signature Wrapping)攻击。该漏洞在 1.18.0 版本中已得到修复。

影响

此漏洞允许攻击者执行签名包装攻击,从而绕过身份验证机制。

参考信息

  • GHSA-9v8j-x534-2fx3
  • SAML-Toolkits/ruby-saml 提交记录 e9c1cdb
  • GHSA-754f-8gm6-c4r2

技术细节

漏洞根源:解析器差异

核心问题在于 Ruby 生态中常用的两个 XML 解析库——ReXML 和 Nokogiri——在处理 XML 命名空间时存在行为差异。这种差异导致它们从相同的 XML 输入构建出不同的文档对象模型结构。

攻击者可以精心构造一个 SAML 响应,利用这种解析差异来欺骗 ruby-saml 库的签名验证逻辑。即使 XML 签名本身在密码学上是有效的,但由于解析后的文档结构不同,库可能会错误地验证了一个并非实际由签名保护的 XML 节点,从而绕过了身份验证。

弱点分类

CWE 标识:CWE-347 - 加密签名验证不当 该产品未能验证或错误地验证了数据的加密签名。

CVSS v4.0 评分详情

  • 攻击向量 (AV):网络 (N)
  • 攻击复杂度 (AC):低 (L)
  • 攻击前提 (AT):无 (N)
  • 所需权限 (PR):无 (N)
  • 用户交互 (UI):无 (N)
  • 受影响系统的机密性影响 (VC):高 (H)
  • 受影响系统的完整性影响 (VI):高 (H)
  • 受影响系统的可用性影响 (VA):无 (N)
  • 后续系统的机密性影响 (SC):无 (N)
  • 后续系统的完整性影响 (SI):无 (N)
  • 后续系统的可用性影响 (SA):无 (N)

完整向量字符串:CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

修复与缓解

用户应立即将 ruby-saml 库升级到 1.18.0 或更高版本,以完全修复此漏洞。在此之前,没有已知的完整缓解措施。开发者应审查其应用程序中对 SAML 处理的依赖,并确保所有相关组件都已更新。