Nacos实战攻防中的漏洞,你了解多少?
- 内容介绍
- 文章标签
- 相关推荐
前言:别把 Nacos 当成天真的小白兔
一言难尽。 说实话, 我第一次看到 Nacos 的平安报告时脑子里只有两个字——“惊呆”。这玩意儿本来是想帮你把微服务的配置给管好,后来啊一不小心就把自己的大门敞开给黑客们走进来。别怪我说得夸张,下面的血泪史可是我亲自踩过的坑。
1️⃣ 那些让人抓狂的默认口令 & 未授权访问
心情复杂。 早期的 Nacos 简直就是把钥匙直接塞进门锁里:nacos / nacos。想象一下你去朋友家玩,发现门上贴着“密码:123456”,还能不进去吗?于是很多小伙伴在生产环境里直接搬了个 Docker 镜像,根本没改默认密码,就等着被扫荡。

一句话。 更离谱的是 有的版本居然在 /nacos/v1/auth/users 接口上不做任何鉴权,直接返回用户列表。只要你能访问到 96 端口,就能轻易拿到所有账号和加密后的 token。
2️⃣ 那些暗藏在 Jraft 端口里的 RCE 大礼包
别看 Jraft 看起来高大上,它背后其实是一个用 Hessian 协议传输数据的老旧服务。只要你能让它反序列化一个恶意 payload,就能直接施行任意命令,我可是吃过亏的。。
// 示例 payload
Object payload = new com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;
payload.setBytecodes;
payload.setName;
payload.setFactory);
// 发往 http://:7848/...
关键点:很多人以为只要不开启鉴权,这玩意儿就平安了——大错特错!只要 Hessian 没设白名单,就可以 RCE。
3️⃣ Yaml 反序列化漏洞——当配置变成武器
Nacos Client 在 1.4.1 前后有个致命缺陷:如果你的微服务使用了 AbstractConfigChangeListener 去监听配置变化, 放心去做... 那么攻击者可以构造恶意 Yaml 文件,让客户端在解析时触发反序列化,从而施行代码。
这事儿我可太有发言权了。 这类漏洞特别隐蔽, 主要原因是它不是直接对 Nacos 服务本身,而是对使用它的客户端产生影响。换句话说你可能连 Nacos 本身都没有暴露,却仍然被远程控制。
4️⃣ User‑Agent 绕过——一句话让防火墙失效
Nacos 在校验权限时竟然硬编码了一个字符串 “Nacos-Server”。只要请求头里的 User-Agent: Nacos-Server 出现,后端直接跳过鉴权检查。这种设计简直像是给黑客送了张通行证,最终的最终。。
GET /nacos/v1/auth/users?pageNo=1&pageSize=10 HTTP/1.1
Host: :96
User-Agent: Nacos-Server
发送一次你马上能看到所有用户信息——包括管理员 token!这玩意儿在实际渗透中经常被用来快速提权。
🛠️ 实战演示:从零到一把刀砍下整个控制台
步骤概览:
- 扫描目标资产, 定位开放的 96、9848、7848 三个端口。
- 尝试默认登录,若成功则跳到第 5 步;否则继续。
- 利用 User‑Agent 绕过获取 token:
- 拿到 token 后访问
/nacos/v1/auth/users?pageNo=1&pageSize=100列出全体用户。 - 向 Jraft发送 Hessian RCE payload,实现远程 shell。
- 清理痕迹:删除新建用户、撤回 token、关闭日志。
POST /nacos/v1/auth/login HTTP/1.1
Host: :96
User-Agent: Nacos-Server
Content-Type: application/x-www-form-urlencoded
username=nacos&password=nacos
⚠️ 小贴士 & 常见坑点:
- #未授权访问 vs 鉴权开启:即使打开了鉴权, 只要未修改 JWT 密钥,也可以自行生成合法 token。
- #Derby 数据库泄露:Nacos 自带 Derby, 无需密码即可施行任意 SQL 查询,敏感表如 users、configs 都能被导出。
- #集群模式注意:单机模式默认不开放 7848, 但集群模式一定会打开,这也是攻击者最爱盯上的点。
- #版本陷阱:从 2.0 到 2.2 部分补丁已修复部分漏洞, 但老旧镜像仍在生产环境中横行,请务必核查版本号。
🔧 防御手册:如何让黑客哭晕在厕所
改掉默认口令 & 强制密码复杂度
Nacos 配置文件里把 #username=nacos,password=nacos#改成强随机密码,并开启 LDAP 或 OAuth 双因子验证,格局小了。。
禁用未授权访问接口 & 限制 IP 白名单
也许吧... `spring.security.enabled=false` 是灾难, 请改为 true 并且在网关层面加入 IP 白名单,只允许内部网段访问管理接口。
为 Hessian 设置白名单 & 禁止反序列化凶险类
# application.yml
hessian:
allowed-classes:
- com.example.safe.*
- org.springframework.* # 严格限定
- java.util.* # 必要类
# 禁用 unsafe 类
serialization:
blacklist:
- org.apache.commons.collections.functors.InvokerTransformer
- org.codehaus.groovy.runtime.ConvertedClosure
修改硬编码 User‑Agent 检查逻辑
我可是吃过亏的。 AOP 拦截所有进入 /auth/* 的请求,如果 Header 中出现 “Nacs‑Server” 就直接返回 403。或者干脆删掉这段代码,让鉴权走完整流程。
定期更新 & 漏洞扫描
CVE‑2021‑29441、 CVE‑2024‑xxxx 等都是公开披露的高危漏洞,每月跑一次 Nessus/Nessus 替代品,对照官方补丁及时升级。
🚀 随机插入 —— 产品对比表
| 配置中心产品功能速览 | |||
|---|---|---|---|
| Name | AES 加密支持 | User‑Agent 防护 | Pain Level |
| Nacos | ✔ | ✘ | 😡 极度痛苦 |
| Eureka + Spring Cloud Config | ✔ | ✔ | 😊 相对友好 |
| Zookeeper + Apollo | ✔ | ✔ | 😐 中等难度 |
| Kubernetes ConfigMap | ✘ | ✔ | 😂 超级痛苦� |
| Consul KV | ✔ | ✔ | 😎 稍有挑战 |
| * 注:以上数据均为“随手写”并非官方统计,仅作噪声参考! | |||
别等到被玩坏才后悔 😭
这就说得通了。 Nacos 本身是一把双刃剑, 用得好可以省去大量运维成本,用得不好则会让你成为黑客午餐。记住三件事:改密码、关掉默认接口、限制 Hessian 序列化。如果还有哪块儿不明白,翻翻社区 issue 或者直接拉倒我们一起踩坑吧!祝各位平安同学天天有收获,有时候也能笑出声来~ 🎉🎉🎉
前言:别把 Nacos 当成天真的小白兔
一言难尽。 说实话, 我第一次看到 Nacos 的平安报告时脑子里只有两个字——“惊呆”。这玩意儿本来是想帮你把微服务的配置给管好,后来啊一不小心就把自己的大门敞开给黑客们走进来。别怪我说得夸张,下面的血泪史可是我亲自踩过的坑。
1️⃣ 那些让人抓狂的默认口令 & 未授权访问
心情复杂。 早期的 Nacos 简直就是把钥匙直接塞进门锁里:nacos / nacos。想象一下你去朋友家玩,发现门上贴着“密码:123456”,还能不进去吗?于是很多小伙伴在生产环境里直接搬了个 Docker 镜像,根本没改默认密码,就等着被扫荡。

一句话。 更离谱的是 有的版本居然在 /nacos/v1/auth/users 接口上不做任何鉴权,直接返回用户列表。只要你能访问到 96 端口,就能轻易拿到所有账号和加密后的 token。
2️⃣ 那些暗藏在 Jraft 端口里的 RCE 大礼包
别看 Jraft 看起来高大上,它背后其实是一个用 Hessian 协议传输数据的老旧服务。只要你能让它反序列化一个恶意 payload,就能直接施行任意命令,我可是吃过亏的。。
// 示例 payload
Object payload = new com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;
payload.setBytecodes;
payload.setName;
payload.setFactory);
// 发往 http://:7848/...
关键点:很多人以为只要不开启鉴权,这玩意儿就平安了——大错特错!只要 Hessian 没设白名单,就可以 RCE。
3️⃣ Yaml 反序列化漏洞——当配置变成武器
Nacos Client 在 1.4.1 前后有个致命缺陷:如果你的微服务使用了 AbstractConfigChangeListener 去监听配置变化, 放心去做... 那么攻击者可以构造恶意 Yaml 文件,让客户端在解析时触发反序列化,从而施行代码。
这事儿我可太有发言权了。 这类漏洞特别隐蔽, 主要原因是它不是直接对 Nacos 服务本身,而是对使用它的客户端产生影响。换句话说你可能连 Nacos 本身都没有暴露,却仍然被远程控制。
4️⃣ User‑Agent 绕过——一句话让防火墙失效
Nacos 在校验权限时竟然硬编码了一个字符串 “Nacos-Server”。只要请求头里的 User-Agent: Nacos-Server 出现,后端直接跳过鉴权检查。这种设计简直像是给黑客送了张通行证,最终的最终。。
GET /nacos/v1/auth/users?pageNo=1&pageSize=10 HTTP/1.1
Host: :96
User-Agent: Nacos-Server
发送一次你马上能看到所有用户信息——包括管理员 token!这玩意儿在实际渗透中经常被用来快速提权。
🛠️ 实战演示:从零到一把刀砍下整个控制台
步骤概览:
- 扫描目标资产, 定位开放的 96、9848、7848 三个端口。
- 尝试默认登录,若成功则跳到第 5 步;否则继续。
- 利用 User‑Agent 绕过获取 token:
- 拿到 token 后访问
/nacos/v1/auth/users?pageNo=1&pageSize=100列出全体用户。 - 向 Jraft发送 Hessian RCE payload,实现远程 shell。
- 清理痕迹:删除新建用户、撤回 token、关闭日志。
POST /nacos/v1/auth/login HTTP/1.1
Host: :96
User-Agent: Nacos-Server
Content-Type: application/x-www-form-urlencoded
username=nacos&password=nacos
⚠️ 小贴士 & 常见坑点:
- #未授权访问 vs 鉴权开启:即使打开了鉴权, 只要未修改 JWT 密钥,也可以自行生成合法 token。
- #Derby 数据库泄露:Nacos 自带 Derby, 无需密码即可施行任意 SQL 查询,敏感表如 users、configs 都能被导出。
- #集群模式注意:单机模式默认不开放 7848, 但集群模式一定会打开,这也是攻击者最爱盯上的点。
- #版本陷阱:从 2.0 到 2.2 部分补丁已修复部分漏洞, 但老旧镜像仍在生产环境中横行,请务必核查版本号。
🔧 防御手册:如何让黑客哭晕在厕所
改掉默认口令 & 强制密码复杂度
Nacos 配置文件里把 #username=nacos,password=nacos#改成强随机密码,并开启 LDAP 或 OAuth 双因子验证,格局小了。。
禁用未授权访问接口 & 限制 IP 白名单
也许吧... `spring.security.enabled=false` 是灾难, 请改为 true 并且在网关层面加入 IP 白名单,只允许内部网段访问管理接口。
为 Hessian 设置白名单 & 禁止反序列化凶险类
# application.yml
hessian:
allowed-classes:
- com.example.safe.*
- org.springframework.* # 严格限定
- java.util.* # 必要类
# 禁用 unsafe 类
serialization:
blacklist:
- org.apache.commons.collections.functors.InvokerTransformer
- org.codehaus.groovy.runtime.ConvertedClosure
修改硬编码 User‑Agent 检查逻辑
我可是吃过亏的。 AOP 拦截所有进入 /auth/* 的请求,如果 Header 中出现 “Nacs‑Server” 就直接返回 403。或者干脆删掉这段代码,让鉴权走完整流程。
定期更新 & 漏洞扫描
CVE‑2021‑29441、 CVE‑2024‑xxxx 等都是公开披露的高危漏洞,每月跑一次 Nessus/Nessus 替代品,对照官方补丁及时升级。
🚀 随机插入 —— 产品对比表
| 配置中心产品功能速览 | |||
|---|---|---|---|
| Name | AES 加密支持 | User‑Agent 防护 | Pain Level |
| Nacos | ✔ | ✘ | 😡 极度痛苦 |
| Eureka + Spring Cloud Config | ✔ | ✔ | 😊 相对友好 |
| Zookeeper + Apollo | ✔ | ✔ | 😐 中等难度 |
| Kubernetes ConfigMap | ✘ | ✔ | 😂 超级痛苦� |
| Consul KV | ✔ | ✔ | 😎 稍有挑战 |
| * 注:以上数据均为“随手写”并非官方统计,仅作噪声参考! | |||
别等到被玩坏才后悔 😭
这就说得通了。 Nacos 本身是一把双刃剑, 用得好可以省去大量运维成本,用得不好则会让你成为黑客午餐。记住三件事:改密码、关掉默认接口、限制 Hessian 序列化。如果还有哪块儿不明白,翻翻社区 issue 或者直接拉倒我们一起踩坑吧!祝各位平安同学天天有收获,有时候也能笑出声来~ 🎉🎉🎉

