您的位置:

Nacos漏洞深入分析

一、Nacos漏洞修复

Nacos在项目即将发布的时候,曾出现过多个漏洞,这些漏洞都被及时修复。当你选择Nacos作为配置中心/服务注册中心,需要特别关注Nacos的漏洞状况并及时进行升级。

升级Nacos的步骤如下:

  1. 备份Nacos服务器
  2. 下载新的Nacos版本
  3. 停止当前正在运行的Nacos服务
  4. 解压新版本的Nacos文件到服务器上,并将备份数据拷贝到新的Nacos版本中
  5. 启动新版本的Nacos服务

升级过程很简单,但是要注意备份数据,以防数据丢失。

二、Nacos任意用户添加漏洞

Nacos 2.0版本中有一个任意用户添加的漏洞,可以使攻击者任意添加用户并分配用户角色,给企业带来重大风险。

这个漏洞的修复需要修改nacos-2.0.0\server\nacos-server-builder\nacos-2.0.0\nacos\naming\src\main\java\com\alibaba\nacos\naming\boot\nacospropertiesrefresher\NacosNamingRefreshScheduler.java这个文件。首先,找到以下源代码:

if (StringUtils.isBlank(servers) && StringUtils.isBlank(standaloneServer)) {
    // if both servers and standaloneServer are blank
    servers = "localhost:8848";
}

这个源代码会先判断Nacos注册中心的地址是否为空,如果都为空,则设置默认的地址为“localhost:8848”。为了解决漏洞,需要更改为:

if (StringUtils.isBlank(servers) && StringUtils.isBlank(standaloneServer)) {
    throw new NacosException("No server address found: servers:" + servers + ",standaloneServer:" + standaloneServer);
}

这样一来,如果没有配置Nacos注册中心地址则会抛出异常,从而保证了安全性。

三、Nacos漏洞Getshell

Nacos注册中心存在Getshell漏洞,攻击者可以通过这个漏洞在服务器上执行任意命令,给企业带来极大威胁。

攻击者可以在配置文件中加入以下内容:

spring.datasource.platform=postgresql
db.num=1
db.url.0=jdbc:postgresql://localhost:5432/nacos?searchpath=public
db.user=root
db.password=root
&& ping any

当攻击者访问nacos:8848/nacos·ui/login页面登录时,便会触发ping any,执行攻击者插入的恶意代码。

避免Getshell漏洞的方法是不让攻击者有权限访问配置文件,或者将数据库的url设置为只读权限。

四、Nacos默认Token漏洞

Nacos默认Token漏洞是指当Nacos服务启动时,如果没有指定token,那么就默认为一个固定的字符串,攻击者只需要知道这个固定的字符串就可以进行攻击。攻击者可以访问nacos:8848/nacos·ui/login页面,输入以下内容即可欺骗Nacos登录:

username: nacos
password: && nacos

攻击者登录后可以执行任意操作,如删除信息、修改信息等。

避免漏洞的方法是在启动Nacos服务时指定token,或修改默认的token。

五、Nacos其他漏洞

除了上述几个漏洞,Nacos还存在其他漏洞,如通过攻击nacos:8848/nacos·ui/v1/cs/configs获取敏感信息、攻击nacos:8848/nacos·v1/ns/ip获取敏感信息等。由于本文篇幅有限,不再赘述。企业使用Nacos时需要密切关注Nacos的安全漏洞情况并及时更新,同时对Nacos的使用要严格遵循安全规则,保证企业信息安全。