漏洞概要
WakaTime平台的机构创建逻辑存在竞态条件漏洞,攻击者可利用此漏洞创建多个同名组织,违反前端UI强制实施的唯一性约束。这可能导致混淆、业务逻辑错误或潜在滥用,具体取决于平台如何处理组织身份。
复现步骤
- 登录账户并导航至组织创建页面
- 选择组织名称(如ctrl2),在Burp中拦截创建请求
- 成功创建组织后,尝试用相同名称再次创建,此时会收到错误提示"You already have an organization with this name"
- 在Burp Repeater中修改"name"参数,复制10个以上相同请求
- 使用单包攻击(single-packet attack)并发发送这些请求
- 请求完成后,可观察到成功创建了大量同名组织
技术细节
- HTTP请求示例:
|
|
- 漏洞原理: 前端虽显示错误提示,但后端未实现原子性校验,导致并发请求可绕过唯一性检查。
影响范围
- 数据完整性破坏:违反平台数据假设和约束条件
- 授权与业务逻辑混乱:可能影响权限范围、审计或计费系统
- 潜在利用场景:
- 混淆协作者或支持团队
- 绕过组织数量限制
- 导致日志记录、报告或计费机制异常
修复建议
- 在服务端实现适当的锁机制或事务检查,在数据库层面强制实施唯一性约束
- 确保后端验证具有竞态安全性,不依赖前端或预检查逻辑
- 考虑在数据库模式中对组织名称使用UNIQUE约束
争议点
平台方认为这是设计行为(允许不同用户创建同名组织),而非安全漏洞。但研究者指出:
- 该问题符合CWE-362(竞态条件)和CWE-693(保护机制失效)定义
- 可能影响依赖组织名称唯一性的子系统(如计费系统)
- 其他平台(GitHub/GitLab)将类似问题归类为安全漏洞