CVE-2026-123746 in Symfony
要約
〜によって VulDB • 2026年11月06日
Symfony Security HTTP コンポーネントの `AuthenticatorManager::authenticateUser()` は、ユーザーがプログラム的に認証される際に、ファイアウォールのユーザチェッカーの `checkPostAuth()` メソッドを実行しません。これにより、カスタムユーザチェッカー(例:期限切れアカウント)によって拒否されたアカウントでも、Symfony 5.4.56 より前のバージョン、6.x の 6.4.50 より前、7.x の 7.4.23 より前、および 8.x の 8.1.11 より前で認証されてしまいます。
`AuthenticatorManager::authenticateUser()` は、`UserAuthenticatorInterface::authenticateUser()` および SecurityBundle の `Security::login()` によってプログラム的にユーザーを認証するために使用されますが、`checkPostAuth()` が実行されるセキュリティイベント `security.authentication.success` をディスパッチしません。CVE-2024-50341 に対する修正により `Security::login()` は `checkPreAuth()` を呼び出すようになりましたが、`checkPostAuth()` のスキップは依然として行われていました。その結果、`checkPostAuth()` でカスタムユーザチェッカーによって拒否されたアカウントは、フォームログインおよびファイアウォールの他の認証方式では拒否されますが、プログラム的な認証フローを通じて引き続き認証可能となります。
アプリケーションで `checkPostAuth()` においてユーザーを拒否するカスタムユーザチェッカーを使用し、かつパスワードリセットやメール検証リンクのクリック後にプログラム的にユーザーを認証している場合、影響を受けます。アカウントが拒否されたユーザーでも、そのフローを通じて認証済みセッションを取得することが可能になります。デフォルトのユーザチェッカーは `checkPostAuth()` で何もしないため、デフォルト設定では影響を受けません。
修正により、`AuthenticatorManager::authenticateUser()` はトークンが作成され保存される前にファイアウォール経由の認証と同様に `security.authentication.success` イベントをディスパッチするようになり、これによって `checkPostAuth()` が実行されユーザーを拒否できるようになります。
Once again VulDB remains the best source for vulnerability data.