解析Nacos的API居然存在这么严重的漏洞
作者:怪?咖@ 发布时间:2022-05-29 08:17:52
很多人使用Nacos其实并没有真正的去读过官网,以至于忽视了很多重要的细节,Nacos为我们提供了大量API,但是这些API默认是没有开启认证的
,直接可以访问,针对于这一点我们也都可以去验证一下。下面我提供了两个调用示例供大家参考,基于这一点Nacos登录页也明确提示Nacos部署到内网,不要部署到公网
,但是对于没真正了解过Nacos,压根也不知道有这个API,也不知道有开启授权这回事,所以也就意识不到这个API暴露出去后果到底有多么严重!
官网API:https://nacos.io/zh-cn/docs/open-api.html
仔细看我们下载的nacos的登录页面,有一个特别大的红字,
内部系统,不可暴露到公网
。所以nacos一旦部署在公网,风险非常大!
一、调用API示例
1.1. 示例一:获取配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos-config-client-dev-yaml&group=DEFAULT_GROUP"
如下配置是我们要获取的配置:
开始访问:
会发现直接通过API就可以拿到,而且API没有任何认证,我认为这是一个很大的问题,那也就是意味着只要我知道你Nacos部署的地址以及端口,我就可以拿到你的配置。
我们有时候会往nacos当中存储一些数据库相关信息,一旦被盗窃,后果不堪设想。当然还好获取配置的API当中没有namespace参数,他只能查看public的。
但是对于服务发现相关的API还有命名空间相关API他是提供了namespace参数的
。
1.2. 示例二:删除命名空间
这里我专门创建了一个test命名空间,并且空间还有配置文件。
直接调用会惊讶的发现,竟然可以删除成功,而且还没有携带任何token什么的。
curl -X DELETE "http://localhost:8848/nacos/v1/console/namespaces" -d "namespaceId=test"
然后再去查看会发现test命名空间已经没有了。
这个问题就比较严重了,要知道我们系统当中都会依赖配置文件,一旦配置文件都被人删除了,后果是什么应该就不用我说了吧。
1.3. 示例三:获取登录用户信息
http://127.0.0.1:8848/nacos/v1/auth/users/?pageNo=1&pageSize=9
1.4. Nacos及时响应此问题
bug描述:https://github.com/advisories/GHSA-36hp-jr8h-556f
Nacos官网声明在2021年一月份发布的1.4.1版本修复了此问题:https://github.com/alibaba/nacos/pull/4703
在Nacos低版本当中,如上确实是一个bug,但是后来呢,Nacos针对于此也特意加了一个开关,用来控制是否鉴权。
不管怎么说,我们一定要尽量用最新的版本,因为Nacos其实版本之间变化相对来说没那么大,就算升级版本也很少会影响到我们自己的代码。
二、服务端如何开启鉴权?
官网介绍:https://nacos.io/zh-cn/docs/auth.html
官网给我们提供了Docker环境以及非Docker环境开启鉴权的方式。
非Docker环境直接修改application.properties当中的如下参数:
### If turn on auth system:
nacos.core.auth.enabled=true
注意:非Docker环境 鉴权开关是修改之后立马生效的,不需要重启服务端。
Docker环境直接启动命令当中添加如下参数即可:
-env NACOS_AUTH_ENABLE=true
开启后再访问API直接会403!
如果再想访问API需要先访问登录接口,获取到token,然后将token携带到参数访问即可,如下:
三、开启服务身份识别功能
这个主要是针对于Nacos集群而来的,开启鉴权功能后,服务端之间的请求也会通过鉴权系统的影响。我理解的就是将每个集群的节点设置的identity.key
和identity.value
设置为一样的,这样就认为鉴权通过了。
来源:https://blog.csdn.net/weixin_43888891/article/details/126779676
猜你喜欢
- springboot集成开发实现商场秒杀加入主要依赖<dependency> <groupId>org.spring
- 对于初学java的同学来说,第一件事不是写hello world,而是搭建好java开发环境,下载jdk,安装,配置环境变量。这些操作在xp
- 一、类加载流程类加载的流程可以简单分为三步:加载连接初始化而其中的连接又可以细分为三步:验证准备解析下面会分别对各个流程进行介绍。1.1 类
- 条码的应用已深入生活和工作的方方面面。在处理条码时,常需要和各种文档格式相结合。当需要在文档中插入、编辑或者删除条码时,可借助于一些专业的类
- AOP我想大家都很清楚,有时候我们需要处理一些请求日志,或者对某些方法进行一些监控,如果出现例外情况应该进行怎么样的处理,现在,我们从spr
- 想用java做一个像windows里一样的txt编辑软件,涉及到字体设置选项卡,在网上找了很久都没找到,就生气啦自己写一个,现在贴这里分享一
- 一、新建项目并设置界面新建项目:选择Windows窗体项目应用(.Net Framework):设置项目名和路径:新建项目如下:设置界面:将
- 前言本文主要给大家介绍了关于Java读取二进制文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。读Hex写CS
- 先看看效果图:中间的圆形头像和光环波形讲解请看:https://www.jb51.net/article/96508.htm周围的气泡布局,
- ListView和GridViewListView,列表视图,是Android中最重要的组件之一,几乎每个Android应用中都会使用Lis
- 目录 * 仓库的配置1、 下载sonatype Nexus来搭建 * 2 安装nexus服务3、创建 * 仓库4、配置 * 信息中央仓库的配置三个仓
- Gstreamer到底是个啥?GStreamer 是一个 基于pipeline的多媒体框架,基于GObject,以C语言写成。应用GStre
- Cookie和Session都是为了保持用户的访问状态,一方面为了方便业务实现,另一方面为了简化服务端的程序设计,提高访问性能。Cookie
- 最近在搭建springmvc的框架,遇到的这样的问题:在地址栏访问登陆界面访问不了,http://localhost/XXXX/WEB-IN
- 由于GitHub上面的zxing功能太多,有的用不到,我就抽取了重要的出来使用,这个可以生成二维码,扫描二维码和相册中的二维码Demo效果:
- 目录前言简介在Java上使用创建项目,并引入Jar包导入traineddata编写测试代码训练工具训练数据仓库参考前言Tesseract-O
- 新建一个类MyPageInterceptor.java(注意在springboot中要添加注解@Component)package com.
- 这篇文章主要介绍了通过实例了解Java 8创建Stream流的5种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学
- 本文实例讲述了C#实现自定义Dictionary类。分享给大家供大家参考。具体如下:1.关于MyDictionary类本文中实现的MyDic
- 开门见山 项目运行的环境里面已经有该项目的所有代码依赖,所以项目的代码只要将自己的代码打入进去就能提交到环境中运行了。但是不好的地方就是项