Cockpit CMS v2.13.5 NoSQL 注入漏洞总结 漏洞概述 漏洞名称:NoSQL 注入 (NoSQL Injection) 漏洞类型:Operator Injection (操作符注入) & Aggregate Pipeline Injection (聚合管道注入) 受影响版本:Cockpit CMS v2.13.5 (latest) CWE 编号:CWE-943 (Improper Neutralization of Special Elements in Data Query Logic) CVSS 评分:3.1 (Critical) 前置条件:需要拥有 或 权限的用户(包括 API Key 用户)。 影响范围 1. Operator Injection:允许攻击者绕过查询约束,通过正则表达式逐字符提取数据。 2. Aggregate Injection:允许攻击者执行跨集合连接(Cross-collection joins),读取系统集合中未授权访问的敏感数据。 3. 具体后果: 全库数据泄露(Cross-collection data theft)。 访问控制绕过(ACL Bypass)。 哈希密码泄露。 API Token 和 2FA 密钥泄露。 技术分析与 POC 代码 1. Assets 接口注入 ( ) 文件: 原理:控制器遍历 数组,如果元素不是字符串(即 JSON 对象),则直接追加到过滤器列表中,未进行验证。 漏洞代码片段: 2. 聚合管道注入 ( ) 文件: 原理:聚合端点接受用户提供的 字符串,解码为 JSON 后直接传递给 方法,未进行清理。 漏洞代码片段: 3. 概念验证 (PoC) PoC 1: 全库数据泄露 (利用 $lookup) 攻击者可以使用 pivot collection 连接并转储 集合。 请求示例: 成功响应示例: PoC 2: 盲注 (利用 $regex) 攻击者可以使用正则表达式提取资产的创建者用户 ID。 请求示例: 修复方案 1. 清理键名 (Sanitize Keys):实现递归清理器,在将对象传递给数据库驱动之前,剥离所有以 开头的键。 2. 限制聚合 (Restrict Aggregation):限制 API 中允许的聚合阶段。具体而言,应阻止 、 、 和 / (针对非超级管理员用户)。 3. 使用 DSL (Use a DSL):放弃使用原始的 MongoDB JSON 过滤器,转而实现一种安全、受限的过滤语言。