一、风险背景与概述

在 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 安全基线:认证、绑定地址、最小权限、备份策略、日志审计、升级策略。


八、免责声明

本文档仅用于合法授权的安全测试、内部安全评估与教学研究。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐