mcpField
E
exploiting-broken-link-hijacking

exploiting-broken-link-hijacking

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

exploiting-broken-link-hijacking について

認可済みのセキュリティ監査向けスキルです。ウェブサイトが参照する期限切れ・未取得の外部リソースを見つけ、リンク乗っ取りやサブドメイン乗っ取りのリスクを評価します。影響分析と報告も扱います。

主な機能

  1. 01外部参照のクロールと整理
  2. 02期限切れ・取得可能なリソースの確認
  3. 03サブドメイン乗っ取り可能性の評価
  4. 04影響分析とレポート作成

活用シーン

  1. 01ウェブサイトのサードパーティ参照の監査
  2. 02CDN とクラウドサービス依存関係の確認
  3. 03認可済みテストでのサブドメイン乗っ取り評価
  4. 04リンク乗っ取りの調査結果の記録

インストール

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

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill exploiting-broken-link-hijacking

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
references/
api-reference.md
scripts/
agent.py

詳細

侵害されたリンクの乗っ取り

使用する場面

  • 期限切れまたは未登録の外部リソースへの参照がないか、ウェブアプリケーションを監査するとき
  • サードパーティ製スクリプトおよびリソース依存関係のサプライチェーンセキュリティ評価を行うとき
  • 孤立した CNAME レコードを利用したサブドメイン乗っ取りの可能性をテストするとき
  • バグバウンティで、侵害されたリンクの乗っ取りの脆弱性を探すとき
  • 本番アプリケーションにおける外部リソース依存関係のセキュリティを評価するとき

前提条件

  • すべての外部リンクを検出するウェブクローラーまたはスパイダー(Burp Suite Spider、Scrapy)
  • CNAME レコードとドメインの取得可能性を確認する DNS ルックアップツール
  • 期限切れドメインを取得するためのドメインレジストラへのアクセス(概念実証用)
  • CDN およびクラウドサービスのプロビジョニングに関する知識(S3、Azure Blob、GitHub Pages)
  • blc (broken-link-checker) または同様の自動リンク検証ツール
  • サブドメイン乗っ取りに対して脆弱なサービスに関する知識(can-i-take-over-xyz)

法的通知: このスキルは、許可を得たセキュリティテストおよび教育目的に限り使用してください。所有していないシステム、またはテストの書面による許可を得ていないシステムに対する無許可の使用は違法であり、コンピューター詐欺に関する法律に違反する可能性があります。

ワークフロー

ステップ 1 — すべての外部参照をクロールして抽出する
# Use broken-link-checker to find dead links
npx broken-link-checker http://target.com --recursive --ordered \
  --exclude-internal --filter-level 3 -o broken_links.txt

# Extract all external links from page source
curl -s http://target.com | grep -oP 'https?://[^"'"'"'\s>]+' | sort -u > all_links.txt

# Extract JavaScript sources
curl -s http://target.com | grep -oP 'src="[^"]*"' | grep -v target.com > external_scripts.txt

# Extract CSS references
curl -s http://target.com | grep -oP 'href="[^"]*\.css"' | grep -v target.com > external_css.txt

# Use wayback machine for historical external references
curl -s "https://web.archive.org/web/timemap/link/http://target.com" | \
  grep -oP 'https?://[^>]+' | sort -u > historical_links.txt

# Spider with Burp Suite
# Configure Spider scope to include target.com
# Review Site Map > Filter by "External" to list all external references
ステップ 2 — 無効または取得可能なリソースを特定する
# Check if external domains are registered
for domain in $(cat external_domains.txt); do
  whois $domain 2>/dev/null | grep -qi "no match\|not found\|available" && \
    echo "[CLAIMABLE] $domain"
done

# Check HTTP status of external links
while read url; do
  status=$(curl -o /dev/null -s -w "%{http_code}" "$url" --max-time 5)
  if [ "$status" = "000" ] || [ "$status" = "404" ]; then
    echo "[DEAD] $url (Status: $status)"
  fi
done < all_links.txt

# Check for dangling CNAME records
for sub in $(cat subdomains.txt); do
  cname=$(dig +short CNAME $sub)
  if [ -n "$cname" ]; then
    resolved=$(dig +short $cname)
    if [ -z "$resolved" ]; then
      echo "[DANGLING] $sub -> $cname (UNRESOLVED)"
    fi
  fi
done

# Check cloud resource availability
# AWS S3 bucket
aws s3 ls s3://target-assets 2>&1 | grep -q "NoSuchBucket" && echo "[CLAIMABLE] S3: target-assets"
ステップ 3 — サービス固有の乗っ取りの可能性を確認する
# Check GitHub Pages takeover
# If CNAME points to <user>.github.io and 404 is returned
curl -s https://subdomain.target.com | grep -q "There isn't a GitHub Pages site here"

# Check AWS S3 takeover
curl -s http://subdomain.target.com | grep -q "NoSuchBucket"

# Check Azure Blob Storage
curl -s http://subdomain.target.com | grep -q "The specified container does not exist"

# Check Heroku
curl -s http://subdomain.target.com | grep -q "No such app"

# Check Shopify
curl -s http://subdomain.target.com | grep -q "Sorry, this shop is currently unavailable"

# Use subjack for automated takeover detection
subjack -w subdomains.txt -c fingerprints.json -t 100 -o takeover_candidates.txt

# Use nuclei takeover templates
subfinder -d target.com -silent | nuclei -t http/takeovers/ -o takeovers.txt
ステップ 4 — 外部スクリプトの乗っ取りを検証する
# Check if external JavaScript domains are available for registration
curl -s http://target.com | grep -oP 'src="https?://([^/"]+)' | \
  cut -d'/' -f3 | sort -u | while read domain; do
    whois "$domain" 2>/dev/null | grep -qi "no match\|available" && \
      echo "[HIJACKABLE SCRIPT] $domain loaded by target.com"
  done

# Check npm/CDN package references
curl -s http://target.com | grep -oP 'unpkg\.com/[^@/]+' | sort -u
curl -s http://target.com | grep -oP 'cdn\.jsdelivr\.net/npm/[^@/]+' | sort -u

# Verify if referenced packages still exist
# Check npm registry for deprecated or removed packages
ステップ 5 — 侵害されたリンクを悪用する(許可を得たテストのみ)
# For expired domain: Register the domain
# For S3 bucket: Create bucket with same name in same region
aws s3 mb s3://target-expired-bucket --region us-east-1

# For GitHub Pages: Create repository with matching name
# Create <org>.github.io repository with proof-of-concept content

# For unclaimed social media: Claim the handle
# Document the takeover with benign proof-of-concept content

# Serve proof-of-concept content
echo "<html><body><h1>Broken Link Hijacking PoC - [Your Name]</h1></body></html>" > index.html
# Upload to claimed resource
ステップ 6 — 影響を評価して報告する
# Determine impact based on resource type:
# - External JavaScript: Full XSS on all pages loading the script
# - External CSS: UI defacement, data exfiltration via CSS injection
# - External image/resource: Phishing, tracking
# - CNAME subdomain: Cookie theft, phishing, OAuth bypass

# Check if hijacked resource serves cookies for parent domain
# Check if hijacked subdomain is in OAuth redirect whitelist
# Verify if hijacked domain receives sensitive Referer headers

主な概念

概念説明
侵害されたリンクの乗っ取り対象のウェブサイトから参照されている外部リソースの制御権を取得すること
孤立した CNAME未登録または廃止されたサービスを指す DNS CNAME レコード
サブドメイン乗っ取りCNAME が指すサービスをプロビジョニングしてサブドメインを取得すること
外部スクリプトの乗っ取り対象が読み込む JavaScript を配信する期限切れドメインを登録すること
サプライチェーン攻撃外部依存関係を侵害し、悪意のあるコンテンツを挿入すること
デッドリンク404 または DNS 解決エラーを返す URL 参照
リソースフィンガープリンティングエラーメッセージやヘッダーから特定のクラウドサービスを識別すること

ツールとシステム

ツール用途
broken-link-checkerウェブクローリングによるリンク切れの自動検出
subjackサブドメイン乗っ取り検出ツール
nucleiテンプレートベースの乗っ取り検出スキャナー
can-i-take-over-xyz乗っ取りに対して脆弱なサービスのコミュニティデータベース
BadDNSドメインおよびサブドメインの乗っ取りを検出する DNS 監査ツール
Wayback Machine過去の外部参照を見つけるための URL 履歴分析

よくあるシナリオ

  1. JavaScript サプライチェーン — 対象が読み込む JavaScript を配信する期限切れドメインを登録し、すべての訪問者に影響する悪意のあるコードを挿入する
  2. S3 バケットの乗っ取り — 対象が参照する削除済み AWS S3 バケットを取得し、悪意のあるコンテンツを配信する、またはアップロードされたデータを盗む
  3. GitHub Pages の乗っ取り — 孤立した CNAME に一致する GitHub Pages リポジトリを作成し、対象のサブドメインでフィッシングページを配信する
  4. ソーシャルメディアでのなりすまし — 対象のウェブサイトからリンクされている未取得のソーシャルメディアアカウント名を取得し、ブランドになりすます
  5. CDN パッケージの乗っ取り — CDN URL 経由で参照されている非推奨の npm パッケージを取得し、悪意のある JavaScript を挿入する

出力形式

## Broken Link Hijacking Report
- **Target**: http://target.com
- **Total External Links**: 145
- **Dead Links**: 12
- **Hijackable Resources**: 3

### Findings
| # | Resource | Type | Status | Impact |
|---|----------|------|--------|--------|
| 1 | analytics.expired-domain.com | JavaScript | Domain available | Full XSS |
| 2 | assets.target.com -> S3 bucket | Static assets | Bucket deleted | Content injection |
| 3 | blog.target.com -> GitHub Pages | Subdomain | No GitHub repo | Subdomain takeover |

### Remediation
- Remove references to decommissioned external resources
- Delete dangling CNAME records for unused subdomains
- Implement Subresource Integrity (SRI) for external scripts
- Regularly audit external dependencies for availability
- Use Content Security Policy to restrict allowed script sources

コメント