hunt-metrics-exposure について
認可済みのセキュリティ評価で、監視エンドポイントからメトリクスや運用情報が漏れていないか調べるスキルです。検出、分析、検証を案内し、一般情報と実質的な漏えいを区別します。
主な機能
- 01一般的なメトリクス・ヘルスエンドポイントの検出
- 02Prometheus とヘルスデータの分析
- 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が公開されている場合 → CRITICAL(環境変数の漏えい)
次の手順
- AI モデルの使用状況メトリクス →
hunt-llm-aiに移行する(特定したモデルへのプロンプトインジェクション) - DB プールメトリクスに過負荷が示されている → 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— リクエスト数を公開するメトリクスエンドポイントは、参考情報にすぎません。PII、内部ホスト名、または認証情報を含むラベルが必要です。 - Spring Boot Actuator
/actuator/metrics— メトリクスは監視用に意図的に公開されています。機微なデータ(ラベル内のユーザー名、内部 IP アドレス)が漏えいしている場合にのみ報告してください。 - 認証のない JMX — 認証なしの JMX 公開が重大となるのは、書き込み操作(MBean の呼び出し)が可能な場合に限られます。読み取り専用の JMX は参考情報にすぎません。
- 機微なデータのないヘルスエンドポイント —
/health、/status、/readyエンドポイントは公開を前提として設計されています。内部データの漏えいが必要です。
コメント
Markdown 対応