MongoDB 安全风险排查与整改方案(认证与访问控制)
一、风险背景与概述
在 MongoDB 的部署与运维过程中,若实例未按安全基线启用身份认证与访问授权(Authentication/Authorization),同时服务监听在可被非预期主机访问的网络接口(例如监听到全网卡或过于宽泛的网段),就可能形成访问控制缺失风险。
该类风险的本质是:
-
访问控制策略缺位(未启用授权控制或权限体系不完善)
-
暴露面过大(监听地址与网络边界未收敛)
从而导致数据库资产存在被未授权访问、数据泄露或业务影响的可能性。
本质上属于 访问控制缺失 与 安全基线不符合 引发的严重配置漏洞。
二、问题基本信息
| 项目 | 内容 |
|---|---|
| 漏洞名称 | MongoDB 未授权访问漏洞 |
| 漏洞类型 | 安全配置缺陷 / 访问控制缺失 |
| 影响范围 | MongoDB 任意版本(在未正确启用认证与访问控制时均可触发) |
| 默认端口 | TCP 27017 |
| 风险等级 | 高危 |
三、复现环境准备
3.1 靶场环境(存在风险配置)
-
操作系统:Rocky Linux 8.10
-
MongoDB 版本:4.4.13
-
网络信息:
-
IP:
172.20.0.100 -
端口:
27017对外开放
-
-
风险点说明:
-
mongod.conf中未启用security.authorization: enabled -
导致实例在无认证状态下暴露可访问面
-
3.2 验证端环境
-
操作系统:Rocky Linux 8.10(同理可为 Linux / Windows / macOS)
-
工具组件:python3.11。
-
网络条件:可访问目标
172.20.0.100:27017
四、验证步骤
步骤 1:探测 MongoDB 服务端口暴露情况

步骤 2:验证数据库暴露
验证点:可直接列出数据库列表,证明存在信息泄露风险。
提示:若部分库显示 0.000GB 仍可能包含元数据、索引或隐藏集合,不能据此判定“无数据”。

步骤 3:访问业务数据库并读取信息(以 choiceshop 为例)
验证结果:可读取业务集合数据(如用户信息、订单信息等)。
若数据包含账号口令、Token、密钥、手机号等字段,则风险等级进一步上升,可形成直接的数据泄露事件。

步骤 4:数据库写入测试数据

五、风险分析
| 风险维度 | 说明 |
|---|---|
| 数据泄露 | 用户信息、交易记录、认证凭据、密钥等敏感数据可被完整获取 |
| 数据篡改 | 可修改业务核心字段(如价格、余额、订单状态、权限标记等),造成资金与业务逻辑风险 |
| 服务破坏 | db.dropDatabase() 等命令可直接清库,导致严重可用性事故 |
| 横向移动 | 若数据库保存其他系统账号/Token/连接串,攻击者可进一步渗透内网,扩大影响面 |
六、修复与加固建议
✅ 6.1 启用身份认证(强制项)
编辑 /etc/mongod.conf,启用授权控制:
security: authorization: enabled
随后创建管理员用户(在 MongoDB Shell 中执行):
use admin db.createUser({ user: "admin", pwd: "StrongPassword123!", roles: ["root"] })
完成后重启服务使配置生效。
✅ 6.2 收敛网络暴露面(最小暴露原则)
1)限制监听地址(bindIp):仅监听必要接口,例如本地回环或受控管理网段:
net: bindIp: 127.0.0.1,172.20.0.0/16
2)防火墙/安全组策略:对 27017/tcp 进行访问控制,仅允许可信 IP(堡垒机/业务服务器)访问,禁止任意网段直连。
重点:认证 + 网络边界控制需要同时具备,避免“端口仍对外开放”的暴露面风险。
✅ 6.3 审计、监控与基线治理(长期项)
-
启用访问审计能力与日志留存(便于溯源与告警);
-
监控异常连接行为(例如非业务时段大量
dump、连接频率异常、来源 IP 异常); -
定期执行安全基线检查(如 OpenSCAP、Lynis 等)并形成整改闭环;
-
建议建立 MongoDB 安全基线:认证、绑定地址、最小权限、备份策略、日志审计、升级策略。
八、免责声明
本文档仅用于合法授权的安全测试、内部安全评估与教学研究。
更多推荐




所有评论(0)