| 属性 | 值 |
|---|---|
| CVE 编号 | CVE-2026-8053 |
| 技术名称 | FlatBSON 重复字段索引漂移 |
| 漏洞类型 | CWE-787 — 越界写入 |
| CVSS v4.0 | 8.7 (高) |
| CVSS v3.1 | 8.8 (高) |
| EPSS | 0.064% (第 20 百分位 — 利用概率低) |
| KEV (已知被利用) | 未记录 |
| 发现日期 | MongoDB 内部 |
| 公开日期 | 2026-05-12 |
| 保留日期 | 2026-05-06 |
| NVD 状态 | 已发布 / 等待分析 |
漏洞存在于 MongoDB Server 的 时间序列集合系统 中。具体来说,错误由以下原因引起:
在 时间序列桶目录 内部,字段名称 与 索引 之间的映射机制存在 不一致性。
当该映射发生漂移时,写入操作可能导致 mongod 进程中的 越界写入。在某些条件下,这可能升级为 任意代码执行。
| 条件 | 描述 |
|---|---|
| 身份验证 | 需要 — 攻击者必须拥有有效的 MongoDB 账户 |
| 权限 | 需要数据库写入权限 |
| 用户交互 | 不需要 |
| 网络 | 可通过网络远程利用 |
| 复杂度 | 低 |
| MongoDB 分支 | 受影响版本 | 从版本开始修复 |
|---|---|---|
| 5.0 | < 5.0.33 | ≥ 5.0.33 |
| 6.0 | < 6.0.28 | ≥ 6.0.28 |
| 7.0 | < 7.0.34 | ≥ 7.0.34 |
| 8.0 | < 8.0.23 | ≥ 8.0.23 |
| 8.2 | < 8.2.9 | ≥ 8.2.9 |
| 8.3 | < 8.3.2 | ≥ 8.3.2 |
注意: 5.0 之前的版本 (4.x, 3.x) 已停止支持 (EOL)。如果您正在运行这些版本,请紧急升级到受支持的分支。
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
| 组件 | 值 | 含义 |
|------------|---------|---------|
| AV (Attack Vector) | **Network (N)** | 通过网络远程利用 |
| AC (Attack Complexity) | **Low (L)** | 无需特殊条件 |
| AT (Attack Requirements) | **None (N)** | 无前提要求 |
| PR (Privileges Required) | **Low (L)** | 只需要具有写入权限的用户 |
| UI (User Interaction) | **None (N)** | 无需受害者交互 |
| VC/VI/VA (Vulnerable System) | **High / High / High** | 整个CIA三元组受影响 |
| SC/SI/SA (Subsequent System) | **None** | 不影响其他系统 |
---
## 修复指南
### 1. 主要措施:升级 MongoDB Server
这是**唯一且彻底的**措施。将 MongoDB Server 升级到相应的已修补版本:```bash
# Kiểm tra phiên bản hiện tại
mongod --version
# Debian/Ubuntu — nâng cấp qua APT
sudo apt update
sudo apt install -y mongodb-org=<phiên-bản-đã-vá>
# RHEL/CentOS/Rocky — nâng cấp qua YUM/DNF
sudo yum update mongodb-org-<phiên-bản-đã-vá>
# Docker — pull image mới
docker pull mongo:<phiên-bản-đã-vá>
各分支的具体补丁版本:
| 分支 | 示例升级命令(APT) |
|---|---|
| 5.0 | sudo apt install -y mongodb-org=5.0.33 |
| 6.0 | sudo apt install -y mongodb-org=6.0.28 |
| 7.0 | sudo apt install -y mongodb-org=7.0.34 |
| 8.0 | sudo apt install -y mongodb-org=8.0.23 |
| 8.2 | sudo apt install -y mongodb-org=8.2.9 |
| 8.3 | sudo apt install -y mongodb-org=8.3.2 |
mongod.conf中配置为authorization: enabled: ```yaml
security:
authorization: enabled
mongod --version
sudo systemctl status mongod
mongosh --eval "db.version()"
sudo bash CVE-2026-8053-MongoDB-Fixed.sh
---
## 扫描工具:`CVE-2026-8053-MongoDB-Fixed.sh`
自动扫描和评估 MongoDB 服务器是否受 CVE-2026-8053 影响的 bash 脚本。该脚本设计为在**生产环境**中安全运行——所有操作均为**只读**模式,不会向 MongoDB 写入任何数据。
### 主要功能
| 功能 | 描述 |
|-----------|-------|
| 安装检测 | 自动查找 `mongod` 和 shell(`mongosh`/`mongo`)路径 |
| 版本对比 | 将已安装版本与受影响版本列表(6 个分支)进行对比 |
| EOL 检测 | 如果 MongoDB 属于生命周期结束的分支(4.4 及以下),则发出警告 |
| 时间序列扫描 | 列出整个集群中所有时间序列集合 |
| 权限检查 | 列出具有写入权限的用户——可能利用漏洞的对象 |
| 安全检查 | 评估 `authorization`、`bindIp`、`TLS/SSL` 配置 |
| 支持复制集 | 通过连接字符串 `mongodb://host:port/?replicaSet=name` 连接 |
| 输出多样化 | 普通模式(颜色)、静默模式(退出码)、JSON 模式(CI/CD) |
| 绝对安全 | **0 写入操作** — 所有 MongoDB 命令均为只读 |
### 系统要求
| 要求 | 详情 |
|----------|----------|
| 操作系统 | Linux (Ubuntu, Debian, RHEL, CentOS, Rocky, Alma, 等) |
| Bash | ≥ 4.0(支持关联数组) |
| MongoDB Shell | `mongosh`(推荐)或 `mongo`(旧版) |
| 操作系统权限 | `sudo`/`root`(用于读取配置文件 `/etc/mongod.conf`) |
| MongoDB 权限 | 具有读取 `system.users` 和执行 `listDatabases` 权限的用户 |
### 命令行参数(CLI Options)
| 短选项 | 长选项 | 参数 | 默认值 | 描述 |
|-------------|------------|---------|----------|-------|
| `-h` | `--help` | — | — | 显示帮助并退出 |
| `-q` | `--quiet` | — | `false` | 仅输出主要结果,使用退出码确定状态 |
| `-j` | `--json` | — | `false` | 以 JSON 格式输出结果(适用于 CI/CD 流水线) |
| `-H` | `--host` | `HOST` | `localhost` | MongoDB 服务器地址 |
| `-P` | `--port` | `PORT` | `27017` | MongoDB 端口 |
| `-u` | `--user` | `USER` | `super_admin` | MongoDB 登录用户名 |
| `-p` | `--pass` | `PASS` | *(内部默认值)* | MongoDB 密码 |
| `-r` | `--replica-set` | `NAME` | `rs_cams` | 复制集名称(如果有) |
| — | `--auth-db` | `DB` | `admin` | 认证数据库 |
| — | `--no-color` | — | `false` | 禁用输出中的 ANSI 颜色 |
### 6 步扫描流程
脚本依次执行 6 个步骤。每个步骤都包含状态日志 `[INFO]` / `[OK]` / `[WARN]` / `[ERROR]`。```
Bước 1: Phát hiện MongoDB installation
├─ Tìm mongod trong $PATH
├─ Duyệt các thư mục phổ biến:
│ /usr/bin, /usr/local/bin, /opt/mongodb/bin, /usr/lib/mongodb, /snap/bin
└─ Thất bại → exit 0 (không cài đặt = không bị ảnh hưởng)
Bước 2: Lấy phiên bản MongoDB
├─ Chạy: mongod --version
├─ Parse output: "db version v6.0.15" → "6.0.15"
└─ Thất bại → exit 2 (lỗi không xác định)
Bước 3: So sánh phiên bản với danh sách bị ảnh hưởng
├─ Tách major.minor.patch bằng regex
├─ Kiểm tra EOL (4.4, 4.2, 4.0, 3.6, ...)
├─ Đối chiếu với bảng PATCHED_VERSIONS:
│ ┌────────────┬──────────────┬────────┐
│ │ Nhánh │ Ngưỡng vá │ Ví dụ │
│ ├────────────┼──────────────┼────────┤
│ │ 5.0 │ patch ≥ 33 │ 5.0.33 │
│ │ 6.0 │ patch ≥ 28 │ 6.0.28 │
│ │ 7.0 │ patch ≥ 34 │ 7.0.34 │
│ │ 8.0 │ patch ≥ 23 │ 8.0.23 │
│ │ 8.2 │ patch ≥ 9 │ 8.2.9 │
│ │ 8.3 │ patch ≥ 2 │ 8.3.2 │
│ └────────────┴──────────────┴────────┘
├─ Nhánh ≥ 8.4 → mặc định AN TOÀN
└─ Kết quả: SAFE | VULNERABLE | EOL | UNKNOWN
Bước 4: Kiểm tra trạng thái mongod
├─ pgrep -x mongod
├─ systemctl is-active mongod
├─ ss / netstat kiểm tra port đang listen
└─ Kết quả: đang chạy / không chạy
Bước 5: Kiểm tra time-series collections & quyền người dùng
│ (chỉ thực hiện nếu mongod đang chạy và kết nối được)
├─ check_timeseries_collections():
│ ├─ listDatabases → lấy danh sách tất cả database
│ ├─ getCollectionInfos({ type: "timeseries" }) → từng database
│ └─ Output: JSON array [{ database, collection, timeseries }]
│
├─ check_user_privileges():
│ ├─ Đọc admin.system.users
│ ├─ Lọc user có role ghi: readWrite, dbOwner, root,
│ │ readWriteAnyDatabase, dbAdmin, userAdmin, backup,
│ │ restore, clusterAdmin, hostManager, __system
│ ├─ Output: JSON array [{ user, database, roles }]
│ └─ Đây là những user CÓ THỂ khai thác lỗ hổng
│
└─ Kết nối thất bại → gợi ý dùng -u -p để xác thực
Bước 6: Kiểm tra cấu hình bảo mật
├─ Tìm file mongod.conf (/etc/mongod.conf, /etc/mongodb.conf, ...)
├─ Fallback: đọc /proc/<pid>/cmdline nếu không tìm thấy file
├─ Kiểm tra 3 hạng mục:
│ ├─ authorization: enabled → [OK] / [WARN]
│ ├─ bindIp: 127.0.0.1 → [OK] / [WARN] (public)
│ └─ TLS/SSL: requireTLS → [OK] / [WARN]
└─ Kết quả: "OK" hoặc danh sách vấn đề (authorization_disabled, ...)
detect_mongod_path()检测系统上 mongod 二进制文件的路径。
command -v mongod 在 $PATH 中查找/usr/bin、/usr/local/bin、/opt/mongodb/bin、/usr/lib/mongodb、/snap/bin