前言

大家好,我是陌溪

昨天陌溪在蘑菇博客交流群和群里的小伙伴进行了一场比较激烈的讨论,主要是关于 Nacos 中一个绕过安全认证直接获取微服务项目的配置文件的 安全漏洞

截止到昨天为止,该 issue 已经有 50 条评论。下面是该 issue 的地址,感兴趣的小伙伴可以跳转进行查看。

https://github.com/alibaba/nacos/issues/4593

漏洞起源

可能有些小伙伴还不太清楚 Nacos 是啥,它是 SpringCloud Alibaba 微服务架构中的一个组件,主要作用是服务注册和发现以及分布式配置管理。 也就是说我们的配置都可以在 Nacos 中存储,里面记录着 MySQLRedis 等数据库的账号密码,如果用户能够进入到 Nacos 中,也相当于我们的数据已经能够被脱库了。

因为 Nacos 官方仓库对该 issue 做了脱敏处理,issue 提主的描述也已经被删除了,但是从 issue 的回答中,陌溪能还原这个安全漏洞的一些描述。

用户发现通过设置请求头: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 服务器,所以这些服务器无一例外,都有可能被脱库!!

上次蘑菇博客删库事件:大型生产事故,开源项目蘑菇博客差点被删库 还历历在目,因为陌溪设置 MySQL 的密码而引起的,而这次很显然是 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,那么强烈建议进行升级!

结语

陌溪是一个从三本院校一路摸滚翻爬上来的互联网大厂程序员。独立做过几个开源项目,其中蘑菇博客在码云上有 2K Star 。目前就职于字节跳动的Data广告部门,是字节跳动全线产品的商业变现研发团队。本公众号将会持续性的输出很多原创小知识以及学习资源。如果你觉得本文对你有所帮助,欢迎各位小伙伴关注陌溪,让我们一起成长~

Nacos出现重大安全漏洞,开源项目险遭脱库相关推荐

  1. iOS学习资源汇总(开源项目、第三方库、技术博客等等)

    iOS学习资源汇总(开源项目.第三方库.技术博客等等) 字数3919 阅读10309 评论29 喜欢297 前言 Github众所周知,全球最大的同性社区交友网站,在这里你可以获取任何你想要的,只要你 ...

  2. 暴力拒绝白嫖,著名开源项目作者删库跑路!神秘Bug影响超2万个项目,亚马逊云也躺枪...

    [文章来源][公众号:新智元] "从GitHub上删除自己的代码是违反他们的服务条款的?WTF? 这是一种绑架行为." 这两天,一些开发者感觉有点懵-- 一觉醒来发现,自己程序跑出 ...

  3. GitHub 著名开源项目作者删库跑路,神秘 Bug 影响超 20000 个项目!

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜留言必回,有问必答! 每天 08:15 更新文章,每天进步一点点... ...

  4. 暴力拒绝白嫖,著名开源项目作者删库跑路,数千个应用程序无限输出乱码

    往期热门文章: 1.两天两夜,1M图片优化到100kb! 2.12 个顶级 Bug 跟踪工具 3.1个人6种变现途径收入130万美金在2020年 4."阿里味" PUA 编程语言火 ...

  5. 一些C++的开源项目和C++库以及修炼C++的方法

     Google的C++开源代码项目 v8  -  V8 JavaScript Engine V8 是 Google 的开源 JavaScript 引擎. V8 采用 C++ 编写,可在谷歌浏览器( ...

  6. 微软热门开源项目及代码库地址

    点击蓝字 关注我 这几年来,微软在开源与社区方向的努力与成就是全世界有目共睹的.微软的开源项目超过2000多个,挑了一些比较火热的给大家整理了一下.欢迎补充~ Visual Studio Code 非 ...

  7. WPF开源项目Newbeecoder.UI库新功能演示

    为了满足用户对Newbeecoder.UI库更多功能需求,在控件库中加入自定义按钮样式.输入框带图标.多选下拉框,日期时间和日历控件.不确定进度条.标准选项卡.绘制曲线图. 1.自定义样式按钮增加7种 ...

  8. 2017年Android开源项目及依赖库

    目录(?)[+] github排名: https://github.com/trending , github搜索: https://github.com/search UI Awesome-Mate ...

  9. 最全面的iOS和Mac开源项目和第三方库汇总

    标签: UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UIT ...

最新文章

  1. 大数据应用之双色球算奖平台总体设计大纲篇一
  2. Daily Report 2012.11.9 刘宇翔
  3. 逻辑回归是分类还是回归_分类和回归:它们是否相同?
  4. 33 SD配置-销售凭证设置-定义销售凭证的号码范围
  5. java传输对象_如何传输Java对象
  6. NumPy Beginner's Guide 2e 带注释源码 五、处理 NumPy 矩阵和 ufunc
  7. 拼多多董事会变更:董事6人变5人 张震不再出任
  8. Quay (2) - 镜像常规操作
  9. 【iOS】使用storyboard界面跳转报错:unrecognized selector sent to instance 0x7
  10. 如何使用Python进行单元测试
  11. excel2003出现“向程序发送命令时出现错误”解决方法
  12. vue上传、修改头像
  13. python pandas合并多个excel,Python pandas实现excel工作表合并功能详解
  14. 腾讯课堂课程汇总 CourseList(1000000-1001000)
  15. 2.2.1 hadoop体系之离线计算-mapreduce分布式计算-mapreduce架构概念
  16. Android 智能遥控器源码,基于Android手机的智能遥控器设计
  17. apache httpclient 连接 IIB,发送XML请求
  18. 论三元九运和二元八运
  19. 机器人李继红_电力设备
  20. 测试底妆的软件,倒了半瓶粉底液测了十颗美妆蛋 终于找到最好用的啦

热门文章

  1. SpringBoot整合Minio,一篇带你入门使用Minio
  2. 阿里云服务器中挖矿木马处理过程
  3. python线程创建对象_python线程池菜鸟教程
  4. 关于MAC安装包文件损坏解决办法
  5. Matlab信号处理笔记
  6. Android 定位的实现
  7. int为什么最大值为2^31-1(2的31次方-1)
  8. 「易语言」cmd 执行文件命令代码
  9. Http协议-Http协议的概述与特点
  10. 腾讯QQ Linux版正式回归 支持x64、ARM64