mcpField
G
github-secret-hunting

github-secret-hunting

github.com/uphiagoセキュリティ1.3k41 回インストール8 週間前に更新
リポジトリ

github-secret-hunting について

許可されたセキュリティ評価で、公開リポジトリ内の認証情報やインフラ情報を探すGitHubシークレット調査スキルです。対象を絞った検索、自動スキャン、監視を組み合わせ、最小限の検証と不正利用の禁止を重視します。

主な機能

  1. 01GitHub検索クエリによる機密ファイルの特定
  2. 02TruffleHogによるリポジトリと組織のスキャン
  3. 03shhgitによる新たな漏えいの監視
  4. 04ファイル種別、CI/CD設定、文書メタデータの検索
  5. 05疑わしい認証情報の検証と情報記録

活用シーン

  1. 01対象組織の公開リポジトリの調査
  2. 02CI/CDファイルやビルド記録に含まれるトークンの確認
  3. 03組織で新たに公開されたシークレットの監視
  4. 04報告用の認証情報の出所とコミット情報の記録

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/uphiago/recon-skills --skill github-secret-hunting

インストール後、Claude Code で/github-secret-huntingを入力して読み込まれたか確認します。

詳細

GitHub のシークレットハンティング

公開されている GitHub リポジトリをスキャンし、漏えいした API キー、トークン、パスワード、内部インフラの詳細を探します。開発者は頻繁に誤ってシークレットを公開してしまいます。このスキルでは、対象を絞ったドーキング、自動スキャンツール、リアルタイム監視を活用し、開発者が気づいて無効化する前に認証情報を見つけます。

使用するタイミング

  • 対象が組織アカウントの下に公開リポジトリを持っている。
  • JS バンドルの分析で内部サービス名が判明し、関連する設定ファイルを GitHub で検索する必要がある。
  • クラウドサービス、決済ゲートウェイ、サードパーティ連携用の有効な API キーを見つける必要がある。
  • 対象が、ビルドログやワークフローファイルでトークンが漏えいする可能性のある CI/CD システムを使用している。
  • 対象組織から新たなシークレット漏えいがあった際に、リアルタイムで監視したい。

前提条件

  • python3、curl、git を備えた terminal。
  • GitHub Personal Access Token(必要なスコープは public_repo のみ)。
  • ツールの依存関係:TruffleHog、GitDorker、gitleaks。

クイック検出

# Basic GitHub code search for sensitive patterns in target repos
echo "target.com" | while read domain; do
  curl --max-time 30 --connect-timeout 10 -s -H "Authorization: token $GITHUB_TOKEN" \
    "https://api.github.com/search/code?q=$domain+filename:.env" \
    | jq '.items[]?.html_url'
done

手順

フェーズ 1 — GitDorker による対象を絞ったドーキング
# Clone the dork collection and run against target
git clone https://github.com/Proviesec/github-dorks
python3 GitDorker.py \
  -tf $GITHUB_TOKEN \
  -q target.com \
  -d dorks/medium_dorks.txt \
  -o gitdorker_target.txt

# Also search by employee emails found in LinkedIn or metadata
python3 GitDorker.py \
  -tf $GITHUB_TOKEN \
  -q "[email protected]" \
  -d dorks/medium_dorks.txt

# Custom dork: find env files
python3 GitDorker.py -tf $GITHUB_TOKEN \
  -q "org:target filename:.env DB_PASSWORD" -d dorks/medium_dorks.txt
フェーズ 2 — TruffleHog による詳細スキャン
# Scan a specific repo (finds secrets even in deleted commits)
trufflehog git https://github.com/target/repo --results=verified

# Scan entire GitHub org
trufflehog github --org=target --token=$GITHUB_TOKEN \
  --only-verified --threads=20 --json > trufflehog_org.json

# Docker variant
docker run --rm -it trufflesecurity/trufflehog:latest \
  github --only-verified --org=target

# Parse verified secrets
cat trufflehog_org.json | jq -r 'select(.Verified == true) | "\(.DetectorName): \(.RawV2)"'
フェーズ 3 — shhgit によるリアルタイム監視
# Monitor globally for secrets being pushed right now
shhgit --search-query \
  'path:*.env OR "DB_PASSWORD=" OR "AWS_ACCESS_KEY_ID=" OR "-----BEGIN RSA PRIVATE KEY-----"'

# Monitor specific org
shhgit --search-query \
  'target.com (path:*.env OR "DB_PASSWORD=" OR "api_key=")'
フェーズ 4 — ファイルの種類と拡張子による検索
# git-wild-hunt: find specific file types
python3 git-wild-hunt.py \
  -s "org:Target extension:json filename:creds language:JSON"
python3 git-wild-hunt.py \
  -s "org:Target extension:sql filename:backup"
python3 git-wild-hunt.py \
  -s "target.com gitlab_token"

# Manual search patterns via GitHub API
for pattern in "filename:.env DB_PASSWORD" "filename:credentials.json" \
               "filename:config.json api_key" "filename:id_rsa" \
               "filename:.npmrc" "extension:pem BEGIN RSA" \
               "filename:service-account.json"; do
  curl --max-time 30 --connect-timeout 10 -s -H "Authorization: token $GITHUB_TOKEN" \
    "https://api.github.com/search/code?q=target.com+$pattern" \
    | jq '.total_count, (.items[:3][].html_url)'
done
フェーズ 5 — ハードコードされた認証情報の検証
# Pipeline: find → extract → verify
echo "target.com" | gau | grep -E '\.js$|\.json$|\.env$|\.config$' \
  | httpx -silent -mc 200 \
  | parallel -j 10 "curl --max-time 30 --connect-timeout 10 -s {} | grep -Eo \
    '(?:api[_-]?key|secret|token)[\"'\''']?\s*[:=]\s*[\"'\''']?([A-Za-z0-9_\-]{20,})' \
    | tee -a api_keys.txt"

# Verify found keys
for key in $(cat api_keys.txt | awk -F':' '{print $2}' | tr -d '"'\'' ' | sort -u); do
  # OpenAI
  curl --max-time 30 --connect-timeout 10 -s "https://api.openai.com/v1/models" -H "Authorization: Bearer $key" | jq '.data[].id' 2>/dev/null && echo "VALID OPENAI: $key"
  # GitHub
  curl --max-time 30 --connect-timeout 10 -s "https://api.github.com/user" -H "Authorization: token $key" | jq '.login' 2>/dev/null && echo "VALID GITHUB: $key"
done
フェーズ 6 — GitLab のプライベートインスタンス
# Discover self-hosted GitLab
# Check: gitlab.target.com, git.target.com, code.target.com
curl --max-time 30 --connect-timeout 10 -sk "https://gitlab.target.com/api/v4/projects?visibility=public"

# With a found token
curl --max-time 30 --connect-timeout 10 --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
  "https://gitlab.target.com/api/v4/user"
curl --max-time 30 --connect-timeout 10 --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
  "https://gitlab.target.com/api/v4/projects?membership=true&simple=true"

# Deep scan for secrets across accessible repos
gitleaks detect \
  --source https://gitlab.target.com \
  --access-token $GITLAB_TOKEN -v
フェーズ 7 — 公開ドキュメントからのメタデータ抽出
# metafinder: downloads public documents and extracts metadata
# Reveals usernames, software versions, internal file paths, email patterns
metafinder -d "target.com" -l 10 -go -bi -ba -o metadata_target.txt
metafinder -d "dev.target.com" -l 10 -go -bi -ba -o metadata_dev.txt

# Manual: check PDF metadata
curl --max-time 30 --connect-timeout 10 -sk "https://target.com/document.pdf" -o doc.pdf
exiftool doc.pdf | grep -i "author\|creator\|producer"

注意事項

  • 検索結果の大半はドキュメントやサンプルで、実際の漏えいではありません。 .env、.config、.npmrc、CI/CD ワークフローファイルに注目してください。
  • GitHub API のレート制限は厳格です。 複数のトークンを使用するか、IP を切り替えてください。
  • 検証済みのシークレットは、すでに無効化されている場合があります。 報告する前に必ず検証してください。
  • セルフホストの GitLab インスタンスでは、外部からのスキャンがブロックされる場合があります。 まず接続をテストしてください。
  • 発見した認証情報を不正アクセスに使用しないでください。 最小限の検証にとどめ、記録して報告してください。

検証

  1. TruffleHog または GitDorker が、コンテキストとともにシークレット候補を特定していることを確認します。
  2. 最小限の API 呼び出し(例:GitHub トークンの場合は GET /user)でシークレットを検証します。
  3. シークレットが最近コミットされたものであることを確認します(コミット日を確認してください)。古いシークレットの優先度は低くなります。
  4. リポジトリが公開されているか、またシークレットが実質的なアクセス権(管理者権限か読み取り専用か)を付与するかを確認します。
  5. 報告用に、正確なファイルパス、コミットハッシュ、行番号を記録します。

関連スキル

  • js-secrets-extraction — GitHub リポジトリにつながる可能性がある、JavaScript バンドル内の API キーとエンドポイントを見つけます。
  • hardcoded-credential-hunt — HTML、JS、API レスポンス内のハードコードされたパスワードを検出します。
  • source-leak-hunt — 稼働中のウェブサーバー上で公開された設定ファイル(.env、.git)を見つけます。

コメント