1.问题复现
Nacos版本: 2.4.2.1
该漏洞,在开启nacos.core.auth.enabled=true
后,通过CURL或者apifox访问,都可以获取到命令空间
2.着手解决
deepseek-r1回答,未解决.
未升级到2.4.3+,此处无法验证,各位大佬如果已经升级请验证些漏洞是否已解决.
2.4.2.1版本
对比 2.4.3版本
未发现改动.
3.源码修改
在折腾了一个小时之后,未解决此问题,根据ai的回答,修改nacos的各项配置都不生效,最终采用修改源码来解决.
这里基于nacos-2.4.2.1
版本的源码进行修改.
接口路径:com.alibaba.nacos.console.controller.NamespaceController
通过调试可以发现,是通过com.alibaba.nacos.core.auth.AuthFilter
进行权限验证的.
决断的依据是: 方法上面: 是否有加
@Secured
注解
所以我们加上@Secured
注解即可:(参照其它方法)
@Secured(resource = AuthConstants.CONSOLE_RESOURCE_NAME_PREFIX + "namespaces", action = ActionTypes.READ)
而ActionTypes
枚举有 READ
和 WRITE
两种.针对@GetMapping
明显属于READ
的范畴.
修改完,可以直接对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.部署与验证
- 替换原安装包:将新编译的
nacos-server-2.4.2.1.zip
解压并替换原 Nacos 服务。(或者只替换nacos-server.jar
) - 重启服务:
sh startup.sh -m standalone # 单机模式
sh startup.sh # 集群模式
- 测试 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"}%
- 问题解决
5.总结
通过修改源码强制鉴权逻辑并重新打包,可以解决配置无效的问题。但更推荐:
- 优先升级到 Nacos 2.4.3+。
- 定期审计权限配置和日志,确保鉴权生效。
🌾