一、Nacos漏洞修复
Nacos在项目即将发布的时候,曾出现过多个漏洞,这些漏洞都被及时修复。当你选择Nacos作为配置中心/服务注册中心,需要特别关注Nacos的漏洞状况并及时进行升级。
升级Nacos的步骤如下:
- 备份Nacos服务器
- 下载新的Nacos版本
- 停止当前正在运行的Nacos服务
- 解压新版本的Nacos文件到服务器上,并将备份数据拷贝到新的Nacos版本中
- 启动新版本的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的使用要严格遵循安全规则,保证企业信息安全。