authenticated-session-acquisition について
MFAによって自動テストが止まる場合に、正規の認証済みセッションを取得するセキュリティテスト用スキルです。ログイン後のテスト向けにブラウザー状態とトークンをファイルへ出力し、シークレットをプロンプトから分離します。
主な機能
- 01TOTP、手動OTP入力、一時停止後の再開
- 02Auth0、Okta、Cognito、Descopeの手順
- 03Playwright状態とBearerトークンの出力
- 04認証済みリクエストによるアクセス確認
- 05アクセス不能時のテスト延期を記録
活用シーン
- 01許可されたログイン後のAPIテスト用セッション準備
- 02オペレーターのOTP入力後にログインを再開
- 03延期が必要な認証後テストの記録
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ transilienceai/ communitytools --skill authenticated-session-acquisitionインストール後、Claude Code で/authenticated-session-acquisitionを入力して読み込まれたか確認します。
同梱ファイルreference/session-acquisition.md
詳細
認証済みセッションの取得
金融系およびマルチテナントの対象では、ログインに SMS OTP/TOTP MFA が要求されるため、自律実行では対応できません。その結果、認証後の領域(実データ API に対する BOLA/IDOR/一括割り当て/インジェクション、セッション管理、API のピボット)がひそかに認証前の調査結果だけに縮小されます。このスキルの目的は限定的かつ具体的です。**正当な認証済みセッションを 1 つ取得し、再利用可能な成果物として実行担当に渡します。**認証の仕組み自体を攻撃するものではありません。その場合は authentication を参照してください。
成果物の仕様(セッションを実行担当に渡す方法)
エンゲージメントの OUTPUT_DIR に両方を出力し、名前で参照します(シークレットを直接記載しないでください。詳細は credential-loading.md を参照してください)。
OUTPUT_DIR/<asset>/session/storageState.json— ブラウザーを使った認証後テスト用の Playwright ストレージ状態(Cookie + localStorage)。OUTPUT_DIR/<asset>/session/bearer.txt— 直接 API を再実行するための生のアクセス/ID トークン(expires_atも含む)。
実行担当は、環境変数から読み込むシークレットと同じようにこれらを使用します。スコープファイルの creds_env でレルムを指定し、セッションのパスはファイル参照として渡すため、トークンがプロンプト、experiments.md、attack-chain.md に書き込まれることはありません。トークンの有効期限が切れたら、このスキルを再実行してください(expires_at を記録し、リフレッシュトークンがある場合は再ログインではなく更新してください)。
モード(クライアントが提供できる情報に応じて選択)
| モード | 使用する状況 | 方法 |
|---|---|---|
| シードからの TOTP | クライアントがテストアカウントの TOTP シークレット(Base32 シード)を共有した場合 | tools/totp_now.py <BASE32_SEED> で現在のコードを決定論的に生成し、ログインフローで送信します。完全に自動化でき、繰り返し実行できます。 |
| 明示的な OTP | 実行時にオペレーターがワンタイムコード(SMS/メール/認証アプリ)を確認できる場合 | ログインを OTP の入力画面まで進め、オペレーターからコードを一度受け取って続行します。 |
| ヒューマン・イン・ザ・ループでの再開 | OTP が別経路で届き、実行を一時停止する必要がある場合 | OTP 入力前のブラウザーコンテキストを保存して一時停止します。オペレーターがチャレンジを完了した後、再開して storageState を取得します。 |
プロバイダー別の手順
IdP ごとの詳細なフローは reference/session-acquisition.md に記載されています。対象は Auth0、Okta、Amazon Cognito(SRP 認証 + UNSIGNED 未認証ポスチャチェック)、Descope です。各手順では最後に、上記の仕様に沿って storageState.json + bearer.txt をエクスポートします。
セッションを取得できない場合 — 正直に保留し、捏造しない
テストアカウントや OTP シードがなく、OTP を中継できない場合、そのレルムの認証後の領域はテスターに落ち度がなく、テストできません。捏造した NA や、見落としたままにするのではなく、正直に記録してください。
reports/client-input-requests/CIR-NNN.mdにクライアント入力リクエストを作成し、必要なものを具体的に記載します(「<realm>用のテストアカウント/OTP シード/許可リストが必要」)。attack-chain.mdにレルム単位のBLOCKED_REASONを設定します。coverage-matrix.mdを参照し、そのレルムの認証後のカバレッジ項目をstatus:"deferred"に設定します。各項目にはdeferral_reason+client_input_request(CIR のパス)を含めます。これにより、決定論的ゲートは保留された領域をレポートで開示し、裏付けのある保留としてエンゲージメントを確定できるのは親オーケストレーター(coverage_gate.py --accept-deferralsを使用)のみとなります。スコープ全体が認証によってブロックされている場合、エンゲージメントを完了することはできません。
この処理を開始するのは、事前チェックの認証情報到達性プローブ(preflight-checklist.md、Phase-1 ゲート)です。認証情報が存在することと、使えることは同じではありません。認証後の実行担当を起動する前に、レルムごとに到達性を確認してください。
ワークフロー
- スコープを確認します。
creds_envに含まれるレルム/テナント、それらの背後にあるアセット、テストテナントのroe.reversible_writesを確認します。 - IdP を特定します(ログインリダイレクト先のホスト/
/.well-known/openid-configuration/SDK バンドル)→ 適切なレシピを選びます。 - 適切なモードでセッションを取得します →
storageState.jsonとbearer.txtに書き出します。 - 確認します。最小限の認証済みリクエストで、認可された応答が返ることを確認します(401/403/ログインへのリダイレクトではないこと)。
- アーティファクトのパスを認証後の実行バッチに渡します。失敗した場合は、上記の延期手順を実行します。
アンチパターン
- トークン、シード、Cookie をプロンプト、
experiments.md、attack-chain.md、またはtools/*.mdに貼り付けないでください。アーティファクトファイルのパスのみを参照してください。 - ここで OTP/MFA チャレンジを総当たりしたり回避したりしないでください。これはセッション取得ではなく、
authenticationの検出事項です。 - MFA によってブロックされたセルを
covered/NAとしてマークしないでください。deferredとマークし、CIR を提出して、ゲートで開示されるようにしてください。 - 指定された認証済みテナントの範囲外でテストを行わず、
roe.reversible_writesを遵守してください(作成後の削除は、自分のテストテナント内でのみ行ってください)。
参考資料
reference/session-acquisition.md— IdP ごとの取得レシピ(Auth0/Okta/Cognito/Descope)と storageState/Bearer のエクスポート。tools/totp_now.py— 標準ライブラリを使った RFC-6238 TOTP 生成ツール(TOTP-from-seed モード)。