MongoDB未授权漏洞(IoTA.990003)是一个严重的安全漏洞,它允许未经授权的攻击者通过默认端口访问数据库,并对数据进行增、删、改、查等高危操作,以下是对该漏洞的详细分析:
漏洞
1、漏洞成因:开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作(增、删、改、查高危动作),而且可以远程访问数据库,造成未授权访问的根本原因就在于启动Mongodb的时候未设置 auth,也很少会有人会给数据库添加上账号密码(默认空口令),使用默认空口令这将导致恶意攻击者无需进行账号认证就可以登陆到数据服务器。
2、漏洞危害:攻击者无需认证连接数据库后对数据库进行任意操作(增、删、改、查高危动作),存在严重的数据泄露风险,可能导致黑客利用该漏洞发起新一轮勒索攻击,会导致您的业务受影响,网站服务器被入侵控制等风险。
环境搭建与漏洞复现
1、测试机:Kali Linux
2、靶机:Ubuntu 16.04
3、使用docker搭建环境:从镜像仓库中拉取或者更新指定镜像;列出本地主机上的mongo镜像;创建一个新的容器并运行一个命令;显示所有的容器,包括未运行的。
4、漏洞证明:MongoDB默认端口一般都为27017,当配置成无验证时,就会存在未授权访问,先查看Docker IP,然后使用msf使用如下命令:use auxiliary/scanner/mongodb/mongodb_login;set rhosts 172.17.0.1;set threads 10;exploit。
防御建议
1、配置AUTH:打开MongoDB配置文件(.conf),设置为auth=true;修改访问端口和指定访问ip,使其只监听私有IP(或本地IP),不监听任何公网IP或DNS。
2、禁用HTTP接口:MongoDB自带一个HTTP服务和REST接口,一般不需要web方式进行远程管理,建议禁用nohttpinterface。
3、添加用户认证:在admin库中使用db.addUser("root", "123456") #添加用户名root密码123456的用户;db.auth("root","123456") #验证下是否添加成功,返回1说明成功。
FAQs
1、问:为什么MongoDB默认没有开启权限验证?
答:MongoDB设计之初可能考虑到了易用性和快速部署的需求,因此默认情况下没有开启权限验证,这也带来了安全隐患,容易被恶意攻击者利用。
2、问:如何检查我的MongoDB实例是否存在未授权漏洞?
答:可以使用Nmap等工具扫描MongoDB默认端口(如27017),并尝试在不提供身份验证的情况下连接数据库,如果连接成功并能执行数据库操作,则说明存在未授权漏洞。
3、问:除了上述防御措施外,还有哪些方法可以提高MongoDB的安全性?
答:除了配置权限验证、修改访问端口和指定访问IP以及禁用HTTP接口外,还可以采取以下措施提高MongoDB的安全性:定期更新MongoDB软件以修复已知漏洞;限制网络流量以防止DDoS攻击;使用防火墙规则限制对MongoDB端口的访问;对敏感数据进行加密存储等。
MongoDB未授权漏洞是一个严重的安全隐患,需要引起足够的重视,通过配置权限验证、修改访问端口和指定访问IP以及禁用HTTP接口等措施,可以有效提高MongoDB的安全性,防止恶意攻击者利用该漏洞进行数据窃取或破坏,也需要定期关注MongoDB的安全动态,及时更新软件以修复已知漏洞。