关于 hunt-metrics-exposure
面向授权安全评估的技能,用于检查可观测性端点是否暴露指标及敏感运行信息。它涵盖端点发现、数据分析与验证,并区分一般信息和实质性泄露。
主要功能
- 01发现常见指标与健康检查端点
- 02分析 Prometheus 和健康数据
- 03识别模型、数据库及依赖信息
- 04验证暴露情况并评估敏感性
- 05记录误报与测试注意事项
适用场景
- 01在授权测试中评估公开的可观测性端点
- 02检查指标是否暴露内部服务或用量
- 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结合,获取完整的目标画像
验证
运行此自测,确认已准备好搜寻指标暴露:
-
技能完整性 — 确认技能文件可读且格式正确:
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" -
类别检查 — 确认技能具有类别:
grep -q "category:" SKILL.md && echo "PASS: category present" || echo "FAIL" -
陷阱部分 — 确认已记录常见陷阱:
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