一、漏洞简介

1.1 漏洞背景

etcd 的 gRPC API 层存在授权检查缺陷,导致多个 API 可以在未授权的情况下被调用。这些漏洞源于同一底层问题,影响多个 API 端点。

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

项目 内容
漏洞编号 暂无统一编号
危害等级 暂未找到权威信息
漏洞类型 多个 API 授权绕过漏洞
披露时间 暂未找到权威信息
影响组件 etcd 安全
项目 内容
CVE 编号 待分配(GHSA-q8m4-xhhv-38mg)
危害等级 中等
CVSS 评分 中危
漏洞类型 授权绕过

核验说明:该问题未见统一 CVE 编号,本文结合原文与公开资料进行整理。

二、影响范围

2.1 受影响的版本

  • etcd < 3.4.42
  • etcd < 3.5.28
  • etcd < 3.6.9

2.2 不受影响的版本

  • etcd >= 3.4.42
  • etcd >= 3.5.28
  • etcd >= 3.6.9

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

  • etcd 集群启用了认证
  • gRPC API 暴露给不可信或部分可信的客户端

三、漏洞详情与原理解析

3.1 漏洞触发机制

未授权用户可以调用以下 API:

API 潜在影响
MemberList 获取集群拓扑、成员 ID 和端点信息
Alarm 触发告警,可能导致操作中断或 DoS
Lease APIs 干扰 TTL 键和租约所有权
Compact 永久删除历史版本,影响 watch/审计/恢复

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

// gRPC API 层的授权检查缺陷(简化示意)
func (s *EtcdServer) MemberList(ctx context.Context, r *pb.MemberListRequest) (*pb.MemberListResponse, error) {
    // 问题:缺少授权检查
    // 应该在这里验证用户是否有权限调用此 API

    return s.raftHandler.MemberList(ctx, r)
}

func (s *EtcdServer) Alarm(ctx context.Context, r *pb.AlarmRequest) (*pb.AlarmResponse, error) {
    // 同样缺少授权检查
    return s.raftHandler.Alarm(ctx, r)
}

修复补丁:

func (s *EtcdServer) MemberList(ctx context.Context, r *pb.MemberListRequest) (*pb.MemberListResponse, error) {
    // 添加授权检查
    if err := s.authStore.IsAdminPermitted(ctx); err != nil {
        return nil, err
    }
    return s.raftHandler.MemberList(ctx, r)
}

四、漏洞复现(可选)

4.1 环境搭建

# 启动启用认证的 etcd
etcd --listen-client-urls http://localhost:2379 &
etcdctl user add root
etcdctl auth enable

4.2 PoC 演示与测试过程

# 未授权用户调用 MemberList
etcdctl --endpoints=http://localhost:2379 member list
# 漏洞版本:成功返回成员列表
# 修复版本:返回权限错误

# 未授权触发 Alarm
etcdctl --endpoints=http://localhost:2379 alarm activate

五、修复建议与缓解措施

5.1 官方版本升级建议

升级到以下版本之一: - etcd 3.6.9 - etcd 3.5.28 - etcd 3.4.42

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

网络层隔离:

# 限制只有可信组件可以访问 etcd
iptables -A INPUT -p tcp --dport 2379 -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p tcp --dport 2379 -j DROP

mTLS 认证:

etcd --client-cert-auth \
     --trusted-ca-file /path/to/ca.crt

六、参考信息 / 参考链接

6.1 官方安全通告

6.2 其他技术参考资料

  • 报告者:Isaac David, bugbunny.ai, Asim Viladi Oglu Manizada, Alex Schapiro, Ahmed Allam, Luke Francis, OLU-DEVX