通过SCIM配置实现HackerOne账户劫持
漏洞概述
经过多次尝试和理解,我能够通过SCIM(跨域身份管理系统)配置接管现有用户账户。要利用此漏洞,需要满足以下条件:
- 已验证的域名
- 正常工作的SSO(单点登录)配置
初始测试过程
最初测试时采用以下步骤:
- 将组织用户导入Okta
- 收到错误提示:现有用户的邮箱域名与已验证域名不匹配
- 更改邮箱地址
- 结果:在组织用户页面创建了新用户
成功利用方法
经过多次尝试后,发现以下操作序列可实现账户接管:
- 在Okta中创建攻击者控制的邮箱用户(如attacker@verified.com)
- 将组织用户导入Okta
- 将受害者账户分配给步骤1创建的用户
- 将邮箱参数字段更改为attacker@verified.com
- 更改密码
- 成功接管!
技术细节分析
Okta中有两个重要字段:用户名和邮箱。
关键发现:
- 如果攻击者使用已验证域名verified.com将受害者victim@ato.com添加到Okta,会收到域名不匹配错误
- 如果将用户名和邮箱都改为victim@verified.com,会在H1组织中创建新用户
- 如果用户名保持victim@ato.com而邮箱改为victim@verified.com,受害者的邮箱将被更改,且不会向受害者发送通知(问题2)
登录机制绕过
攻击者无法通过SSO提供商(Okta)登录,因为用户名victim@ato.com已被导入并使用。解决方案是设置密码重置,这同样不会向用户发送通知(问题3),新邮箱由攻击者控制。
环境设置要求
在操作前需要以下设置:
- 从指定位置设置沙盒程序,不删除演示成员
- 联系HackerOne支持为沙盒程序激活SSO和SCIM配置
- 在Okta中设置SSO
- 在Okta中设置SCIM
- 添加用户
复现步骤
- 进入Okta目录,添加可访问邮箱的用户
- 进入为Hackerone SCIM配置的Okta应用,导入用户
- 在导入用户中分配用户demo-member@hackerone.com
- 在Assignments标签页中编辑,更改邮箱字段为控制的已验证域名邮箱
- 保存并自动同步
- 重置用户密码即可进入
影响评估
此漏洞的严重性在于:
- 所有新组织(包括沙盒)默认存在两个用户:
- Demo Triager demo-triager@hackerone.com
- Demo Member demo-member@hackerone.com
- 这些用户始终存在,除非被移除
- 攻击者只需导入这些默认成员,保持用户名不变,更改邮箱,重置密码即可进入
漏洞修复
修复后,通过Okta使用SCIM配置用户时,现在要求用户名和邮箱都必须属于HackerOne内控制的已验证域名。即使导入用户并将其分配给Okta中控制的现有用户,也总是会创建新用户,而不是用新邮箱地址覆盖该用户。
CVSS评分说明
最终CVSS 4.0评分为7.0(高风险),具体评分为:CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:A/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
后续评分(SC、SI、SA)均为"无",因为该漏洞的影响仅限于特定的目标用户账户:
- 后续机密性(SC:N):账户接管不会导致超出受损账户的系统数据暴露
- 后续完整性(SI:N):攻击不会级联改变其他连接系统的数据完整性
- 后续可用性(SA:N):不会对其他服务或系统造成下游中断
机密性影响评为高(VC:H),因为攻击者可以访问受损账户中的所有信息。该问题被重新分配给api.hackerone.com资产,因为漏洞 specifically 影响处理SCIM配置的API基础设施。