mcpField
H
hunt-metrics-exposure

hunt-metrics-exposure

github.com/uphiago安全1.3k40 次安装8 周前更新
代码仓库

关于 hunt-metrics-exposure

面向授权安全评估的技能,用于检查可观测性端点是否暴露指标及敏感运行信息。它涵盖端点发现、数据分析与验证,并区分一般信息和实质性泄露。

主要功能

  1. 01发现常见指标与健康检查端点
  2. 02分析 Prometheus 和健康数据
  3. 03识别模型、数据库及依赖信息
  4. 04验证暴露情况并评估敏感性
  5. 05记录误报与测试注意事项

适用场景

  1. 01在授权测试中评估公开的可观测性端点
  2. 02检查指标是否暴露内部服务或用量
  3. 03评估暴露的 Actuator 数据是否敏感

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/uphiago/recon-skills --skill hunt-metrics-exposure

安装后在 Claude Code 中输入/hunt-metrics-exposure确认已加载。

详细介绍

适用场景

目标使用现代可观测性工具(Go、.NET、Java、Node.js)。这些框架通常会提供 /metrics、/health 和 /status 端点,但这些端点可能被遗忘,未纳入身份验证保护。与应用数据泄露不同,指标泄露会暴露整个运行状况:使用了哪些 AI 模型、活跃用户数量、数据库连接耗尽情况,以及对第三方服务的依赖。


阶段 1 — 发现指标端点

TARGET="https://target.com"

# Common observability paths
for ep in metrics health status ready live readyz healthz \
  actuator/health actuator/metrics actuator/prometheus \
  Telescope telescope horizon debug; do
  code=$(curl --max-time 30 --connect-timeout 10 -sk -o /tmp/metrics_${ep}.txt -w "%{http_code}" \
    "${TARGET}/${ep}" 2>/dev/null)
  if [ "$code" = "200" ]; then
    size=$(wc -c < /tmp/metrics_${ep}.txt)
    echo "  /${ep}: HTTP 200 (${size} bytes)"
  fi
done

阶段 2 — 分析 Prometheus 指标

# Count unique metric families (each reveals a subsystem)
grep -c '^# HELP' /tmp/metrics_metrics.txt

# Extract AI/ML model usage
grep -i 'ai_\|model\|llm\|openai\|gemini\|copilot' /tmp/metrics_metrics.txt

# Extract database pool states
grep -i 'db_pool\|database\|connection' /tmp/metrics_metrics.txt

# Extract third-party dependencies
grep -i 'stripe\|openai\|sendgrid\|twilio\|email' /tmp/metrics_metrics.txt

# Extract request volumes (user activity)
grep -i 'http_request\|api_request\|grpc_request' /tmp/metrics_metrics.txt

# Extract circuit breaker states (service health)
grep -i 'circuit_breaker' /tmp/metrics_metrics.txt

阶段 3 — 分析健康状态端点

# Spring Boot Actuator
curl --max-time 30 --connect-timeout 10 -sk "${TARGET}/actuator/health" | python3 -m json.tool
curl --max-time 30 --connect-timeout 10 -sk "${TARGET}/actuator/metrics" | python3 -m json.tool
curl --max-time 30 --connect-timeout 10 -sk "${TARGET}/actuator/env" | python3 -m json.tool  # May leak env vars

# Custom health endpoints
curl --max-time 30 --connect-timeout 10 -sk "${TARGET}/health" | python3 -m json.tool
curl --max-time 30 --connect-timeout 10 -sk "${TARGET}/api/health" | python3 -m json.tool

# Laravel Telescope (if exposed)
curl --max-time 30 --connect-timeout 10 -sk "${TARGET}/telescope/requests" | head -c 500

指标透露的信息

指标获取的情报
ai_analyzer_output_total{model="gpt-5-mini"}使用了哪些 AI 模型、使用量
db_pool_idle_connections{pool="api"}数据库连接池大小、连接耗尽风险
circuit_breaker_state{client="stripe"}第三方依赖及其运行状况
clinical_copilot_sse_active特定功能的实时用户数量
http_requests_total请求量、高峰时段、用户活动
app_version / build_info部署版本、构建时间戳

验证

  • 确认暴露:/metrics 返回 Prometheus 文本格式(以 # HELP 或 # TYPE 开头的行)
  • Actuator 暴露:/actuator/health 返回包含组件状态的 JSON
  • 误报:端点仅返回 {"status":"ok"}(最简健康检查,不属于指标泄露)
  • 提升严重性:如果暴露了 /actuator/env 或 /actuator/configprops → 严重(环境变量泄露)

后续步骤

  • AI 模型使用指标 → 转向 hunt-llm-ai(针对发现的模型进行提示词注入)
  • 显示过载的数据库连接池指标 → 已识别出 DoS 攻击面
  • Stripe/电子邮件的熔断器状态 → 用于链式攻击的基础设施依赖关系图
  • 与 hunt-schema-enumeration 结合,获取完整的目标画像

验证

运行此自测,确认已准备好搜寻指标暴露:

  1. 技能完整性 — 确认技能文件可读且格式正确:

    grep -q "name: hunt-metrics-exposure" SKILL.md && echo "PASS: skill frontmatter present" || echo "FAIL"
    grep -q "revision_date:" SKILL.md && echo "PASS: revision date present" || echo "FAIL"
    
  2. 类别检查 — 确认技能具有类别:

    grep -q "category:" SKILL.md && echo "PASS: category present" || echo "FAIL"
    
  3. 陷阱部分 — 确认已记录常见陷阱:

    grep -q "^## Pitfalls" SKILL.md && echo "PASS: pitfalls section present" || echo "FAIL"
    

全部 3 项测试用于验证技能结构正确且已准备就绪。


常见陷阱

  • 不含机密的 Prometheus /metrics — 暴露请求计数的指标端点仅提供参考信息。需要检查标签中是否包含个人身份信息、内部主机名或凭据。
  • Spring Boot Actuator /actuator/metrics — 指标是有意暴露的,用于监控。只有泄露敏感数据(标签中的用户名、内部 IP)时才报告。
  • 未启用身份验证的 JMX — 只有在可能执行写操作(调用 MBean)时,未启用身份验证的 JMX 暴露才属于严重问题。只读 JMX 仅提供参考信息。
  • 不含敏感数据的健康端点 — /health、/status、/ready 端点旨在公开访问。需要确认是否泄露内部数据。

评论

支持 Markdown