记一次Nacos Namespace未授权访问漏洞解决

525 阅读1分钟

1.问题复现

Nacos版本: 2.4.2.1 image.png

该漏洞,在开启nacos.core.auth.enabled=true后,通过CURL或者apifox访问,都可以获取到命令空间

image.png


2.着手解决

image.png deepseek-r1回答,未解决. image.png 未升级到2.4.3+,此处无法验证,各位大佬如果已经升级请验证些漏洞是否已解决. 2.4.2.1版本 image.png 对比 2.4.3版本 image.png 未发现改动.


3.源码修改

在折腾了一个小时之后,未解决此问题,根据ai的回答,修改nacos的各项配置都不生效,最终采用修改源码来解决. 这里基于nacos-2.4.2.1版本的源码进行修改. 接口路径:com.alibaba.nacos.console.controller.NamespaceController

image.png

通过调试可以发现,是通过com.alibaba.nacos.core.auth.AuthFilter进行权限验证的. image.png

决断的依据是: 方法上面: 是否有加@Secured注解

所以我们加上@Secured注解即可:(参照其它方法)

@Secured(resource = AuthConstants.CONSOLE_RESOURCE_NAME_PREFIX + "namespaces", action = ActionTypes.READ)

ActionTypes枚举有 READWRITE 两种.针对@GetMapping明显属于READ的范畴.

image.png

修改完,可以直接对nacos源码进行编码打包.

mvn -Prelease-nacos -Dmaven.test.skip=true -Dcheckstyle.skip=true clean install -U

编译完成后,产物位于: distribution/target/nacos-server-2.4.2.1.zip 或者去根目录下获取nacos-server.jar


4.部署与验证

  1. 替换原安装包:将新编译的 nacos-server-2.4.2.1.zip 解压并替换原 Nacos 服务。(或者只替换nacos-server.jar)
  2. 重启服务
sh startup.sh -m standalone  # 单机模式 
sh startup.sh               # 集群模式
  1. 测试 API 访问
curl -X GET "http://xxx:8848/nacos/v1/console/namespaces"
{"timestamp":"2025-03-07T15:26:10.941+08:00","status":403,"error":"Forbidden","message":"user not found!","path":"/nacos/v1/console/namespaces"}%  
  1. 问题解决

5.总结

通过修改源码强制鉴权逻辑并重新打包,可以解决配置无效的问题。但更推荐:

  1. 优先升级到 Nacos 2.4.3+
  2. 定期审计权限配置和日志,确保鉴权生效。

🌾