Nacos出现重大安全漏洞,线上项目险遭脱库
前言
大家好我是诺米,今天我无意中看到技术交流群里一场比较激烈的讨论,主要是关于 Nacos 中一个绕过安全认证直接获取微服务项目的配置文件的 安全漏洞。
漏洞起源
可能有些小伙伴还不太清楚 Nacos 是啥,它是 SpringCloud Alibaba 微服务架构中的一个组件,主要作用是服务注册和发现以及分布式配置管理。 也就是说我们的配置都可以在 Nacos 中存储,里面记录着 MySQL、Redis 等数据库的账号和密码,如果用户能够进入到 Nacos 中,也相当于我们的数据已经能够被脱库了。
用户发现通过设置请求头:User-Agent: Nacos-Server,就可以绕过Nacos的权限校验,而直接获取到项目的所有配置文件信息,然后题主建议Nacos官方立即对这个问题进行修复。
然后 Nacos 项目的开发者认为,这不是一个 安全漏洞,并且认为通过设置 User-Agent 就相当于开启了白名单,那么就可以忽略鉴权。
开发人员的答复马上就获得了 300 多人的反对意见。认为开发者将 Nacos 默认密码和本次安全漏洞说成是一个问题。
我觉得上面这个回复非常中肯,就拿诺米来说,当我部署完 Nacos 后,我首先第一件事就是修改 Nacos 默认的账号和密码,然后换成一个更加安全的。但是对于忽略鉴权这个机制,我并不知情的,所以其它用户也可以通过非法的后门来获取到我的配置。
漏洞复现
大家在看完这个issue的时候,群里的小伙伴们就拿一个已经上线的博客系统来进行测试。首先介绍一下,这个博客使用的是Nacos版本1.4.0的一个版本。
首先通过 Chrome 浏览器的F12 观察 nacos 请求的 Network,找到了下面这条Nacos配置文件请求接口
http://your_ip:8848/nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=dev&search=accurate
然后打开 Postman,填写这个 URL,并设置 GET 请求,同时设置 Headers 请求头,加入 User-Agent:Nacos-Server,如下图所示
从上面的请求 URL 中可以看出,在没有设置任何 Token 相关的操作,只填写了一个固定的请求头,然后发送请求一个 HTTP 请求。
嗯... 果然不出所料,这个博客的 Nacos 配置直接就直接被获取到了!!!
其中里面包含了 MySQL 的账号密码,Redis 的账号密码。如果没有对配置文件的用户和密码进行加密处理,那直接显示的就是明文。我们经常为了远程调试方便,就顺便开放了 MySQL 的 3306端口,这样对方就可以通过找到他的 IP地址 和 MySQL 的账号密码,使用 SQLyog 工具,直接入侵了该网站的后台数据库。
如果我们只需要执行 SQL 导出,就可以轻松将该网站数据进行脱库,同时我在 issue 中,也看到有小伙伴通过端口扫描工具,一共搜出来 800 多台暴露了公网的 Nacos 服务器,所以这些服务器无一例外,都有可能被脱库!!
解决方法
后面社区小伙伴们,踊跃的提出了自己的修改意见,最后决定通过增加自定义 Key Value 键值对对来解决,只有通过设置正确的键值对才能获取配置。
在今天 Nacos 开发人员已经重视了这个高危安全漏洞,并且紧急的发布了最新的 1.4.1 版本。
我们只需要下载最新版本的 Nacos 1.4.1 ,然后修改对应的 application.properties 文件,修改如下内容
# 开启鉴权
nacos.core.auth.enabled=true
# 关闭白名单功能
nacos.core.auth.enable.userAgentAuthWhite=false.
# 配置键值对 [键值对可以自定义]
nacos.core.auth.server.identity.key=aaa
nacos.core.auth.server.identity.value=bbb
最后我们再次使用刚刚的请求进行测试,发现已经无法获取到配置了
那么我们需要怎么才能获取到配置呢?只需要在 headers 里面,填写刚刚配置文件中的键值对即可
因为键值对是我们自定义的,因此每个人的都是不相同的。到这里 Nacos 的安全漏洞已经算是解决了,最后诺米希望看到本篇文章的小伙伴,如果公司还没有升级最新版的 Nacos,那么强烈建议进行升级!
2、本站文章部分来源注册用户发布或互联网收集而来,若有侵权,请邮件联系作者。
邮箱地址:wtao219@qq.com