このリポジトリには、NativeAuthenticationStrategy.authenticate() メソッドに影響を与えるタイミング攻撃を実証する Proof of Concept が含まれています。
この PoC は、ブログ / 研究目的の技術デモンストレーションとして提供されています。
認証ロジックは、ユーザーが存在しない場合は即座に戻り、ユーザーが存在する場合はコストのかかるパスワードハッシュ検証を実行します。
const user = await this.userService.getUserByEmailAddress(ctx, data.username);
if (!user) {
return false;
}
const passwordMatch = await this.verifyUserPassword(ctx, user.id, data.password);
これにより、既存ユーザーと非既存ユーザーに対する認証試行の間に測定可能なタイミング差が生じます。
複数のリクエストにわたって応答時間を測定することで、攻撃者はユーザー名(メールアドレス)が存在するかどうかを確実に判定できます。
この PoC は、ユーザー名ごとに複数の認証試行を実行し、平均応答時間を計算してアカウントを以下のように分類します:
python3 exploit.py -u http://target.tld -w users.txt
このツールは、脆弱なエンドポイントを自動的に追加します:
/admin-api?languageCode=en
-u, --url ターゲットのベース URL
-w, --wordlist ユーザー名 / メールのワードリスト
--silent サイレントモード(進捗 + 有効なユーザーのみ)
--shuffle テスト前にワードリストをシャッフル
--delay MIN:MAX リクエスト間のランダムな遅延(ms)
--resume state.json 以前のスキャンを再開
--json results.json 結果を JSON にエクスポート
--delay を使用すると、検出やレート制限の回避に役立ちます。この Proof of Concept は、許可されたセキュリティテストおよび教育目的のみで提供されています。 著者は、誤用に対して一切の責任を負いません。