内网评估60 条

Consul 暴露检查

Consul 的 HTTP API 与服务目录未加防护时可被读取甚至改配置:核查端口可达性与 ACL 启用情况。

Consul 暴露检查是什么

Consul 是服务发现与配置中心,HTTP API(默认 8500)、DNS 接口与 Web UI 往往同时监听。若 ACL 未启用或策略过宽,未授权者可以直接读取服务目录、健康状态甚至注册信息,等于拿到一份内网拓扑。检查方式是只读探测:确认接口可达性与 ACL 生效情况,不修改任何配置。

基本信息

核查对象HTTP API 可达性、ACL 启用情况、Web UI 暴露面
常见端口8500 HTTP / 8501 HTTPS / 8600 DNS
风险信号匿名即可读取服务目录或集群信息
修复方向启用 ACL、收敛监听地址、限制 UI 访问
处置纪律只读检查,不注册或修改任何服务

典型使用场景

  • 内网评估:确认配置中心是否对非授权来源开放
  • 微服务架构梳理:服务目录泄露时的暴露面评估
  • 上线前检查:新环境是否沿用默认监听 0.0.0.0
  • 修复验证:ACL 启用后复测匿名请求是否被拒
  • 旁路核查:确认 DNS 接口与 UI 的暴露面是否被一并收敛

只读检查示例

只读检查示例
curl -s --max-time 3 http://10.0.30.7:8500/v1/status/leader   # 集群主节点
curl -s --max-time 3 http://10.0.30.7:8500/v1/catalog/services | head  # 服务目录
curl -s --max-time 3 http://10.0.30.7:8500/v1/agent/self | head   # 节点信息
curl -s --max-time 3 http://10.0.30.7:8500/ui/ -o /dev/null -w "%{http_code}\n"  # UI
dig @10.0.30.7 -p 8600 consul.service.consul SRV +short  # DNS 接口
# 记录可读性结论即可,不修改任何配置、不注册服务

接口与暴露含义

接口典型路径泄露内容
集群状态/v1/status/leader主节点地址与集群规模
服务目录/v1/catalog/services全部服务名与节点清单
节点信息/v1/agent/self配置摘要与版本信息
Web UI/ui/可视化拓扑,读取更直观
DNS 接口8600 端口查询服务名与地址解析
服务目录泄露可辅助攻击面梳理:定级按信息价值与可达范围判断——仅暴露服务名通常为中危,可读取节点地址与配置摘要时整体风险更高。
任何写操作都不要做:注册测试服务、修改 KV 配置都会改变集群状态,可能触发服务上下线;检查以读取接口返回为终点。
若客户启用了 ACL,匿名请求应返回权限不足;此时记录请求被拒的具体响应,作为加固生效的证据,而不必再尝试其他接口路径。

易错点

  • 修改服务注册验证影响:直接破坏集群状态,可能引发业务故障;只做读取验证
  • 忽略 DNS 接口与 UI 的独立暴露:只收敛 HTTP API 仍有侧门;三个入口一并核查
  • 仅验证端口可达就下结论:可达不等于未授权可读;实际请求接口看返回内容
  • 修复建议只写启用 ACL:未说明策略与监听地址调整;给出监听收敛与 Token 分发的具体动作

数据来源与参考

  • HashiCorp Consul 官方文档(ACL)
  • CIS Benchmarks(通用服务)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌