Nacos 3.x 鉴权作用域错配漏洞分析

未授权创建管理员账户 完全接管服务端

漏洞描述

Nacos 是阿里巴巴开源的服务注册与配置中心,广泛用于微服务架构。CVE 暂未分配的该漏洞影响 Nacos 3.0.0 ~ 3.2.3:用户、角色、权限三个管理接口落在了一个默认不鉴权的作用域里。

远程未认证攻击者无需任何凭证,即可在 8848 端口上创建用户、绑定角色、授予全量权限,随后正常登录获取 token——等同于完全接管 Nacos 服务端,读写全部命名空间配置(常含数据库/Redis/中间件凭据)。即使运维按官方文档开启了 admin/console 鉴权,漏洞依然存在。

影响版本

Nacos 3.0.0 ~ 3.2.3 均受影响

攻击面:服务端主端口 8848(SDK/gRPC 端口)

修复版本

升级至 3.2.4 及以上版本

官方修复:为受影响接口的 @Secured 注解补上 apiType = ApiType.ADMIN_API

漏洞根因

Nacos 3.x 将 HTTP 鉴权按 @Secured 注解的 apiType 拆分为多条独立作用域(scope),由不同 Servlet Filter 处理:

作用域拆分(关键)

ADMIN_API 走 AuthAdminFilter,开关 nacos.core.auth.admin.enabled默认开启OPEN_API 走 AuthFilter,开关 nacos.core.auth.enabled默认关闭

注解默认值陷阱

@Secured 注解的 apiType() 默认值是 OPEN_API——而 3.0.0~3.2.3 中用户/角色/权限管理控制器(nacos-default-auth-plugin 模块)的一批方法漏标了 apiType = ApiType.ADMIN_API,导致本应受默认开启的 Admin 鉴权保护的管理接口,落入默认关闭的普通鉴权作用域。

结果AuthAdminFilter 只匹配 ADMIN_API,直接跳过这些接口;AuthFilter 因 auth.enabled=false 直接放行——形成「鉴权作用域错配」。

受影响接口

createUser / deleteUser → POST/DELETE /nacos/v3/auth/user

createRole / deleteRole → POST/DELETE /nacos/v3/auth/role

createPermission / deletePermission → POST/DELETE /nacos/v3/auth/permission

利用链(4 步)

① 未授权创建用户POST /nacos/v3/auth/user

② 未授权创建角色并绑定POST /nacos/v3/auth/role

③ 授予全量权限POST /nacos/v3/auth/permission(resource=* / action=rw)

④ 正常登录POST /nacos/v3/auth/user/login 获取 accessToken

两个关键绕过点:服务层禁止创建内置 ROLE_ADMIN → 改用随机角色名 + * 通配资源拿等价全量权限;权限缓存默认延迟 ~15s → 刚创建的用户立即访问可能失败,需重试。

公开 PoC

GitHub 上已有公开利用脚本(TlyHj/nacos-v3-attack、HackSpeak/nacos-authscope),
支持一键检测、批量扫描与完整利用(创建账户 → 绑角色 → 授权 → 登录取 token),
攻击者可未授权创建管理员等价账户完全接管。PoC 已公开,存在被批量利用的风险。

FOFA 语法

body="nacos" && port="8848"
# 或
title="Nacos" && port="8848"

修复建议

立即升级 Nacos 至 3.2.4 及以上版本

临时缓解:开启 nacos.core.auth.enabled=true(漏标接口同样要求认证)

网络层面限制 8848 端口仅对可信内网开放

排查系统中是否已存在攻击者注入的异常账户/角色

PoC 已公开,存在被批量利用的风险,请尽快处置

参考链接

https://github.com/TlyHj/nacos-v3-attack
https://github.com/HackSpeak/nacos-authscope
https://github.com/alibaba/nacos