【51CTO.com快译】Mongo Express是一种基于Web的轻量级管理界面,用于交互式管理MongoDB数据库。它使用Node.js、Express和Bootstrap软件包编写而成。本文介绍在无需身份验证的情况下部署Mongo Express管理面板以及防止泄露的各种措施。
验证方案
Mongo Express随带config-default.js文件。它主要支持基本的验证,这包含用户名和密码组合的base64编码有效载荷。这意味着,如果配置了基本验证,每次请求访问不同的Mongo Express Web组件时就会传输HTTP请求报头Authorization:Basic
图1. Mongo Express Web管理控制台验证变量
除了上面讨论的Web面板验证方案外,Mongo Express软件包还支持通过环境变量传递数据库验证登录信息。如果使用虚拟机或容器来部署主机,通过环境变量传递登录信息可能导致信息在多个位置泄漏。图2显示了用于传递值的环境变量的类型。
图2. 用于Mongo数据库连接的环境变量
用于提供验证的Mongo Express环境变量如图3所示:
图3. 用于Mongo Express验证的Docker环境变量
总体而言,基本验证用于保护Mongo Express Web管理面板,而环境变量用于存储用来配置与主要的MongoDB数据库之间的后端连接的登录信息。
Mongo Express:HTTP请求/响应
在默认状态下,Mongo Express传输HTTP请求和响应报头,如代码片段1所示。创建了mongo-express cookie参数,用于存储与会话有关的信息。
代码片段1. Mongo Express Web服务器的HTTP请求/响应
set-cookie:mongo-express签名可用于鉴别部署在互联网上的Mongo Express的特征。
实证分析
成千上万的Mongo Express Web管理面板暴露在互联网上,无需验证即可访问它们。这意味着任何远程用户都可以访问这些界面、执行命令或检索敏感信息。
在这里,可以看到可用于无需验证,就可以扫描在互联网上运行的Mongo Express实例的HTTP资源路径:
直接的Web链接:
- [IP:port]/db/config/
- [IP:port]/db/config/system.sessions
- [IP:port]/db/admin/system.users
- [IP:port]/db/admin/system.version
- [IP:port]/db/local/startup_log
JSON转储(JSON dump)
- [IP:port]/db/config/
- [IP:port]/db/config/expArr/system.sessions
- [IP:port]/db/admin/expArr/system.users
- [IP:port]/db/admin/expArr/system.version
- [IP:port]/db/local/expArr/startup_log
代码片段2只是预测为访问Mongo Express软件包使用的资源而发送的cURL请求的输出:
代码片段2. 访问系统的JSON转储,用户无需远程服务器的验证
以下是我们进行的未验证的Mongo Express Web管理实例的实时评估的几个例子。
访问管理员root:可以访问和编辑含有登录详细信息的文档,比如salt、storedKey、serverKey及其他值。图4显示了同样的情况。
图4. 提取Admin.Root的角色和登录信息
数据库删除:图5和图6显示可以通过删除所有关联的集合来删除数据库。这些例子显示了通过不安全的Mongo Express管理面板删除startup_log数据库。
图5. 开始从数据库删除集合
图6. 数据库成功删除
信息泄漏:日志还可以显示关于构建环境的内部信息,如图7所示。
图7. 关于构建环境的信息泄漏
若干建议
上面介绍的例子强调了为什么保护部署在互联网上的Mongo Express实例很重要。以下是防止泄露的几个提示:
1. 使用强登录信息限制访问,并部署边界访问控制机制。
2. 对网络边界上公开的服务执行定期漏洞评估和渗透测试,确保关键服务受到限制,并未运行不安全的软件版本。
3. 制定强有力的风险评估计划,确保预先了解风险并相应地进行补救。
4. 定期执行配置审查,并制定安全影响分析(SIA)计划,将这种做法落实到位。
原文标题:Too fast, too insecure: Securing Mongo Express web administrative interfaces,作者:Aditya K Sood
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】