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"开头时,过滤器会跳过后续的认证检查。开发者本意是用于服务端间通信,但由于硬编码且配置过于简单,导致可以被恶意利用。
漏洞影响
绕过认证后,攻击者可以:
- 访问需要认证的API
- 创建/删除用户
- 获取敏感配置信息
漏洞利用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,不匹配则拒绝请求。
补丁绕过分析
绕过原理
当新增的安全检查不通过时,程序会继续执行后续代码。存在以下关键路径可导致绕过:
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路径时统一在结尾添加/ - 确保路径匹配的一致性
安全建议
- 及时升级到最新版本Nacos
- 检查并配置严格的User-Agent白名单
- 对管理接口实施网络层访问控制
- 定期审计系统日志中的异常认证请求
总结
该漏洞展示了安全机制设计中的常见问题:
- 硬编码凭据/标识的风险
- 认证旁路的多重可能性
- 补丁不完整导致的二次绕过
- URI解析差异带来的安全隐患
通过分析此漏洞,可以深入理解认证机制的设计缺陷和修复思路。