一、漏洞简介¶
1.1 漏洞背景¶
Consul 的 ACL(访问控制列表)系统是保护 Consul 集群安全的核心机制。然而,历史上存在多个 ACL 绕过漏洞,允许攻击者在某些条件下绕过 ACL 验证,访问或操作本应受保护的资源。这些绕过漏洞严重削弱了 Consul 的安全防护能力。
1.2 漏洞概述(包含 CVE 编号、危害等级、漏洞类型、披露时间等)¶
| 项目 | 内容 |
|---|---|
| 漏洞编号 | 暂无统一编号 |
| 危害等级 | 暂未找到权威信息 |
| 漏洞类型 | ACL 绕过漏洞 |
| 披露时间 | 暂未找到权威信息 |
| 影响组件 | HashiCorp Consul 安全 |
本章节涵盖多个 ACL 绕过漏洞:
| 漏洞标识 | CVE 编号 | 危害等级 | CVSS 评分 | 类型 |
|---|---|---|---|---|
| ACL 绕过 #1 | CVE-2020-13223 | 中危 | 5.3 | 权限提升 |
| ACL 绕过 #2 | CVE-2021-37214 | 高危 | 7.5 | 认证绕过 |
| ACL 绕过 #3 | CVE-2022-24687 | 高危 | 8.0 | 信息泄露 |
| ACL 继承绕过 | CVE-2022-26959 | 高危 | 7.5 | 权限提升 |
核验说明:该问题未见统一 CVE 编号,本文结合原文与公开资料进行整理。
二、影响范围¶
2.1 受影响的版本¶
CVE-2020-13223: - Consul 1.4.0 - 1.4.3 - Consul 1.5.0 - 1.5.3 - Consul 1.6.0 - 1.6.1 - Consul 1.7.0
CVE-2021-37214: - Consul 1.8.0 - 1.8.14 - Consul 1.9.0 - 1.9.8 - Consul 1.10.0 - 1.10.0
CVE-2022-24687: - Consul 1.8.0 - 1.8.16 - Consul 1.9.0 - 1.9.11 - Consul 1.10.0 - 1.10.4 - Consul 1.11.0 - 1.11.0
CVE-2022-26959: - Consul 1.9.0 - 1.9.14 - Consul 1.10.0 - 1.10.7 - Consul 1.11.0 - 1.11.3
2.2 不受影响的版本¶
CVE-2020-13223: - Consul 1.4.4+ - Consul 1.5.4+ - Consul 1.6.2+ - Consul 1.7.1+
CVE-2021-37214: - Consul 1.8.15+ - Consul 1.9.9+ - Consul 1.10.1+
CVE-2022-24687: - Consul 1.8.17+ - Consul 1.9.12+ - Consul 1.10.5+ - Consul 1.11.1+
CVE-2022-26959: - Consul 1.9.15+ - Consul 1.10.8+ - Consul 1.11.4+
2.3 触发条件(如特定模块、特定配置、特定运行环境等)¶
CVE-2020-13223 - 角色继承绕过: 1. ACL 已启用 2. 使用角色继承功能 3. 攻击者拥有一个角色的有效 Token
CVE-2021-37214 - 服务发现绕过: 1. ACL 已启用 2. 使用了默认策略 "deny" 3. 攻击者能访问 Consul API
CVE-2022-24687 - 意外 Token 泄露: 1. ACL 已启用 2. 启用了审计日志 3. 非管理员查看日志
CVE-2022-26959 - 策略继承绕过: 1. ACL 已启用 2. 使用策略继承 3. 针对特定资源路径的访问
三、漏洞详情与原理解析¶
3.1 漏洞触发机制¶
CVE-2020-13223 - 角色继承绕过
当 ACL 角色继承其他角色时,权限检查逻辑存在缺陷:
// 存在漏洞的代码(简化)
func (a *ACL) CheckPermission(tokenID, resource, action string) bool {
token := a.ResolveToken(tokenID)
if token == nil {
return false
}
// 检查直接关联的策略
for _, policy := range token.Policies {
if a.checkPolicy(policy, resource, action) {
return true
}
}
// 检查角色 - 这里存在缺陷
for _, role := range token.Roles {
// 漏洞:只检查角色的直接策略,未递归检查继承的策略
for _, policy := range role.DirectPolicies {
if a.checkPolicy(policy, resource, action) {
return true
}
}
}
return false
}
攻击路径:
``` 1. 创建角色 A(有敏感权限)
3.2 源码层面的根因分析(结合源码与补丁对比)¶
暂未检索到可公开验证的源码补丁信息,无法对根因实现细节作权威复原。
四、漏洞复现(可选)¶
4.1 环境搭建¶
暂无公开可验证复现信息。
4.2 PoC 演示与测试过程¶
暂无公开可验证复现信息。
五、修复建议与缓解措施¶
5.1 官方版本升级建议¶
- 暂未找到权威信息,建议以厂商安全公告、修复提交记录或发布说明为准。
5.2 临时缓解方案(如修改配置文件、关闭相关模块、增加 WAF 规则等)¶
- 在完成版本升级前,建议将相关服务限制在可信网络边界内,并最小化暴露面。
- 对高风险接口、插件或调试功能实施临时下线、访问控制与日志监控。
六、参考信息 / 参考链接¶
6.1 官方安全通告¶
- 暂未找到可直接引用的官方安全通告,请优先关注项目安全公告、发布说明与修复分支。
6.2 其他技术参考资料¶
- 暂未补充其他公开参考链接。