漏洞描述
该漏洞发生在nacos在进行认证授权操作时,会判断请求的user-agent是否为”Nacos-Server”,如果是的话则不进行任何认证。开发者原意是用来处理一些服务端对服务端的请求。但是由于配置的过于简单,并且将协商好的user-agent设置为Nacos-Server,直接硬编码在了代码里,导致了漏洞的出现。利用这个未授权漏洞,攻击者可以获取到用户名密码等敏感信息,还可以进行任意操作,包括创建新用户并进行登录后操作。
影响范围
<= Nacos 2.0.0-ALPHA.1
< Nacos 1.4.1
解决方法
1.升级Nacos为最新版本
(1)查看当前Nacos的版本
命令:curl -X GET 'http://localhost:8848/nacos/v1/console/server/state'
(2)升级Nacos
参考官方:Nacos 2.0 升级文档
2.开启Nacos鉴权
(1)测试不开启Nacos鉴权
修改Nacos的配置文件application.properties,默认Nacos的鉴权配置是false。如下所示:
### 关闭鉴权
nacos.core.auth.enabled=false
### 关闭使用user-agent判断服务端请求并放行鉴权的功能
nacos.core.auth.enable.userAgentAuthWhite=false
### 配置自定义身份识别的key(不可为空)和value(不可为空)
nacos.core.auth.server.identity.key=secret
nacos.core.auth.server.identity.value=secret
(2)测试是否能够拿到Nacos的账号密码
命令:curl -X GET 'http://localhost:8848/nacos/v1/auth/users?pageNo=1&pageSize=9'
结果真的可以拿到Nacos的账号密码,并且还可以自行添加账号密码,也是通过上面的命令进行。
添加账号密码接口:并设置账号密码为 test/test,大家感兴趣的话可以自行验证是否成功。
curl -X POST 'http://localhost:8848/nacos/v1/auth/users?username=test&password=test'
由此, 说明Nacos的这个漏洞太危险,需立即修复。
(3)测试开启Nacos鉴权
修改Nacos的配置文件application.properties,默认Nacos的鉴权配置是true
重启Nacos,先停止Nacos,再重新启动即可。
(4)验证
命令:curl -X GET 'http://localhost:8848/nacos/v1/auth/users?pageNo=1&pageSize=9'
说明:开启鉴权之后,再次请求这个接口信息,就不会出现账号密码的相关信息而是出现403的错误信息。
注意开启鉴权之后,在项目中也需要加入相关Nacos的配置信息(账号密码)。
参考鉴权官方文档:Authorization
到此,Nacos漏洞修复完成。