首页
社区
课程
招聘
GitHub SAML Vulnerability的披露研究(CVE-2025-23369)
发表于: 2025-2-13 11:19 1269

GitHub SAML Vulnerability的披露研究(CVE-2025-23369)

2025-2-13 11:19
1269

在2025年2月6日的一篇博文中,repz ret公布了一个关于GitHub SAML认证漏洞的发现,即CVE-2025-23369。该漏洞允许SAML认证用户绕过对其他账户的认证。这一研究突显了SAML协议的复杂性,以及在应用此协议时可能出现的安全隐患。

漏洞背景和发现动机

在此之前,GitHub曾发布多个CVE(Common Vulnerabilities and Exposures)来修复影响其SAML认证实现的问题,例如CVE-2024-4985和CVE-2024-9485。面对曾经发生的安全事件,很多安全研究人员和开发者对SAML的实现进行了持续的关注。repz ret选择深入挖掘GitHub的SAML实现,发现了CVE-2025-23369漏洞。

这个漏洞使得已通过SAML认证的用户可以毫无障碍地访问其他用户账户,造成了潜在的安全威胁。在SAML协议的基础上,开发者需要确保在各种情况下对用户身份信息进行妥善的验证和校验。

SAML协议的工作原理

SAML(安全声明标记语言)原理与Oauth2/OpenID相似,用户首先在身份提供者(IdP)上进行认证,IdP返回一个包含用户属性的响应对象,而非传统的访问令牌。SAML响应中包括了一系列字段,例如用户的电子邮件和名称等。

尽管SAML协议被广泛使用,但其复杂性也增加了潜在的漏洞。例如,SAML响应中的签名元素用于确保数据的完整性和真实性,若绕过此机制,可能会引发更严重的安全事件。

下面是一个SAML响应的示例,展示了其在数据传输过程中的结构:

<?xml version="1.0"?>
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="exampleID" Version="2.0" IssueInstant="2024-12-30T21:08:55Z" Destination="f96K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4W2G2N6i4u0S2M7s2m8Q4x3X3g2U0L8$3#2Q4x3V1k6S2j5%4y4Q4x3U0k6S2L8i4m8Q4x3@1u0I4N6h3!0@1i4K6y4n7 InResponseTo="requestID">
  <saml:Issuer>eb5K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3W2V1M7q4)9J5k6h3g2^5j5h3#2H3L8r3g2Q4x3X3g2U0L8$3#2Q4x3V1k6E0k6i4c8S2k6r3q4@1j5g2)9J5y4X3q4E0M7q4)9K6b7X3I4@1i4K6y4n7i4K6u0r3M7$3q4E0L8q4)9K6b7f1W2K6M7%4g2W2M7W2)9J5y4X3q4E0M7q4)9K6b7X3N6@1i4K6y4n7
  <saml:Assertion xmlns:xsi="053K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4M7K6i4K6u0W2L8%4u0Y4i4K6u0r3x3U0l9H3x3g2)9J5c8W2S2y4e0q4y4U0K9r3g2E0j5g2)9J5k6r3W2F1M7%4c8S2L8X3y4W2i4K6t1$3j5h3#2H3i4K6y4n7M7i4g2G2N6q4)9K6b7R3`.`. xmlns:xs="49aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4M7K6i4K6u0W2L8%4u0Y4i4K6u0r3x3U0l9H3x3g2)9J5c8W2S2y4e0q4y4U0K9r3g2E0j5g2)9J5y4X3q4E0M7q4)9K6b7Y4q4#2L8%4c8Q4x3@1t1`. ID="assertionID" Version="2.0" IssueInstant="2024-12-30T21:08:55Z">
    ...
  </saml:Assertion>
</samlp:Response>

在这一结构中,Response元素中包含了多个元素以便进行身份验证。

GitHub的SAML验证实现

对于接收到的SAML响应,GitHub在验证签名和数据完整性时,会执行多个步骤,例如验证响应是否包含签名、检查证书的有效性以及计算和验证摘要值等。如果任何一种检查未通过,认证过程将被中止。

在GitHub的实现中,快速检查函数(如has_root_sig_and_matching_ref?)是对根元素的效验,若根元素签名正常,则跳过对子元素的检查。然而这就成为了攻击者绕过验证的潜在切入点,若攻击者可以操控SAML响应并使得XPath查询返回错误结果,验证将会失败。

漏洞类型分析

repz ret展示了通过构造特定格式的SAML响应而绕过验证的方法。例如,通过XML实体的使用,可以导致XPath查询错误返回一个无效的断言,该结合使得攻击者得以绕过身份验证步骤。以下是一个示例代码片段,显示了如何利用XML实体。

<?xml version="1.0"?>
<!DOCTYPE example [ <!ENTITY idViaEntity "exampleID"> ]>
<samlp:Response ID="&idViaEntity;">
  <saml:Assertion ID="exampleAssertionID">cfdK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3W2V1M7q4)9J5k6h3g2^5j5h3#2H3L8r3g2Q4x3X3g2U0L8$3#2Q4x3V1k6E0k6i4c8S2k6r3q4@1j5g2)9J5y4X3q4E0M7q4)9K6b7X3I4@1i4K6y4n7i4K6u0r3M7$3q4E0L8q4)9K6b7f1q4K6M7$3g2J5N6r3W2G2L8W2)9J5y4X3q4E0M7q4)9K6b7X3N6@1i4K6y4n7
</samlp:Response>

在该代码中,XML实体可以导致不必要的绕过,及意外的逻辑构建,从而使得原本严密的SAML验证失效。

典型攻击场景

利用如上的漏洞,攻击者可以假装成为已认证用户,访问敏感数据或执行未授权操作。此外,该漏洞还可能为更复杂的攻击(如内部横向移动)提供便利。因此,这一安全漏洞表明在系统设计和实现中,不应仅依靠表面验证或简单的方法,而应增强验证环节的有效性。

修复建议

面对CVE-2025-23369等安全漏洞的威胁,开发者应采取多重措施进行防范。首先,应在SAML实现中加强验证环节,包括对所有可能的输入进行严格的校验。其次,组织应对SAML响应的结构进行定期审查,以确保不留下漏洞的后门。最后,将防护措施纳入到持续的集成和开发流程中,确保潜在的漏洞能够及时被发现和修复。

总结

CVE-2025-23369的发现提醒我们,随着现代应用架构的复杂化,身份验证与授权系统的安全性不应被忽视。开发者应进一步加强对第三方库和协议实现的审查,尤其是SAML等复杂框架,以确保用户数据信息的安全。此事件也凸显出代码审查、动态测试与模糊测试在发现潜在安全漏洞中的重要性,只有通过多角度的安全检查,才能构建一个更为强大的安全防线。

GitHub Security Lab


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回