首页/安全/漏洞与攻击面速查/MongoDB 未授权访问风险
主机与服务风险面53 条

MongoDB 未授权访问风险

MongoDB 默认仅监听本机(bindIp 127.0.0.1),一旦改为对外监听且未启用授权(authorization),数据库即处于可被直接读写的状态。

漏洞与攻击面速查安全更新于 2026-10-13

MongoDB 未授权访问是什么

MongoDB 默认仅监听本机(bindIp 127.0.0.1)且不开启访问控制,属于「安全默认」。风险出现在运维为了远程连接把 bindIp 改成 0.0.0.0,或把实例放到公网,同时 security.authorization 保持关闭:此时任何能连上 27017 的人都可以直接读写全部数据库,包括系统库与用户集合。

基本信息

默认端口27017(分片与配置服务另有端口)
关键配置net.bindIp、security.authorization(mongod.conf)
典型错误对外监听但不启用授权;只把本机地址去掉而不加授权
验证方式无凭据连接后尝试 show dbs / db.stats()

配置核查要点

配置核查要点
net.bindIp:是否被改为 0.0.0.0(或未显式绑定)
security.authorization:是否 enabled
系统库:admin 库是否创建了强口令管理用户
网络:27017 是否对非必要网段开放(安全组、防火墙)
历史库:是否存在测试库、示例库长期留存

加固示例(mongod.conf)

加固示例(mongod.conf)
net:
  bindIp: 127.0.0.1,10.0.0.12   # 只绑定回环与应用网卡
  port: 27017
security:
  authorization: enabled        # 开启访问控制
# 注意顺序:先创建管理员用户,再开启 authorization,否则会把自己锁在库外

验证与账号创建

验证与账号创建
mongosh --host 10.0.0.12 --port 27017        # 无凭据连接:应报认证错误
mongosh -u admin -p '<口令>' --authenticationDatabase admin   # 带凭据连接正常
# 开启授权前先在 admin 库创建具备 userAdmin 权限的管理用户

典型使用场景

  • 新实例投产前的配置复核:区分测试与生产两套参数
  • 暴露面排查:对全网段探测 27017,确认哪些实例可无凭据访问
  • 数据泄露事件响应:确认是否曾开放访问,评估数据被批量导出的可能
  • 应用改造:为每个应用创建最小权限用户,替代共用高权限账号
  • 容器化部署:确认镜像里的默认启动参数没有被覆盖成无授权模式

风险组合与处置

组合风险处置
对外监听 + 未授权极高:任意读写立即收口网络并开启授权
内网监听 + 未授权高:横向可达即失守开启授权,按账号最小授权
已授权 + 弱口令中高强口令策略与定期轮换
已授权 + 来源限制可接受纳入日常基线检查
开启授权后需要为各应用创建最小权限用户;升级前先在测试环境演练用户创建流程,避免生产环境因账号缺失导致应用集体连不上。
远程访问确有需求时,用具体来源网段账号加防火墙白名单,比打开 % 与 0.0.0.0 可控得多;数据库层与网络层两道限制都要有。

易错点

  • 只设置 bindIp 不开授权:任何获得应用服务器权限的人可直连数据库,横向移动几乎无门槛
  • 先开 authorization 再建管理员用户,导致无人能登录,只能停机改配置
  • 测试库与示例库长期留存并允许匿名访问,成为敏感数据泄露的捷径
  • 容器编排里被环境变量覆盖成无授权模式,人工核查配置文件时看不出来
  • 备份与只读副节点未纳入同一加固标准,攻击者从副节点绕入

数据来源与参考

  • MongoDB 官方文档(Security Checklist 与 authorization)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌