nacos未授权访问漏洞原理扫描
Nacos 的授权扫描未授权访问漏洞,说白了就是访问攻击者不用登录就能直接调用它的接口,拿到敏感数据甚至控制整个服务。漏洞2021 年曝出的原理那个默认 JWT 密钥问题,我印象特别深——当时很多生产环境直接被扫穿,授权扫描配置信息、访问用户列表全裸奔。漏洞这不是原理什么高深漏洞,纯粹是授权扫描默认配置没改。
Nacos 默认的访问 JWT 密钥是固定值,写在源码里:SecretKey012345678901234567890123456789012345678901234567890123456789。漏洞攻击者拿这个密钥自己签一个 token,原理就能绕过认证。授权扫描更离谱的访问是,有些版本连 token 都不用,漏洞直接访问 /nacos/v1/auth/users 就能拿到用户列表。我见过一个案例,某公司内网 Nacos 没改默认密码,攻击者进去后把配置里的数据库连接串全导走了,第二天数据库就被拖库。
扫描这个漏洞其实不难。先看目标是不是 Nacos,访问 /nacos/ 看有没有登录页。然后直接请求 /nacos/v1/auth/users?pageNo=1&pageSize=9,如果返回 JSON 里带 username 和 password 字段,基本就确认了。注意,有些版本会返回 403,但换个路径 /nacos/v1/console/server/state 如果能拿到版本号,也能辅助判断。
更隐蔽的是 JWT 绕过。用默认密钥生成一个 token:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTk5OTk5OTk5OX0.xxxxx 然后带上 Authorization: Bearer <token> 去访问 /nacos/v1/auth/users,如果返回用户列表,说明没改密钥。我实测过几个版本,1.4.1 之前基本都中招。1.4.2 之后官方加了默认密钥校验,但如果你没改配置文件,还是白搭。
扫描的时候别只盯着一个路径。Nacos 的 API 很多,/nacos/v1/cs/configs 能直接读配置,/nacos/v1/ns/operator/metrics 能看集群状态。攻击者往往先拿配置,再找数据库密码,最后横向移动。我见过一个红队报告,从 Nacos 未授权到拿下整个 K8s 集群,只用了不到十分钟。
修复方法就两条:改默认 JWT 密钥,开鉴权。在 application.properties 里加 nacos.core.auth.enabled=true 和 nacos.core.auth.plugin.nacos.token.secret.key=你的自定义密钥。密钥长度别少于 32 位,最好用随机字符串。另外,别把 Nacos 暴露在公网,内网也要做访问控制。
扫描器方面,Nuclei 有现成模板:nacos-unauth.yaml,直接跑就行。自己写脚本也简单,Python 的 requests 库几行代码就能批量测。但注意,别扫别人的生产环境,未授权访问测试本身就可能违法。
最后说个细节:有些 Nacos 部署在 Docker 里,默认配置没挂载出来,改完重启就丢了。我建议把配置文件挂到宿主机,或者用环境变量覆盖。别问我怎么知道的,踩过坑。
