上周GitLab针对社交媒体版(CE)及企业版(EE)发布安全更新,修补重大层级的安全漏洞CVE-2025-25291、CVE-2025-25292(4.0版CVSS风险评分为8.8),这些漏洞出现于名为ruby-saml的程序库,发现此事的GitHub,也在同一天透露这两项漏洞的细节。

针对这些漏洞的处理过程,最初GitHub是在去年11月通过漏洞悬赏项目获报相关漏洞,然后向ruby-saml维护者通报此事,并进行一连串的尝试修补及反复验证,最终1.18.0修正版ruby-saml于3月12日发布。他们强调,这项漏洞也同时影响omniauth-saml等其他运用ruby-saml的程序库,也必须调整引用新版本的ruby-saml来避免曝险。

而对于漏洞形成的原因,GitHub指出起因是ruby-saml在签章验证其中,采用了两种不同的XML解析器REXML、Nokogiri,一旦攻击者能使用相同的XPath查询,触发上述解析器处理不同的签章组件,就有机会让ruby-saml验证错误的签章,借由特定的解析器差异(Parser Differential)达到绕过身份验证的目的。

GitHub经过4个环节的研究,找到这些身份验证绕过漏洞。首先,他们查看ruby-saml程序代码,发现运用两款不同的XML解析器。

接着,研究人员评估如何造成解析器差异。下一步则是在解析器实际运行过程中,找出真正的解析器差异弱点,最终通过这项弱点产生会造成危害的手法。

而对于漏洞缓解,ruby-saml开发团队也费了一番心思,因为并非移除其中一个解析器来避免解析器差异的情况,若真的这么做,会引发兼容性的问题,该团队决定从更为根本的因素下手:切断验证散列值及验证签章之间的关联,从而促使漏洞无法利用的目的。