引言
近日,Node.js生态中广泛使用的SAML单点登录库Samlify曝出超危漏洞CVE-2025-47949(CVSS v4.0评分9.9),攻击者可通过构造恶意SAML响应绕过身份验证,甚至直接获取管理员权限!这一漏洞已引发全球安全团队高度关注。本文将深度剖析漏洞原理、攻击手法及防御方案,帮助企业及时应对风险。
一、漏洞本质:XML签名包装攻击(XSW)
SAML协议依赖XML数字签名确保身份断言(Assertion)的完整性。签名机制的核心在于<ds:Reference>元素中的URI属性,它指定了签名覆盖的XML元素(如#AssertionID123)。然而,Samlify在解析SAML响应时存在逻辑缺陷:
签名验证与数据绑定分离:即使签名验证通过,Samlify未严格限定仅使用被签名覆盖的Assertion,而是可能错误提取未经验证的恶意Assertion。
多Assertion处理漏洞:若响应中包含多个Assertion(如攻击者注入的未签名Assertion),Samlify可能通过宽松的XPath查询(如//saml:Assertion)选择错误节点,导致身份决策被劫持。
攻击示例:
<samlp:ResponseID="ResponseID1">
<ds:Signature>
<!-- 合法签名仅覆盖AssertionID_Original -->
<ds:ReferenceURI="#AssertionID_Original"/>
</ds:Signature>
<saml:AssertionID="AssertionID_Original">普通用户数据</saml:Assertion>
<saml:AssertionID="AssertionID_Malicious">管理员用户数据(未签名)</saml:Assertion>
</samlp:Response>
攻击者注入恶意Assertion后,Samlify可能误选AssertionID_Malicious作为认证依据。
二、影响范围与利用场景
受影响版本:Samlify 2.10.0之前的所有版本。
攻击成本:低。攻击者只需获取一次合法SAML响应并构造恶意断言,即可绕过认证。
危害后果:
非授权用户登录高权限账户(如管理员)。
企业关键系统(如OA、CRM)遭入侵,数据泄露风险激增。
三、修复方案与纵深防御
1. 紧急升级
立即升级至Samlify 2.10.0+版本。该版本通过以下改进彻底修复漏洞:
严格绑定签名与Assertion:仅允许使用签名中URI明确指定的Assertion。
拒绝多Assertion响应:若响应包含未签名Assertion,直接视为无效。
2. 配置强化
强制Assertion签名:配置SP(服务提供商)仅接受签名后的Assertion,而非仅验证Response签名。
校验Issuer与Audience:确保Assertion的颁发者(Issuer)和受众(Audience)符合预期,防止跨租户攻击。
3. 监控与应急
日志审计:监控SAML响应中的Assertion数量、签名范围异常,以及频繁认证失败事件。
渗透测试:模拟XSW攻击,验证修复有效性。
4. 通用安全实践
HTTPS全链路加密:防止SAML响应在传输中被篡改。
最小权限原则:限制SAML断言授予的权限,降低横向渗透风险
原文始发于微信公众号(云梦安全):紧急预警!Samlify SSO 签名绕过漏洞(CVE-2025-47949)解析与防御指南
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论