夜雨聆风学习资料网

ARTICLE · 997790

按文档开了鉴权也中招 Nacos 3.x 未授权建管理员

按文档开了鉴权也中招 Nacos 3.x 未授权建管理员
导语: 你好,我是网络安全老宋。安全攻防干货准时送达!
网络安全老宋
漏洞预警 · XVE-2026-53002

// 漏洞预警 · 甲方运维必看

按文档开了鉴权也中招Nacos 3.x 未授权建管理员

影响 3.0.0~3.2.3 的 0-day,照官方文档开了鉴权也照样免登录建管理员,直接接管你的配置中心。

影响 3.0.0~3.2.3已复现 0-day修复 3.2.4
🔑一句话精华:Nacos 3.x 把管理接口的鉴权"开关"和"看门人"拧反了——你照官方文档开了控制台鉴权,攻击者照样能免登录建管理员、接管整个配置中心,今天刚曝的 0-day 已被实测复现。

安全圈又炸了一个 0-day。靶子是Nacos——阿里开源、国内互联网和政企用得极广的配置中心/注册中心。Spring Cloud Alibaba 默认就是它,大量微服务项目离不开。

这个漏洞最让人后背发凉的地方在于:它不需要你配错任何东西。很多甲方的运维拿着官方文档,老老实实把nacos.core.auth.enabled=true打开、把控制台登录开了,以为这下安全了。结果攻击者在公网或内网,一条 curl 就能免登录建出管理员账号,把你整个配置中心端了。

银遁安全已经实测复现,GitHub 上也出现了可用的 POC。影响版本3.0.0 ~ 3.2.3,官方修复版本3.2.4,民间编号XVE-2026-53002(截至发稿官方尚未分配 CVE)。下面把"它到底漏在哪、攻击者怎么打、你怎么两分钟自查、怎么修"一次讲透。

目录 · Table of Contents

00这是什么漏洞:鉴权"作用域"错配

01攻击者怎么一步步接管配置中心

02两分钟自查:你中招了没

03怎么修:先止血,再根治

04老宋说

00这是什么漏洞:鉴权"作用域"错配

要理解这个洞,得先说 Nacos 的鉴权设计。Nacos 3.x 把接口分成了几个"作用域"(apiType):OPEN_APIADMIN_APICONSOLE_APISERVER_API等等。每个接口方法上有一个@Secured注解,标记"这个接口归哪个作用域管、需不需要登录"。

按设计,管理类接口(建用户、建角色、授权限)应该标成ADMIN_API,由AuthAdminFilter这个"看门人"把守——只有带了正确管理员身份的请求才放行。

问题出在UserControllerV3RoleControllerV3PermissionControllerV3这几个控制器身上:它们的@Secured注解里没有显式写apiType

没写会怎样?代码里apiType有缺省值,而这个缺省值是OPEN_API——开放接口作用域。

⚠️ 根因一句话:管理接口的@Secured漏写了apiType,让它掉进了默认关闭的开放接口作用域,而默认开启的AuthAdminFilter又根本不认它们——结果就是未授权直接放行。

这不是配置错误,是代码层面的设计/实现缺陷。你照文档开了控制台鉴权、开了nacos.core.auth.enabled,也只是把OPEN_APIAuthFilter打开了,但那几个ADMIN_API标记的缺失照样让管理接口裸奔。

注:3.2.4 把整组 Auth v3 接口的apiType都补回了ADMIN_API,相当于把"开关"和"看门人"重新对齐。

01攻击者怎么一步步接管配置中心

实测复现的攻击链非常干净,全在/v3/auth/*路径下,全程不需要任何 token。

第 1 步:免登录建一个普通账号

⏺ Shell · 第1步 建账号

POST /v3/auth/user

{"username":"pwn","password":"P@ssw0rd!"}

返回 200,账号建好了。

第 2 步:绑一个自定义角色

⏺ Shell · 第2步 绑角色

POST /v3/auth/role

{"role":"pwn_role","username":"pwn"}

注意:直接绑ROLE_ADMIN会被业务层拦掉,所以攻击者走"自定义角色 + 后续授权"这条路。

第 3 步:给这个角色发"通杀"权限

⏺ Shell · 第3步 发权限

POST /v3/auth/permission

{"role":"pwn_role","resource":"*:*","action":"rw"}

*:*表示所有资源,动作rw表示读写。到这一步,这个自建角色已经具备和你管理员等价的配置读写能力。

第 4 步:登录拿 token

⏺ Shell · 第4步 登录

POST /v3/auth/user/login

{"username":"pwn","password":"P@ssw0rd!"}

实测有个坑:新建账号后权限缓存刷新需要等约 15 秒,刚建完立刻登录可能拿不到完整权限,等一会儿再登录即可。

第 5 步:接管配置中心

拿到 token 后,读配置、改配置、下发恶意配置(比如把数据库连接串改成攻击者的库、把密钥换成攻击者的)、甚至借助 Nacos 的配置推送能力投毒下游微服务,都随便。

攻击面就是8848 端口(Nacos 主端口)。生产环境这个端口基本对内网开放,很多还顺手映射到办公网甚至带了公网 IP。前置条件为零——哪怕你控制台鉴权、admin 鉴权全开了,这条链路照样能打。

🔵 更阴的是,那几个接口里DELETE 同样未授权。攻击者建完号、授权完,可以再调DELETE /v3/auth/userDELETE /v3/auth/role把自己建的痕迹删干净,留个"干干净净"的日志给你。

02两分钟自查:你中招了没

不用上 POC,一条命令就能验。查版本:看application.properties或启动日志里的 Nacos 版本。落在3.0.0 ~ 3.2.3之间,直接进高风险名单。

项目
说明
影响版本
3.0.0 ~ 3.2.3
修复版本
3.2.4
攻击面
8848 端口
前置条件
无(控制台/管理员鉴权全开也能打)
民间编号
XVE-2026-53002(官方 CVE 待分配)

查接口:从能访问 8848 端口的机器上发一条未授权请求——

⏺ Shell · 检测是否中招

GET /v3/auth/user/list

如果返回200且带用户列表数据,说明管理接口没被鉴权拦,你中招了。返回 403/401 才算正常。

GitHub 上的mhtsec/nacos-authscope-poc支持--check-only只做检测不破坏,也支持--no-cleanup跑完整链路不清痕迹,运维自查用--check-only最安全。

03怎么修:先止血,再根治

根治(首选):升级到Nacos 3.2.4 及以上。官方把整组 Auth v3 接口的apiType补回了ADMIN_API,从根上修掉作用域错配。

临时止血(来不及升级时,二选一)

R1开总鉴权开关nacos.core.auth.enabled=true打开。注意这只是把OPEN_APIAuthFilter打开,并不能完全堵死(根因是 apiType 缺失),但能提高攻击门槛,务必配合 R2。
R2网关限制鉴权路径在反向代理/网关层对/v3/auth/*做来源限制,只允许运维跳板机、CI/CD 等可信来源访问 8848 的鉴权路径,其余一律拒。
🟠 止血后别忘了擦屁股:用上面的检测接口扫一遍,确认没有攻击者已经建好的可疑账号/角色/权限;同时翻一遍nacos.core.auth.plugin.nacos.token.secret.key是不是还用着默认值(默认那串SecretKey0123456789...是硬编码的,历史 CVE 里被反复拿来伪造 token),不是就赶紧换成随机长密钥。

04老宋说

// 老宋说这不是你配错了,是 Nacos 3.x 把"管理接口该归谁管"这件事在代码里写漏了——@Secured没标apiType,接口掉进默认关闭的开放作用域,等于管理后台的锁装反了方向。行业观察更扎心:Nacos 的鉴权是个"老毛病"了。从 2021 年那个 CVSS 9.8 的 CVE-2021-29441(User-Agent 以Nacos-Server开头就能绕过)算起,到默认secret.key硬编码、再到这次的作用域错配,这至少是第五种绕过姿势。一个配置中心,鉴权默认还是关的,这设计思路值得所有用它的甲方心里掂量。你现在能做的就一件具体的事:今天把内网所有 Nacos 版本摸一遍,落在区间内的立刻升级 3.2.4;升不了的用网关把/v3/auth/*锁死在可信来源;顺便把那个默认 token 密钥换了。配置中心是你微服务的"大脑",它被人端了,下游全得跟着遭殃。
漏洞EXP地址:
https://github.com/mhtsec/nacos-authscope-poc
防御,不是在演练期间发现攻击,而是在演练开始前就把攻击面收敛到最小。

end

不想错过文章内容?读完请点一下在看,加个关注,您的支持是我创作的动力

期待您的一键三连支持(点赞、在看、分享~)

相关学习资料

返回首页浏览学习资料