CVE-2026-34840OneUptime是一个开源监控和可观测性平台。在10.0.42版本之前,其SAML SSO实现存在严重的安全漏洞。由于系统的签名验证逻辑与身份提取逻辑存在解耦,`isSignatureValid()`仅验证XML DOM中的第一个`<Signature>`元素,而`getEmail()`总是直接读取第一个断言`assertion[0]`。攻击者可以构造恶意的SAML响应,在合法的签名断言前插入一个包含任意身份的未签名断言。由于系统只校验签名有效性而不校验签名与断言的绑定关系,导致攻击者可以利用未签名的断言实现身份认证绕过,获取系统的访问权限。
该漏洞属于典型的SAML断言混淆或签名剥离漏洞。在受影响的OneUptime版本中,SAML响应处理流程存在逻辑缺陷。系统使用`xml-crypto`库进行签名验证,该库在验证时仅定位并验证遇到的第一个`<Signature>`元素。然而,用于提取用户身份的`getEmail()`函数依赖`xml2js`解析结果,默认读取数组中的第一个`<Assertion>`元素(即`assertion[0]`)。攻击者利用这一差异,构造包含两个Assertion的SAML响应:第一个Assertion包含攻击者想要伪造的身份(如管理员账户),且不带签名;第二个Assertion是合法的、经过签名的Assertion。服务端接收后,验证模块检查第二个Assertion的签名并通过,但身份提取模块却读取了第一个未签名Assertion中的身份信息。这种逻辑分离导致签名验证未能保护实际用于认证的身份数据,从而允许攻击者以任意用户身份登录。