Описание
Filament: Password validity disclosure for accounts denied panel access on login page
When multi-factor authentication is enabled, the login page presents the multi-factor challenge before evaluating canAccessPanel(). For an account that canAccessPanel() denies, submitting the correct password renders the challenge while an incorrect password returns the generic failure message, allowing an unauthenticated attacker to confirm that a password is valid for that account. When email-based multi-factor authentication is used, a login code is also sent to the account holder.
This issue only applies to accounts that both have multi-factor authentication enabled and are denied by canAccessPanel(). Authentication is not bypassed as the check still runs after the challenge, and no session is created.
Ссылки
- https://github.com/filamentphp/filament/security/advisories/GHSA-xwpv-pqxp-5v36
- https://github.com/filamentphp/filament/pull/20308
- https://github.com/filamentphp/filament/commit/ad5aacbc6d089b3dd7243ec1c1f8ab19dff7c3a1
- https://github.com/filamentphp/filament/releases/tag/v4.12.5
- https://github.com/filamentphp/filament/releases/tag/v5.7.5
Пакеты
filament/filament
>= 4.0.0, < 4.12.5
4.12.5
filament/filament
>= 5.0.0, < 5.7.5
5.7.5
Связанные уязвимости
Filament is a collection of full-stack components for accelerated Laravel development. From 4.0.0 until 4.12.5 and 5.7.5, packages/panels/src/Auth/Pages/Login.php presents the multi-factor authentication challenge before evaluating canAccessPanel(). For an account that canAccessPanel() denies, submitting the correct password renders the MFA challenge while an incorrect password returns the generic authentication failure, allowing an unauthenticated attacker to confirm whether a candidate password is valid for that account. When email-based MFA is configured, the correct-password path also sends a login code to the account holder. The issue applies only to accounts that have MFA enabled and are denied panel access. Authentication is not bypassed because canAccessPanel() still runs after the challenge, and no session is created. This issue is fixed in versions 4.12.5 and 5.7.5.