CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-77567

CVE-2026-77567: Multi-Factor Authentication Bypass in Filament App-Based MFA

Alon Barad
Alon Barad
Software Engineer

Sep 2, 2026·7 min read·46 visits

Executive Summary (TL;DR)

A high-severity authentication bypass in Filament's app-based MFA system allows an attacker with valid primary credentials to completely skip the second-factor verification step by manipulating Livewire state parameters when recovery codes are configured.

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.

Vulnerability Overview

Filament is a collection of full-stack components designed for accelerated Laravel application development, frequently utilized to build administrative panels and content management portals. Within these ecosystems, secure authentication is paramount, and Filament integrates a robust multi-factor authentication (MFA) system supporting app-based Time-based One-time Password (TOTP) mechanisms.

The vulnerability, identified as CVE-2026-77567 (GHSA-52xp-w8hr-xv3c), is classified under CWE-287: Improper Authentication. It is located specifically within the validation logic of Filament's app-based MFA challenge form. This flaw allows an authenticated session in the "MFA Pending" state to bypass verification without providing a valid TOTP token or recovery code.

The attack surface is exposed directly through the Laravel Livewire lifecycle. When app-based MFA and recovery codes are enabled on a target account, the application becomes susceptible. An attacker who has acquired the target's primary username and password can exploit this conditional state evaluation mismatch to escalate their session to a fully authenticated state.

Root Cause Analysis

The root cause of this vulnerability lies in how the requirement constraints and dynamic visibility rules of the MFA challenge form are evaluated during the Livewire component execution cycle. The MFA form exposes two input fields: a standard TOTP input (code) and an alternative recoveryCode input.

In the vulnerable implementation, the standard TOTP code input has a dynamic required() validation rule. This rule is governed by a closure that evaluates whether the user is currently opting to use a recovery code:

->required(fn (Get $get): bool => (! $isRecoverable) || (! $get('useRecoveryCode')))

If the state parameter useRecoveryCode evaluates to true, the standard TOTP code is no longer marked as required by the backend schema validator. Under normal circumstances, the recoveryCode field would then be validated as required. However, because of the way Livewire state synchronization handles dynamic visibility, if the recoveryCode field is omitted from the request payload entirely, the validator fails to enforce the required constraint on the dynamically visible recovery code field.

Because the TOTP code field is exempted from being required when useRecoveryCode is true, and the recoveryCode field's required validation is not successfully executed on the server, the form validation process completes with zero errors. The application incorrectly concludes that validation succeeded, allowing the user's session to transition into the authorized dashboard state without verifying any secondary authentication factor.

Code Analysis and Patch Details

The vulnerability was resolved by amending how the requirement constraint for the standard TOTP code field is evaluated when the recovery flow is selected. The patch modifies the validation closure so that the standard OTP code remains required unless a non-blank recovery code has actually been supplied.

// Vulnerable Validation logic
->required(fn (Get $get): bool => (! $isRecoverable) || (! $get('useRecoveryCode')))
 
// Patched Validation logic
->required(fn (Get $get): bool => (! $isRecoverable) || (! $get('useRecoveryCode')) || blank($get('recoveryCode')))

By checking blank($get('recoveryCode')), the application ensures that even if useRecoveryCode is toggled to true, the TOTP code field remains required if the recovery code input is empty. This forces at least one of the inputs to contain data.

An identical structural flaw existed in the "Disable Multi-Factor Authentication" modal, which would allow a partially authenticated user to disable MFA entirely. The following complete diff shows how the fix was implemented in both the AppAuthentication.php component and the corresponding DisableAppAuthenticationAction.php class:

File: packages/panels/src/Auth/MultiFactor/App/AppAuthentication.php
@@ -348,7 +348,7 @@ public function getChallengeFormComponents(Authenticatable $user): array
                     ->action(fn (Set $set) => $set('useRecoveryCode', true))
                     ->visible(fn (): bool => $isRecoverable && (! $get('useRecoveryCode'))))
                 ->validationAttribute(__('filament-panels::auth/multi-factor/app/provider.login_form.code.validation_attribute'))
-                ->required(fn (Get $get): bool => (! $isRecoverable) || (! $get('useRecoveryCode')))
+                ->required(fn (Get $get): bool => (! $isRecoverable) || (! $get('useRecoveryCode')) || blank($get('recoveryCode')))
                 ->rule(function () use ($user): Closure {
                     return function (string $attribute, #[SensitiveParameter] $value, Closure $fail) use ($user): void {
                         if ($this->verifyCode($value, $this->getSecret($user), shouldPreventCodeReuse: true)) {
@@ -376,7 +376,6 @@ public function getChallengeFormComponents(Authenticatable $user): array
                         $fail(__('filament-panels::auth/multi-factor/app/provider.login_form.recovery_code.messages.invalid'));
                     };
                 })
-                ->required()
                 ->visible(fn (Get $get): bool => $isRecoverable && $get('useRecoveryCode'))
                 ->live(onBlur: true),
         ];

In addition to the application changes, the development team introduced regression tests within the test suite to guarantee that a blank recovery code preserves the validation requirement on the standard TOTP field.

Exploitation Methodology

To exploit this vulnerability, an attacker must first obtain valid primary login credentials (username and password) for a target administrative account. Once these credentials are submitted, the application redirects the session to the multi-factor authentication challenge page.

At this stage, the exploitation process involves the following sequence:

  1. The attacker intercepts the Livewire network communication between the browser and the server using an HTTP proxy or browser developer tools.

  2. The attacker triggers a state update call to the Livewire backend, programmatically injecting the useRecoveryCode state value:

{
  "data.multiFactor.app.useRecoveryCode": true
}
  1. The attacker submits the validation or authentication action (such as calling the authenticate method) while transmitting null or blank values for both code and recoveryCode:
{
  "code": null,
  "recoveryCode": null
}
  1. The backend framework processes the request. Because useRecoveryCode is evaluated as true, the backend relaxes the requirement check on the standard TOTP code. Simultaneously, because the recoveryCode payload parameter is omitted or null, it fails to trigger the validation exception. The session transitions to a fully authorized state, and the server returns a redirect response to the dashboard.

Impact Assessment

The security impact of CVE-2026-77567 is classified as high, receiving a CVSS v3.1 score of 8.1. The attack complexity is low, and no specialized user interaction is required. However, the attacker must have privileges (low) because they require initial valid credentials to reach the second-factor authentication prompt.

If successfully exploited, this vulnerability leads to a complete bypass of the secondary authentication factor. It permits unauthorized administrative access to any vulnerable Filament installation where app-based MFA and recovery codes are enabled. This compromise allows attackers to modify system databases, extract sensitive configuration files, and execute actions on behalf of administrative users.

Because Filament is widely deployed across enterprise-facing applications, bypassing the admin-portal MFA leaves databases and cloud configurations exposed. This vulnerability significantly reduces the overall assurance level provided by the multi-factor authentication deployment.

Detection & Remediation

The recommended remediation is to upgrade the Filament installation to the patched versions. Applications utilizing Filament 4.x must be upgraded to version 4.12.0 or higher. Applications running on Filament 5.x must be upgraded to version 5.7.0 or higher.

Execute the following Composer command to update the dependency:

# Upgrade for Filament 4.x applications
composer update filament/filament:"^4.12.0"
 
# Upgrade for Filament 5.x applications
composer update filament/filament:"^5.7.0"

If patching is not immediately possible, apply one of the following configurations to eliminate the attack surface:

  • Disable Recovery Codes: Deactivate recovery codes within the application panel's multi-factor settings. If accounts are not flagged as $isRecoverable, the conditional bypass logic path cannot be triggered.
  • Transition to Email-Based MFA: Email-based multi-factor authentication relies on a distinct control flow that is unaffected by this state-handling vulnerability. Transitioning active users to email-based MFA removes the vulnerable code path from the attack surface.

Network administrators can detect attempted exploitation by analyzing HTTP log files for Livewire payload updates where the parameter useRecoveryCode is updated to true but subsequent form submissions contain empty values for both the primary TOTP code and the recovery code.

Official Patches

FilamentOfficial GitHub Security Advisory
FilamentFix Commit in Filament Repository

Fix Analysis (1)

Technical Appendix

CVSS Score
8.1/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
EPSS Probability
0.30%
Top 77% most exploited

Affected Systems

Filament Panel applications running version 4.x prior to 4.12.0Filament Panel applications running version 5.x prior to 5.7.0

Affected Versions Detail

Product
Affected Versions
Fixed Version
Filament
Filament
>= 4.0.0, < 4.12.04.12.0
Filament
Filament
>= 5.0.0, < 5.7.05.7.0
AttributeDetail
CWE IDCWE-287 (Improper Authentication)
Attack VectorNetwork
CVSS v3.18.1
EPSS Score0.00304
EPSS Percentile22.61%
Exploit StatusPoC (Proof-of-Concept)
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1078Valid Accounts
Defense Evasion
T1190Exploit Public-Facing Application
Initial Access
CWE-287
Improper Authentication

The software does not perform or incorrectly performs an authentication step, allowing attackers to access restricted data or execute actions without identity verification.

Known Exploits & Detection

Filament Security AdvisoryExploit concepts are reproducible via official test suites and code-level verification in the Filament framework repository.

References & Sources

  • [1]GitHub Security Advisory
  • [2]Fix Patch Commit
  • [3]Filament Release Tag v4.12.0
  • [4]Filament Release Tag v5.7.0
  • [5]National Vulnerability Database Entry

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•4 days ago•CVE-2026-87697
8.8

CVE-2026-87697: Untrusted Deserialization in .NET PresentationCore Clipboard Handling

A remote code execution vulnerability exists in Microsoft .NET due to untrusted data deserialization within the PresentationCore component. The flaw stems from implicit auto-conversion flags during clipboard data retrieval operations.

Alon Barad
Alon Barad
21 views•5 min read
•4 days ago•CVE-2026-70007
8.8

CVE-2026-70007: Out-of-Bounds Write Vulnerability in .NET Framework and WPF Subsystem

An out-of-bounds write vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio allows unauthenticated remote attackers to execute arbitrary code via crafted pixel-shader bytecode or auto-converted clipboard payloads.

Amit Schendel
Amit Schendel
11 views•6 min read
•4 days ago•CVE-2026-70186
7.5

CVE-2026-70186: ASP.NET Core Denial of Service Vulnerability via Framework Deadlock

ASP.NET Core contains a thread deadlock vulnerability (CWE-833) that allows an unauthenticated remote attacker to cause a denial of service over the network by exhausting server thread pool resources.

Amit Schendel
Amit Schendel
13 views•5 min read
•4 days ago•CVE-2026-70035
8.8

CVE-2026-70035: Insecure Deserialization Remote Code Execution in Microsoft .NET Framework and .NET Runtime

CVE-2026-70035 is a high-severity Remote Code Execution (RCE) vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio caused by improper handling during the deserialization of untrusted data (CWE-502). An unauthenticated attacker can execute arbitrary code within the context of the affected process by delivering a crafted serialized payload.

Amit Schendel
Amit Schendel
18 views•6 min read
•4 days ago•CVE-2026-70183
7.5

CVE-2026-70183: Elevation of Privilege in ASP.NET Core and Visual Studio via Concurrent Race Condition

An elevation of privilege vulnerability exists in ASP.NET Core and Microsoft Visual Studio due to improper synchronization during concurrent thread execution. Authenticated remote attackers with low privileges can exploit a timing window to manipulate shared resources and assume higher-level execution contexts.

Alon Barad
Alon Barad
15 views•5 min read
•7 days ago•CVE-2026-107844
5.3

CVE-2026-107844: Path Traversal Vulnerability in Contao ImagesController

A path traversal vulnerability (CWE-22) in Contao CMS allows unauthenticated remote attackers to bypass directory boundary restrictions in ImagesController and access files within the project directory.

Amit Schendel
Amit Schendel
23 views•5 min read