漏洞概述 Rocket.Chat 的 DDP 方法存在一个认证任意数据导出漏洞。攻击者可以通过控制 对象,将其直接合并到 MongoDB 的 操作中,从而覆盖任何列,包括 和 字段。结合云存储后端(如 Google Cloud Storage 或 Amazon S3),攻击者可以生成一个指向目标用户数据导出的签名 URL,导致数据泄露。 影响范围 受影响版本:Rocket.Chat <8.5.0, <8.4.1, <8.3.3, <8.2.3, 8.5.0, 8.4.1, 8.3.3, 8.2.3, 8.1.4, <8.1.4, <8.0.5, <7.13.7, 8.0.5, 7.13.7, 7.10.11, <7.10.11 修复版本:8.5.0, 8.4.1, 8.3.3, 8.2.3, 8.1.4, 8.0.5, 7.13.7, 7.10.11 CVSS 评分:8.5/10 攻击向量:网络 攻击复杂度:低 所需权限:低 用户交互:无 范围:改变 机密性:高 完整性:低 可用性:低 修复方案 1. 未过滤的 代码路径: - 在 方法中, 对象被直接合并到 操作中,没有字段限制。 - 修复:在 操作中增加字段限制,防止 对象被直接合并。 2. 盲合并到 : - 将 对象合并到 中,导致 对象被更新。 - 修复:在 之前检查 对象,确保其不被直接合并。 3. 攻击者控制的云存储路径: - 云存储后端(GCS、S3、WebDAV)直接读取 对象中的路径,导致攻击者可以控制路径。 - 修复:在读取路径之前,验证路径的合法性,防止攻击者控制路径。 4. 可预测的 路径: - 路径是可预测的,攻击者可以生成签名 URL。 - 修复:在生成签名 URL 时,增加随机性,防止路径被预测。 5. 通过 store-swap 绕过授权: - 攻击者可以通过控制 对象中的 字段,绕过授权检查。 - 修复:在授权检查时,验证 字段的合法性,防止攻击者绕过授权。 POC 代码 以上代码展示了漏洞的关键部分,攻击者可以通过控制 对象,生成指向目标用户数据导出的签名 URL,导致数据泄露。