漏洞分析 |【原创】Nacos历史+最新漏洞详细分析(附利用方法)

admin 2023年3月20日10:43:53漏洞分析 |【原创】Nacos历史+最新漏洞详细分析(附利用方法)已关闭评论1,819 views字数 3478阅读11分35秒阅读模式
0x01 Nacos < 2.2.0默认jwt密钥未授权访问
部署Nacos
部署
通过代理下载nacos-server-2.2.0传到服务器

图片

解压后进入bin目录启动

bash startup.sh -m standalone

图片

浏览器访问:

图片

开启鉴权

修改nacos.core.auth.enabled=true

图片

漏洞利用

使用默认密钥生成token查看用户:

图片

使用默认密钥生成的token创建用户:

图片

图片

如果不添加jwt则提示403:

图片

漏洞分析
寻找密钥

Nacos是springboot写的项目,可以通过application.properties查看项目配置文件

默认密钥:

SecretKey012345678901234567890123456789012345678901234567890123456789

图片

官方说明也在application.properties这个文件中,如果没有手工配置,那默认就是:

SecretKey012345678901234567890123456789012345678901234567890123456789

图片

设置远程调试

在JAVA_OPT中添加调试参数:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

图片

在idea中添加调试设置:

图片

鉴权filter配置

通过下断点在jwt认证的地方,然后通过调用栈查找Filter,把断点下到JwtTokenManager的validateToken方法上:

图片

通过栈找到Filter为com.alibaba.nacos.core.auth.AuthFilter

图片

通过com.alibaba.nacos.core.auth.AuthFilter查找springboot的配置类为com.alibaba.nacos.core.auth.AuthConfig:

图片

鉴权过程

进入com.alibaba.nacos.core.auth.AuthFilter首先读取配置文件中的鉴权开关是否为false(这是再配置文件中设置的nacos.core.auth.enabled配置项),为false则直接进入下一个filter,也就不需要鉴权:

图片

接着会检查是否配置了userAgentAuthWhite配置项(这是再配置文件中设置的nacos.core.auth.enable.userAgentAuthWhite配置项),在nacos2.2.0中默认为false:

图片

接下来会检查配置文件中是否设置了

nacos.core.auth.server.identity.keynacos.core.auth.server.identity.value

如果配置了这两个参数,则去判断在header中nacos.core.auth.server.identity.key对应的值是否为nacos.core.auth.server.identity.value,如果是则直接去下一个filter,就造成了权限绕过:

图片

接着判断请求中的方法是否在需要授权的map中,如果不在则不需要授权:

图片

最终会走到如下方法:

com.alibaba.nacos.auth.AbstractProtocolAuthService#validateIdentity

这个方法是对jwt进行验证的操作:

图片

通过调试也可以将jwt通过普通的jwt认证方式进行认证

com.alibaba.nacos.plugin.auth.impl.NacosAuthManager#resolveToken(com.alibaba.nacos.plugin.auth.api.IdentityContext)

图片

最终走到

com.alibaba.nacos.plugin.auth.impl.JwtTokenManager#validateToken

这里直接使用jwtParse对jwt进行验证:

图片

jwtParser设置密钥

接下来就需要找到这个jwtParser中的jwt密钥从何而来;

com.alibaba.nacos.plugin.auth.impl.JwtTokenManager#processProperties

中通过

this.jwtParser = Jwts.parserBuilder().setSigningKey(this.secretKey).build();

来设置密钥:

图片

然后this.secretKey是从配置文件中读取nacos.core.auth.plugin.nacos.token.secret.key之后进行base64解码之后作为密钥:

图片

0x02 Nacos2.2.0权限绕过

漏洞利用
Header中添加serverIdentity: security能直接绕过身份验证查看用户列表:

图片

如果没有或者不对应则返回403:

图片

漏洞分析

根据前面的分析判断是否开启鉴权开关和是否开启userAgentAuthWhite,然后是对配置文件是否配置了

nacos.core.auth.server.identity.keynacos.core.auth.server.identity.value

如果配置了则判断header里面的serverIdentity是否为配置文件中的security:

图片

如果是则进入下一个filter,就不需要对jwt进行鉴权

图片

0x03 Nacos默认配置未授权访问漏洞

漏洞利用
直接访问
http://10.10.84.207:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&search=accurate&accessToken=
能够直接查看用户列表,不需要添加任何身份标识:

图片

图片

漏洞分析

再配置文件中nacos.core.auth.enabled的值默认为false,也就是不需要进行身份验证:

图片

在代码中就是com.alibaba.nacos.core.auth.AuthFilter#doFilter中的第一个判断,如果取值为false则直接进入下一个filter,就不需要身份验证:

图片

this.authConfigs.isAuthEnabled()不论是在配置文件中还是在注释中都为flase,不需要进行身份验证:

图片

0x04 Nacos1.x.x版本User-Agent权限绕过

漏洞复现

从GitHub下载1.3.2版本,并修改系统授权选项为true:

图片

设置远程调试参数:

图片

使用curl命令进行复现

curl 'http://10.10.84.207:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&accessToken=' -H 'User-Agent: Nacos-Server'

图片

漏洞分析

进入com.alibaba.nacos.core.auth.AuthFilter#doFilter的第一个if语句是判断当前是否开启鉴权:

图片

首先通过系统配置读取nacos.core.auth.enabled设置的值,如果没有找到则通过配置文件读取该配置:

图片

接下来读取header中的User-Agent值,如果User-Agent为Nacos-Server则直接进入下一个filter造成了权限绕过:

图片

0x05 Nacos-client<1.4.2yaml反序列化

漏洞复现
选择使用单独的nacos-client 1.4.1

图片

客户端连接服务端,使用官方的示例:

图片

将yaml配置修改为yamlpayload:

图片

然后在客户端就能够执行命令:

图片

漏洞分析

com.alibaba.nacos.client.config.impl.CacheData#safeNotifyListener

一直监听服务端的配置改变,当发生改变时会进入

com.alibaba.nacos.client.config.impl.ConfigChangeHandler#parseChangeData

图片

com.alibaba.nacos.client.config.impl.ConfigChangeHandler#parseChangeData

会根据配置文件类型进入不同的处理方法里面,这里进入yaml的处理方法,其中newContent和oldContent分别为配置内容:

图片

进到

com.alibaba.nacos.client.config.impl.YmlChangeParser#doParse

论是新改的配置,还是原来的配置都会经过(new Yaml()).load()方法,最终造成命令执行漏洞:

图片

END

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月20日10:43:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   漏洞分析 |【原创】Nacos历史+最新漏洞详细分析(附利用方法)https://cn-sec.com/archives/1615708.html