竞态条件漏洞:WakaTime 组织名称重复创建问题分析
摘要
WakaTime 的组织创建逻辑中存在竞态条件漏洞,攻击者可以利用此漏洞创建多个同名组织,违反前端 UI 强制执行的唯一性约束。这可能导致混淆、业务逻辑中断或潜在滥用,具体取决于平台如何处理组织身份。
重现步骤
- 登录账户并导航至组织创建页面。
- 选择一个组织名称(例如 ctrl2),并在 Burp 中拦截创建请求。
- 观察组织成功创建。
- 尝试使用相同名称创建另一个组织,此时会收到错误提示:“您已拥有同名组织”。
- 在 Burp 流量中定位组织创建请求(POST /settings/orgs/new)。
- 将请求发送至 Burp Repeater,修改“name”参数以创建多个同名组织,并复制请求至10个以上相似请求组。
- 并行发送这些请求(单包攻击),使请求同时并发发送。
- 允许请求完成并跟随所有重定向。返回浏览器观察,通过利用此竞态条件,已创建大量同名组织(例如创建超过30个同名组织)。
- 确认收到大量组织创建邮件。
尽管 UI 显示错误“您已拥有同名组织”,但多个同名组织仍被创建。
影响
- 数据完整性违反:重复的组织名称破坏平台的数据假设,违反预期约束。
- 授权和业务逻辑混淆:许多系统依赖唯一组织名称来限定权限、审计或计费。多个条目可能导致错误的访问授权或归属错误。
- 潜在利用:攻击者可滥用此缺陷:
- 混淆协作者或支持团队。
- 绕过组织数量限制。
- 导致日志、报告或计费机制问题。
建议
- 在服务器端实施适当的锁定或事务检查,以在数据库级别强制执行唯一组织名称约束。
- 确保后端验证是竞态安全的,不仅依赖前端或预检查逻辑。
- 考虑在数据库模式中对组织名称使用 UNIQUE 约束。
时间线
- 9天前:ctrl_cipher 提交报告至 WakaTime。
- 9天前:ctrl_cipher 多次评论,强调此竞态条件漏洞的安全影响,并引用相关 CWE(如 CWE-840、CWE-362、CWE-693)。
- 9天前:alanhamlett(WakaTime 员工)将严重性从中等(6.5)更改为无,并关闭报告,状态改为“信息性”,认为这是一个错误而非漏洞。
- 8天前:alanhamlett 解释平台设计允许重复组织名称,以应对不同用户创建同名组织的情况,坚持认为这最多是错误而非漏洞。
- 7天前:报告被重新打开,但最终关闭,状态改为“不适用”,并被披露。报告标题更改为“非漏洞:竞态条件允许创建多个同名组织”。
附件
报告包含多个附件(图片),展示错误消息、请求组、并行攻击结果及组织创建确认邮件。
结论
尽管白帽黑客 ctrl_cipher 坚持认为这是一个安全相关的竞态条件漏洞,WakaTime 团队最终将其归类为业务逻辑错误而非漏洞,并披露了报告。此案例突出了竞态条件在 Web 应用中的潜在风险,以及安全团队与开发团队在漏洞分类上的分歧。