竞态条件漏洞分析:WakaTime组织名称重复创建问题

本文详细分析了WakaTime平台存在的竞态条件漏洞,该漏洞允许攻击者创建多个同名组织,破坏了数据完整性约束,可能影响权限控制和业务逻辑。

竞态条件漏洞分析:WakaTime组织名称重复创建问题

摘要

在WakaTime的组织创建逻辑中存在竞态条件漏洞,攻击者可以利用此漏洞创建多个同名组织,违反UI层面强制实施的唯一性约束。这可能导致混淆、业务逻辑破坏或潜在滥用,具体取决于平台如何处理组织身份。

重现步骤

  1. 登录账户并导航至组织创建页面
  2. 选择组织名称(如ctrl2),在Burp中拦截创建请求
  3. 观察组织成功创建
  4. 尝试使用相同名称创建另一个组织,此时会收到错误提示"You already have an organization with this name"

通过Burp Suite定位组织创建流量:

1
2
3
4
5
6
7
8
POST /settings/orgs/new HTTP/2
Host: wakatime.com
Cookie: csrftoken=...(完整cookie信息)
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 85

csrftoken=...&name=ctrl2
  1. 将请求发送至Burp Repeater,修改"name"参数
  2. 创建请求组,复制10个以上相同请求
  3. 并行发送这些请求(单包攻击),使请求同时并发发送
  4. 允许请求完成并跟踪所有重定向
  5. 返回浏览器观察,通过利用此竞态条件创建了大量同名组织(创建了30多个同名组织)
  6. 确认收到大量组织创建邮件

尽管UI显示错误"You already have an organization with this name",但仍会创建多个同名组织。

影响

  • 数据完整性破坏:重复的组织名称破坏了平台的数据假设,违反了预期的约束条件
  • 授权和业务逻辑混淆:许多系统依赖唯一的组织名称来限定权限、审计或计费,多个条目可能导致错误的访问授权或归属错误
  • 潜在利用:攻击者可滥用此缺陷:
    • 混淆协作者或支持团队
    • 绕过组织数量限制
    • 导致日志记录、报告或计费机制出现问题

建议

  • 在服务器端实施适当的锁定或事务检查,在数据库级别强制执行唯一的组织名称约束
  • 确保后端验证是竞态安全的,不仅依赖前端或预检查逻辑
  • 考虑在数据库模式中对组织名称使用UNIQUE约束

后续讨论

研究人员认为这是一个安全相关的竞态条件逻辑缺陷,具有直接的安全影响:

  • 绕过前端和后端强制执行的约束,违反系统的设计假设
  • 导致数据完整性问题,可能影响授权逻辑、计费系统、审计跟踪和用户信任
  • 如果任何下游系统假设组织名称是唯一的,这可能成为攻击向量

该问题符合以下已知漏洞分类:

  • CWE-840:业务逻辑错误
  • CWE-362:竞态条件
  • CWE-693:保护机制失败

WakaTime团队最终将其归类为"非漏洞",表示平台实际上允许重复的组织名称,这是设计上的选择,以便在两个人创建同名组织时用户可以加入这两个组织。团队认为这最多是一个bug,远非漏洞。

报告最终状态变更为"不适用",并被披露。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计