竞态条件漏洞分析:WakaTime组织名称重复创建问题
摘要
在WakaTime的组织创建逻辑中存在竞态条件漏洞,攻击者可以利用此漏洞创建多个同名组织,违反UI层面强制实施的唯一性约束。这可能导致混淆、业务逻辑破坏或潜在滥用,具体取决于平台如何处理组织身份。
重现步骤
- 登录账户并导航至组织创建页面
- 选择组织名称(如ctrl2),在Burp中拦截创建请求
- 观察组织成功创建
- 尝试使用相同名称创建另一个组织,此时会收到错误提示"You already have an organization with this name"
通过Burp Suite定位组织创建流量:
|
|
- 将请求发送至Burp Repeater,修改"name"参数
- 创建请求组,复制10个以上相同请求
- 并行发送这些请求(单包攻击),使请求同时并发发送
- 允许请求完成并跟踪所有重定向
- 返回浏览器观察,通过利用此竞态条件创建了大量同名组织(创建了30多个同名组织)
- 确认收到大量组织创建邮件
尽管UI显示错误"You already have an organization with this name",但仍会创建多个同名组织。
影响
- 数据完整性破坏:重复的组织名称破坏了平台的数据假设,违反了预期的约束条件
- 授权和业务逻辑混淆:许多系统依赖唯一的组织名称来限定权限、审计或计费,多个条目可能导致错误的访问授权或归属错误
- 潜在利用:攻击者可滥用此缺陷:
- 混淆协作者或支持团队
- 绕过组织数量限制
- 导致日志记录、报告或计费机制出现问题
建议
- 在服务器端实施适当的锁定或事务检查,在数据库级别强制执行唯一的组织名称约束
- 确保后端验证是竞态安全的,不仅依赖前端或预检查逻辑
- 考虑在数据库模式中对组织名称使用UNIQUE约束
后续讨论
研究人员认为这是一个安全相关的竞态条件逻辑缺陷,具有直接的安全影响:
- 绕过前端和后端强制执行的约束,违反系统的设计假设
- 导致数据完整性问题,可能影响授权逻辑、计费系统、审计跟踪和用户信任
- 如果任何下游系统假设组织名称是唯一的,这可能成为攻击向量
该问题符合以下已知漏洞分类:
- CWE-840:业务逻辑错误
- CWE-362:竞态条件
- CWE-693:保护机制失败
WakaTime团队最终将其归类为"非漏洞",表示平台实际上允许重复的组织名称,这是设计上的选择,以便在两个人创建同名组织时用户可以加入这两个组织。团队认为这最多是一个bug,远非漏洞。
报告最终状态变更为"不适用",并被披露。