Sep 2, 2026·6 min read·3 visits
Filament leaked credential validity by triggering MFA flows before verifying user authorization checks.
An authentication oracle vulnerability exists in Filament before 4.12.5 and 5.7.5. The application initiates MFA challenge workflows prior to verifying user authorization policies, allowing unauthenticated attackers to validate guessed credentials.
Filament is an open-source administration panel and form builder built for the Laravel framework. It provides developers with pre-built components for authentication, user management, and data presentation. This vulnerability affects the core authentication component of the framework, specifically the administrative login interface.
An observable response discrepancy exists within the multi-factor authentication (MFA) workflow. When a user attempts to log in, the application validates the primary credentials first. If the credentials are valid, the application immediately processes the next phase, which involves preparing the multi-factor authentication challenge.
This behavior exposes a functional side channel where an unauthenticated remote attacker can distinguish between correct and incorrect passwords for restricted accounts. The issue stems from the execution order of verification procedures, where authorization boundaries are evaluated too late in the login cycle. This flaw is classified under CWE-204: Observable Response Discrepancy.
The root cause of this vulnerability lies in the sequence of operations inside the authenticate method within the Login page component. In the vulnerable version of the codebase, primary credential verification is completed first. Once the credentials match, the application checks whether the authenticated user has configured multi-factor authentication.
If multi-factor authentication is configured, the system immediately updates the session state to reflect that the user is undergoing MFA. It then triggers the delivery of the second-factor token, such as sending an email containing a One-Time Password (OTP) or preparing the Time-based One-Time Password (TOTP) prompt. Crucially, this setup occurs before the framework evaluates the user-defined authorization policies.
The framework checks the canAccessPanel() method only after the multi-factor validation completes, or alternatively as a filter closure inside the database attempt logic for non-MFA users. Consequently, a user account that is explicitly blocked from accessing the administrative panel still triggers an MFA response if the password is correct. If the password is incorrect, the login handler returns a standard validation exception immediately, creating a clear behavioral difference.
The following diagram illustrates the vulnerable login flow where the MFA step executes prior to the panel access check:
To examine the flaw in the source code, look at packages/panels/src/Auth/Pages/Login.php. In the original implementation, the system attempted validation and immediately dispatched the MFA challenge without confirming whether the user had administrative rights:
// Vulnerable Flow
if ($this->isUserUndertakingMultiFactorAuthentication()) {
// MFA flow is initialized and user is redirected to the challenge screen
return null;
}
if (! $authGuard->attemptWhen($credentials, function (Authenticatable $user): bool {
return $user->canAccessPanel(Filament::getCurrentOrDefaultPanel());
}, $remember)) {
$this->fireFailedEvent($authGuard, $user, $credentials);
$this->throwFailureValidationException();
}The patch refactors this logic by introducing a helper function isUserAllowedToAccessPanel($user). It evaluates this policy before any MFA transitions occur, and encapsulates the operation within a timebox wrapper to prevent timing attacks:
// Patched Flow in ad5aacbc6d089b3dd7243ec1c1f8ab19dff7c3a1
if (! $this->isUserAllowedToAccessPanel($user)) {
$this->userUndertakingMultiFactorAuthentication = null;
$this->fireFailedEvent($authGuard, $user, $credentials);
$this->throwFailureValidationException();
}
$timebox->returnEarly();
return $user;This modification guarantees that unauthorized accounts fail with a generic exception at the exact same phase, neutralizing the observable behavior discrepancy.
Exploitation of this vulnerability requires an attacker to target an account that has multi-factor authentication enabled but is restricted from accessing the specific administration panel. The attacker does not need any privileged access to the target application. The vulnerability can be exploited by monitoring the application behavior during credential submission.
An attacker sends a POST request containing the target's email address and a guessed password to the login route. If the password is correct, the application responds with a redirect or a JSON payload prompting for the MFA token. Alternatively, if email MFA is enabled, the system dispatches an OTP email to the victim, which is a visible external indicator.
If the guessed password is incorrect, the application returns a standard HTTP 422 validation error stating that the credentials do not match. By comparing these outcomes, the attacker can systematically verify passwords. Although the attacker is still barred from entering the panel without the MFA token, they successfully confirm password validity, which facilitates targeted credential stuffing campaigns.
The primary impact of this vulnerability is the loss of confidentiality regarding credential validity. An attacker can use this behavior to perform efficient offline or online brute-force attacks against target accounts. This reduces the efficacy of defensive measures designed to obscure account existence or valid passwords.
A secondary impact is the potential for resource exhaustion and user harassment. Because the application triggers outbound MFA verification emails before enforcing access restrictions, attackers can spam targeted users with unsolicited OTP codes. This behavior can lead to email sender reputation degradation or exhaustion of third-party mailing API limits.
The Common Vulnerability Scoring System (CVSS) evaluates this flaw at a base score of 3.7. The complexity of exploitation is rated high because the target account must have both MFA active and be restricted from the specific administrative panel. This issue has not been observed in active exploitation in the wild according to security monitoring databases.
The most effective remediation is upgrading the Filament framework to the patched releases. The development team has resolved the issue in versions 4.12.5 and 5.7.5. Administrators must update their project dependencies using the PHP composer utility.
# Upgrade the package to the latest secure release
composer update filament/filamentIf upgrading is not immediately possible, temporary workarounds can help mitigate the risk. Security teams can configure rate limiting on the /admin/login route to throttle brute-force attempts. This limits the speed at which an attacker can leverage the oracle.
Additionally, implementing monitoring for anomalous volumes of VerifyEmailAuthentication notifications can help detect active exploitation attempts. Security teams should audit user roles regularly to ensure that accounts with MFA enabled are cleanly separated from panels they are not authorized to access.
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N| Product | Affected Versions | Fixed Version |
|---|---|---|
Filament filamentphp | >= 4.0.0, < 4.12.5 | 4.12.5 |
Filament filamentphp | >= 5.0.0, < 5.7.5 | 5.7.5 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-204 |
| Attack Vector | Network |
| CVSS v3.1 Score | 3.7 (Low) |
| EPSS Score | Not Available |
| Impact | Credential Enumeration / Information Disclosure |
| Exploit Status | Proof of Concept |
| KEV Status | Not Listed |
The product receives input, compares it to a list of allowed values, and returns a response that allows an attacker to infer which values are valid.
An authentication bypass vulnerability exists in Filament's app-based (TOTP/authenticator) multi-factor authentication (MFA) system when recovery codes are enabled. This allow attackers possessing primary credentials to bypass the second-factor authentication check entirely by manipulating the Livewire state during the challenge-form validation lifecycle.
A multi-factor authentication bypass vulnerability exists in Filament (Laravel full-stack framework panels) due to improper time-step tracking of Time-Based One-Time Password (TOTP) codes. By submitting valid TOTP codes from an older time window within the drift allowance, an attacker with a user's password can bypass the single-use MFA guarantee and obtain unauthorized account access.
CVE-2026-19418 is a high-severity origin validation vulnerability in TYPO3 CMS that enables Cross-Site Request Forgery (CSRF) and access control bypasses. Due to architectural consolidation of entry points in version 13.0, the core ReferrerEnforcer fails to isolate backend endpoints from the frontend, allowing an attacker with frontend script execution capabilities to perform unauthorized administrative actions.
CVE-2026-84304 is a high-severity uncontrolled resource consumption vulnerability in gRPC-Go, the Go implementation of the gRPC framework. The issue stems from a memory amplification flaw inside the HTTP/2 DATA frame processing subsystem. Remote, unauthenticated attackers can exploit this vulnerability by sending a high volume of heavily fragmented, tiny DATA frames within multiplexed concurrent streams. This causes gRPC-Go servers to allocate excessive internal metadata structures on the Go heap, leading to severe heap memory amplification, intense garbage collection thrashing, and process termination due to Out-of-Memory (OOM) conditions.
CVE-2026-79675 is a critical command injection vulnerability in NLTK versions prior to 3.10.3 that permits remote attackers to execute arbitrary code on the hosting system. This vulnerability stems from an incomplete mitigation of a previous vulnerability, CVE-2026-12841. While NLTK verified global JVM options configured through the library's setup routines, it failed to perform equivalent safety checks on options provided during per-call invocations of Stanford NLP Java wrappers. Attackers controlling these parameters can pass dangerous Java configuration options to the system shell, bypassing security boundaries to spawn interactive processes or load untrusted Java archives.
A vulnerability in Django REST Framework (DRF) before version 3.17.2 allows remote attackers to bypass the native Django DATA_UPLOAD_MAX_MEMORY_SIZE limits. When parsing JSON or URL-encoded request bodies, DRF's JSONParser and FormParser read directly from the low-level HTTP network stream, bypassing Django's high-level request size checks and causing Denial of Service (DoS) via resource exhaustion.