SCIM安全测试指南:超越SSO的身份管理漏洞挖掘
2025年5月8日 - 作者:Francesco Lacerenza
引言
近年来,单点登录相关漏洞获得了极大关注,并出现了大量优秀的公开披露。仅举几例:
- 常见OAuth漏洞
- “以任意用户登录:利用解析器差异绕过SAML SSO认证”
- “在OAuth登录流程中利用’dirty dancing’进行账户劫持”
等等——其中蕴含大量宝贵经验。不出所料,使用自定义实现的系统受影响最严重,因为将SSO与平台的用户对象模型集成并非易事。
然而,虽然SSO常常占据中心舞台,但另一个标准往往未被充分测试——SCIM。在本文中,我们将深入探讨其核心方面以及在测试客户实现时经常发现的不安全设计问题。
目录
- SCIM 101
- 漏洞挖掘
- 重点关注领域
- 结论
SCIM 101
SCIM是一个旨在自动化跨系统用户账户配置和取消配置的标准,确保连接部分之间的访问一致性。该标准在以下RFC中定义:RFC7642、RFC7644、RFC7643。
虽然它并非专门设计为IdP到SP的协议,而是用于云环境的通用用户池同步协议,但实际场景大多将其嵌入IdP-SP关系中。
核心组件
简而言之,该标准定义了一组由服务提供商暴露的RESTful API,其他参与者应可调用这些API来更新用户池。
它提供具有以下操作集的REST API来编辑托管对象:
- 创建:POST https://example-SP.com/{v}/{resource}
- 读取:GET https://example-SP.com/{v}/{resource}/{id}
- 替换:PUT https://example-SP.com/{v}/{resource}/{id}
- 删除:DELETE https://example-SP.com/{v}/{resource}/{id}
- 更新:PATCH https://example-SP.com/{v}/{resource}/{id}
- 搜索:GET https://example-SP.com/{v}/{resource}?<SEARCH_PARAMS>
- 批量:POST https://example-SP.com/{v}/Bulk
因此,我们可以将SCIM总结为一组可用于对表示用户身份的JSON编码对象执行CRUD操作的API。
核心功能
如果您想查看SCIM实现中的漏洞,以下是审计期间需要审查的核心功能列表:
- 服务器配置和认证/授权中间件 - SCIM未定义其认证/授权方法,因此始终是自定义的
- SCIM对象到内部对象的映射功能 - 后端如何将SCIM对象转换/链接到内部用户和组对象
- 操作执行逻辑 - 身份相关对象中的更改通常会触发应用程序流程
注意影响
作为直接的IdP到SP通信,大多数 resulting 问题需要一定级别的IdP或SP访问权限。因此,攻击的复杂性可能会降低您的大多数发现。
相反,在多租户平台中,影响可能会飙升,其中SCIM用户可能缺乏常见的租户隔离逻辑。
漏洞挖掘
以下是在审计SCIM实现时应寻找的一些重要漏洞示例。
身份验证绕过
几个月前,我们发布了Casdoor IdP实例中未经身份验证的SCIM操作的安全公告。这是一个支持OAuth、SAML、OIDC等各种认证标准的开源身份解决方案。当然,SCIM也被包括在内,但作为一项服务,意味着Casdoor将允许外部参与者操作其用户池。
Casdoor使用了elimity-com/scim库,该库默认情况下不包含标准配置中的身份验证。因此,使用此库定义和暴露的SCIM服务器保持未认证状态。
利用实例需要匹配配置域的电子邮件。SCIM POST操作可用于创建匹配内部电子邮件域和数据的新用户。
然后,使用新的admin用户admin2:12345678认证到IdP仪表板。
注意:维护者发布了新版本,其中包含修复程序。
SCIM令牌管理
由于SCIM密钥允许对服务提供商进行危险操作,因此应保护它们免受设置后发生的提取。在配置的应用程序上测试或编辑IdP SCIM集成时,如果连接器URL与先前设置的URL不同,应需要输入新的SCIM令牌。
发现一个著名的IdP在接受新的baseURL时,使用旧密钥向/v1/api/scim/Users?startIndex=1&count=1发出SCIM集成测试请求。
不必要的用户重配置回退
由于实时用户访问管理是SCIM的核心,因此也值得寻找导致取消配置的用户重新获得对SP访问权限的回退。
内部属性操作
在将身份同步外包给SCIM时,选择从SCIM对象复制到新内部对象的内容变得至关重要,因为错误可能源于"过度"的属性允许。
验证绕过
此类别包含所有由于SCIM事件引起的更新未应用所需的内部用户管理流程而出现的漏洞。
账户接管
在多租户平台中,SSO-SCIM身份应链接到底层用户对象。虽然它不是RFC的一部分,但需要管理userName和email等用户属性,以最终触发平台的验证和所有权检查流程。
重点关注领域
有趣的SCIM操作语法
根据rfc7644,Path属性定义如下:“path"属性值是包含描述操作目标的属性路径的字符串。对于"add"和"replace"操作,“path"属性是可选的,对于"remove"操作是必需的。
批量操作顺序评估
由于可能支持批量操作,这些实现中可能会出现特定问题:竞争条件和缺少循环引用保护。
JSON互操作性
由于SCIM采用JSON进行数据表示,JSON互操作性攻击可能导致挖掘列表中的大多数问题。
结论
作为SSO的扩展,SCIM有潜力在特定情况下启用关键利用。如果您正在测试SSO,SCIM也应在范围内!
最后,SCIM实现中最有趣的漏洞需要深入了解应用程序的授权和认证机制。真正的价值在于识别SCIM对象与映射的内部用户对象之间的差异,因为这些差异通常会导致有影响的发现。