Nacos 认证绕过漏洞(CVE-2021-29441)及其补丁绕过分析
字数 1043 2025-08-09 16:00:20

Nacos 认证绕过漏洞(CVE-2021-29441)及其补丁绕过分析

漏洞背景

Nacos是阿里巴巴于2018年7月发布的动态服务发现、配置管理和服务管理平台,类似于Zookeeper的配置中心。该漏洞涉及认证授权机制中的设计缺陷,允许攻击者绕过认证获取敏感信息或执行未授权操作。

漏洞详情

漏洞位置

漏洞出现在com.alibaba.nacos.core.auth.AuthFilter#doFilter函数中。

漏洞原理

认证过滤器中存在以下关键逻辑:

String userAgent = WebUtils.getUserAgent(req);
if (StringUtils.startsWith(userAgent, Constants.NACOS_SERVER_HEADER)) {
    chain.doFilter(request, response);
    return;
}

当请求的User-Agent以"Nacos-Server"开头时,过滤器会跳过后续的认证检查。开发者本意是用于服务端间通信,但由于硬编码且配置过于简单,导致可以被恶意利用。

漏洞影响

绕过认证后,攻击者可以:

  1. 访问需要认证的API
  2. 创建/删除用户
  3. 获取敏感配置信息

漏洞利用POC

创建新用户的示例:

POST /nacos/v1/auth/users?username=123&password=123 HTTP/1.1
User-Agent: Nacos-Server
Host: 127.0.0.1:8848
Accept: */*

补丁修复分析

原始修复方案

在1.4.1版本中增加了额外的安全检查:

if (StringUtils.startsWith(userAgent, Constants.NACOS_SERVER_HEADER)) {
    if (authConfigs.isEnableUserAgentAuthWhite()) {
        String whiteUserAgent = authConfigs.getUserAgentAuthWhite();
        if (!StringUtils.equals(userAgent, whiteUserAgent)) {
            resp.sendError(HttpServletResponse.SC_FORBIDDEN, "Invalid user-agent");
            return;
        }
    }
    chain.doFilter(request, response);
    return;
}

新增逻辑会检查配置中的白名单User-Agent,不匹配则拒绝请求。

补丁绕过分析

绕过原理

当新增的安全检查不通过时,程序会继续执行后续代码。存在以下关键路径可导致绕过:

  1. Method method = methodsCache.getMethod(req)可能返回null
  2. 当返回null时,会执行chain.doFilter(request, response)

具体绕过方法

通过构造特殊URI使getMethod返回null:

  • 正常请求:/user/login → path为/user/login
  • 特殊构造:/user/login/ → path为/user/login/

由于urlLookup中存储的路径不包含结尾的/,导致查找失败返回null,从而绕过认证。

最终修复方案

官方在后续提交中修复了此绕过:

  1. urlLookup中存储URL路径时统一在结尾添加/
  2. 确保路径匹配的一致性

修复提交:alibaba/nacos@2cc0be6

安全建议

  1. 及时升级到最新版本Nacos
  2. 检查并配置严格的User-Agent白名单
  3. 对管理接口实施网络层访问控制
  4. 定期审计系统日志中的异常认证请求

总结

该漏洞展示了安全机制设计中的常见问题:

  1. 硬编码凭据/标识的风险
  2. 认证旁路的多重可能性
  3. 补丁不完整导致的二次绕过
  4. URI解析差异带来的安全隐患

通过分析此漏洞,可以深入理解认证机制的设计缺陷和修复思路。

Nacos 认证绕过漏洞(CVE-2021-29441)及其补丁绕过分析 漏洞背景 Nacos是阿里巴巴于2018年7月发布的动态服务发现、配置管理和服务管理平台,类似于Zookeeper的配置中心。该漏洞涉及认证授权机制中的设计缺陷,允许攻击者绕过认证获取敏感信息或执行未授权操作。 漏洞详情 漏洞位置 漏洞出现在 com.alibaba.nacos.core.auth.AuthFilter#doFilter 函数中。 漏洞原理 认证过滤器中存在以下关键逻辑: 当请求的User-Agent以"Nacos-Server"开头时,过滤器会跳过后续的认证检查。开发者本意是用于服务端间通信,但由于硬编码且配置过于简单,导致可以被恶意利用。 漏洞影响 绕过认证后,攻击者可以: 访问需要认证的API 创建/删除用户 获取敏感配置信息 漏洞利用POC 创建新用户的示例: 补丁修复分析 原始修复方案 在1.4.1版本中增加了额外的安全检查: 新增逻辑会检查配置中的白名单User-Agent,不匹配则拒绝请求。 补丁绕过分析 绕过原理 当新增的安全检查不通过时,程序会继续执行后续代码。存在以下关键路径可导致绕过: Method method = methodsCache.getMethod(req) 可能返回null 当返回null时,会执行 chain.doFilter(request, response) 具体绕过方法 通过构造特殊URI使 getMethod 返回null: 正常请求: /user/login → path为 /user/login 特殊构造: /user/login/ → path为 /user/login/ 由于 urlLookup 中存储的路径不包含结尾的 / ,导致查找失败返回null,从而绕过认证。 最终修复方案 官方在后续提交中修复了此绕过: 在 urlLookup 中存储URL路径时统一在结尾添加 / 确保路径匹配的一致性 修复提交: alibaba/nacos@2cc0be6 安全建议 及时升级到最新版本Nacos 检查并配置严格的User-Agent白名单 对管理接口实施网络层访问控制 定期审计系统日志中的异常认证请求 总结 该漏洞展示了安全机制设计中的常见问题: 硬编码凭据/标识的风险 认证旁路的多重可能性 补丁不完整导致的二次绕过 URI解析差异带来的安全隐患 通过分析此漏洞,可以深入理解认证机制的设计缺陷和修复思路。