【认证绕过】NACOS身份认证绕过漏洞分析

前言

工作中遇到一个nacos服务认证绕过的问题,在此总结一下漏洞原因。

一、nacos简介

官方文档描述:

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

二、漏洞复现

参考其它的文章:

Alibaba Nacos权限认证绕过 - 云+社区 - 腾讯云

三、漏洞原因

在AuthFilter过滤器中存在如下条件语句:

useragent请求头如果以Constants.NACOS_SERVER_HEADER开头,则直接放通,执行后续的业务处理,而Constants.NACOS_SERVER_HEADER定义的正是"Nacos-Server"。

 @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        
        if (!authConfigs.isAuthEnabled()) {
            chain.doFilter(request, response);
            return;
        }
        
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;
        
        String userAgent = WebUtils.getUserAgent(req);
        
        if (StringUtils.startsWith(userAgent, Constants.NACOS_SERVER_HEADER)) {
            chain.doFilter(request, response);
            return;
        }

该功能用于内部服务之间的通信,但是实现方式不够安全。

官方文档描述如下:

开启鉴权功能后,服务端之间的请求也会通过鉴权系统的影响。考虑到服务端之间的通信应该是可信的,因此在1.2~1.4.0版本期间,通过User-Agent中是否包含Nacos-Server来进行判断请求是否来自其他服务端。

但这种实现由于过于简单且固定,导致可能存在安全问题。因此从1.4.1版本开始,Nacos添加服务身份识别功能,用户可以自行配置服务端的Identity,不再使用User-Agent作为服务端请求的判断标准。

四、防护措施

1.升级到最新版本,官方文档中描述1.2~1.4.0版本有该问题;

2.nacos服务尽量放在内部网络中运行,不要暴露到公网环境中,因为nacos默认提供的鉴权是弱鉴权,有被绕过的风险;

3.如果需要在公网环境运行,则按照官方指导自定义鉴权体系。

官方文档地址:

什么是 Nacos

五、测试总结

nacos服务默认端口为8848,在黑盒测试的时候,可以探测一下是否有这个端口,如果有,使用ip:port/nacos/#/login访问看看是否用了nacos服务,如果有使用再进行后续验证。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值