SCIM漏洞挖掘实战指南

news/2025/10/7 17:23:44/文章来源:https://www.cnblogs.com/qife122/p/19128656

SCIM Hunting - Beyond SSO

2025年5月8日 - 发布于 Francesco Lacerenza

引言

近年来,单点登录相关漏洞获得了极大关注,并出现了许多优秀的公开披露。仅举几个例子:

  • 常见OAuth漏洞
  • 通过解析差异绕过SAML SSO认证
  • 在OAuth登录流程中使用"脏舞"进行账户劫持

等等 - 确实存在大量宝贵资源。
毫不奇怪,使用自定义实现的系统受影响最大,因为将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}/
  • 读取:GET https://example-SP.com/{v}/{resource}/
  • 替换:PUT https://example-SP.com/{v}/{resource}/
  • 删除:DELETE https://example-SP.com/{v}/{resource}/
  • 更新:PATCH https://example-SP.com/{v}/{resource}/
  • 搜索: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通信,大多数由此产生的问题需要在IdP或SP中具有一定级别的访问权限。因此,攻击的复杂性可能会降低您的大多数发现。

相反,在多租户平台中,影响可能会急剧上升,其中SCIM用户可能缺少常见的租户隔离逻辑。

漏洞挖掘

以下是在审计SCIM实现时应寻找的一些有价值的漏洞示例。

身份验证绕过

几个月前,我们发布了关于Casdoor IdP实例中未经身份验证的SCIM操作的安全公告。这是一个支持各种身份验证标准的开源身份解决方案,如OAuth、SAML、OIDC等。当然,SCIM也被包含在内,但作为一项服务,意味着Casdoor也允许外部参与者操作其用户池。

Casdoor使用了elimity-com/scim库,该库根据标准默认在其配置中不包含身份验证。因此,使用此库定义和暴露的SCIM服务器保持未经身份验证状态。

利用实例需要与配置域匹配的电子邮件。可使用SCIM POST操作创建匹配内部电子邮件域和数据的新用户。

然后,使用新的管理员用户admin2:12345678验证到IdP仪表板。

注意:维护者发布了一个新版本,其中包含修复程序。

SCIM令牌管理

[*] IdP端问题
由于SCIM密钥允许对服务提供商执行危险操作,因此应在设置后保护它们免遭提取。在配置的应用程序上测试或编辑IdP SCIM集成时,如果连接器URL与先前设置的URL不同,应需要输入新的SCIM令牌。

[*] SP端问题
SCIM令牌创建和读取应仅允许高特权用户。以用于管理它的SP端点为目标,并寻找授权问题,或使用漂亮的XSS或其他漏洞对其进行攻击,以在平台中升级访问级别。

不必要的用户重新配置回退

由于实时用户访问管理是SCIM的核心,因此也值得寻找导致已取消配置的用户返回并具有对SP访问权限的回退。

内部属性操纵

在将身份同步外包给SCIM时,选择将SCIM对象中的哪些内容复制到新的内部对象变得至关重要,因为错误可能源于"过度"的属性允许。

[*] 示例1 - 内部角色权限提升
客户端支持通过SCIM端点配置和更新Okta组和用户。
它将Okta组转换为具有自定义标签的内部角色,以引用"Okta资源"。特别是,函数resource_to_access_map从提供的SCIM组资源构建了未经验证的访问映射。

[*] 示例2 - SCIM到用户映射中的批量分配
其他内部属性操作可能取决于对象映射策略。

验证绕过

此类别包含所有由于SCIM事件引起的更新未应用所需的内部用户管理流程而产生的漏洞。

[*] 示例 - 相同但绕过代码
SCIM电子邮件更改未触发其他电子邮件更改操作所需的典型确认流程。
攻击者可以请求向其电子邮件发送验证码,使用SCIM将电子邮件更改为受害者电子邮件,然后兑换验证码从而验证新的电子邮件地址。

账户接管

在多租户平台中,SSO-SCIM身份应链接到底层用户对象。虽然它不是RFC的一部分,但需要管理用户属性以最终触发平台的验证和所有权检查流程。

[*] 示例 - 相同但不同
客户端允许SCIM操作更改用户的电子邮件并执行账户接管。
每次创建或更新SCIM用户时都会调用set_username函数。

额外关注领域

有趣的SCIM操作语法

根据rfc7644,Path属性定义如下:

当path属性为OPTIONAL时,当它是执行逻辑的一部分时,应仔细管理nil可能性。

批量操作顺序评估

由于可能支持批量操作,这些实现中可能会出现特定问题:

  • 竞争条件 - 排序逻辑可能不包括对每个步骤中触发的额外过程的推理
  • 缺少循环引用保护

JSON互操作性

由于SCIM采用JSON进行数据表示,JSON互操作性攻击可能导致挖掘列表中的大多数问题。

结论

作为SSO的扩展,SCIM有潜力在特定情况下启用关键利用。如果您正在测试SSO,SCIM也应该在范围内!

最后,SCIM实现中大多数有趣的漏洞需要深入了解应用程序的授权和身份验证机制。真正的价值在于识别SCIM对象与映射的内部用户对象之间的差异,因为这些差异通常会导致有影响的发现。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站行业阿里云备案

下载 官网&#xff1a; http://tomcat.apache.org/ 2.安装 默认 3.安装成功

做网站大概多少钱四川企业网站开发

今天在整理JAVA基础知识时发现几大基本数据类型的封装类都有其BYTES值,也就是位数,除了Boolean。特意查了下资料,发现有几大说法,如下&#xff1a; 1.单个的boolean 类型变量在编译的时候是使用的int 类型。 boolean atrue;//这个a在JVM中占4个字节即&#xff1a;32位。 2.bo…

虚拟文件系统

虚拟文件系统 1.向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异 2.要求下层的文件系统必须实现某些规定的函数功能。open/read/write统一使用vnode来存储下层文件系统的目录项 vnode只存在…

博客迁移至CSDN!!!

我的csdn主页:https://blog.csdn.net/2301_80265763

博客迁移到CSDN!!!

我的csdn主页:https://blog.csdn.net/2301_80265763

湖北住房与城乡建设厅网站wordpress前台出现旧版文件夹

信息打点——前端JS框架 文章目录 信息打点——前端JS框架小节概述-思维导图JS安全概述什么是JS渗透测试&#xff1f;前后端差异JS安全问题流行的Js框架如何判定JS开发应用&#xff1f; 测试方法&#xff08;JS文件的获取以及分析方法1、手工搜索分析2、半自动Burp分析插件介绍…

手动实现一个C++绑定Lua脚本的库

手动实现一个C++绑定Lua脚本的库把C++绑定到Lua脚本的方法很多。但是在C++11之前,都没有太好的办法。比如tolua++,这个工具需要手动编写额外的pkg文件,每次需要手动执行命令生成额外的C++文件,使用比较繁琐,所以逐…

代码随想录算法训练营第十天 | leetcode 232 225 20 1047

用栈实现队列 整体思路:使用两个栈一个当作入栈,一个当作出栈,当队列需要出队列的时候,将入栈的元素,倒序放入出栈里面,对出栈进行pop操作即可,若需要获得队头元素,同理,执行出栈peek操作即可,判断队列是否为…

重庆永川网站建设公司广东个人备案网站内容

SQL RDBMS 概念 RDBMS是关系数据库管理系统(Relational Database Management System)的缩写。 RDBMS是SQL的基础&#xff0c;也是所有现代数据库系统(如MS SQL Server、IBMDB2、Oracle、MySQL和MicrosoftAccess)的基础。 关系数据库管理系统(Relational Database Management Sy…

深入解析:黑马k8s(十七)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

怎么做下载类的网站课程平台网站建设报价

Gateway整合Sentinel ​ 前面使用过Sentinel组件对服务提供者、服务消费者进行流控、限流等操作。除此之外&#xff0c;Sentinel还支持对Gateway、Zuul等主流网关进行限流。 ​ 自sentinel1.6.0版开始&#xff0c;Sentinel提供了Gateway的适配模块&#xff0c;能针对路由(rou…

openJDK历史版本

https://jdk.java.net/archive/

2025冲压件厂家权威推荐榜:冲压件/新能源冲压件/光伏冲压件/精密冲压件/异形冲压件/五金冲压件/铝冲压件/汽配冲压件/不锈钢冲压件/家具冲压件厂家公司精密制造与品质保障实力之选

行业背景分析随着制造业向高端化、智能化方向转型升级,冲压件作为基础零部件在汽车制造、电子设备、家电产品等领域的应用日益广泛。2025年,中国冲压件市场规模预计将突破5000亿元,行业竞争格局呈现专业化、精细化发…

做a免费视频在线观看网站茂名网站制作公司

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 目前能下载到的最新版本是 PyCharm 2021.1。 请注意对应 Python 的版本&#xff1a; Python 2: 2.7Python 3: >3.6, <3.11…

图解C++智能指针的循环引用

欢迎大家访问我的个人主页guts的小屋循环引用是学习智能指针过程中的一个小难点,笔者愚钝,明明知道是两个指针互相引用导致了内存泄漏,但看各种文字资料时,脑子里总是一团浆糊,感觉似懂非懂,于是自己绘制了几张图…

国庆收心指南:用AI提示词工程解决节后综合征

作为程序员,我们习惯用技术思维解决工作中的复杂问题。但面对国庆假期后的"不想上班"、"睡眠紊乱"、"注意力涣散",你有没有想过也可以用结构化的方法来应对?今天分享一个实用的AI工具…

做海鱼的网站网站后期维护怎么做

多维时序 | MATLAB实现CNN-BiGRU-Mutilhead-Attention卷积网络结合双向门控循环单元网络融合多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现CNN-BiGRU-Mutilhead-Attention卷积网络结合双向门控循环单元网络融合多头注意力机制多变量时间序列预测预测效果基本介…

CF1895F Fancy Arrays

题目大意: 设一个长度为 \(n\) 的数组是 “Fancy” 的,当且仅当它满足下面条件。\(|a_{i} - a_{i - 1}| \le k\) 存在 \(i\) 满足 \(x \le a_{i} \le x + k - 1\) \(a_{i} \ge 0\)给定 \(n,k,x\),求 "Fancy&qu…

高档手表网站自己弄一个网站要多少钱

拦截器 1 回顾过滤器&#xff1a; Servlet规范中的三大接口&#xff1a;Servlet接口&#xff0c;Filter接口、Listener接口。 过滤器接口&#xff0c;是Servlet2.3版本以来&#xff0c;定义的一种小型的&#xff0c;可插拔的Web组件&#xff0c;可以用来拦截和处理Servlet容…

文件系统的全局结构

物理格式化后 低级格式化,划分扇区,检测坏扇区,并用备用扇区替换坏掉的扇区 逻辑格式化后 磁盘分区(分卷)完成各部分的文件系统初始化 文件系统在外存🀄️的结构 分为用户区和内核区 近期访问过的目录文件会缓存…