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-84306

CVE-2026-84306: Multi-Factor Authentication Bypass via Replay Attack in Filament

Alon Barad
Alon Barad
Software Engineer

Sep 2, 2026·7 min read·23 visits

Executive Summary (TL;DR)

Filament's TOTP verification allowed the replay of older valid codes within the drift window because it tracked used codes individually rather than globally tracking the last accepted timestep. This allowed an attacker with compromised passwords to bypass multi-factor authentication.

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.

Vulnerability Overview

Filament is an administrative panel and full-stack rapid development framework built on top of Laravel. Within its core architecture, Filament provides built-in support for Multi-Factor Authentication (MFA), including Time-Based One-Time Passwords (TOTP) conforming to RFC 6238. This capability is used to secure high-privilege access to admin panels and backend management consoles, exposing an administrative attack surface to malicious actors.

A vulnerability designated as CVE-2026-84306 (GHSA-r3j6-gpjw-qfjr) was identified in the MFA verification logic of Filament. The software failed to enforce strict monotonic progression of the TOTP time-steps. As a result, older, unused TOTP codes within the accepted time-drift window could be successfully replayed even after a newer TOTP code had already been verified and processed.

This flaw belongs to the class of CWE-294 (Authentication Bypass by Capture-replay). By exploiting this vulnerability, an attacker who has already acquired a target user's primary credentials can bypass the secondary MFA challenge, gaining unauthorized administrative access to the application panel.

Root Cause Analysis

The security flaw resides in the packages/panels/src/Auth/MultiFactor/App/AppAuthentication.php component, specifically within the verifyCode method. According to the RFC 6238 specifications, once a TOTP code corresponding to a specific timestep is verified and accepted, the server must invalidate that entire timestep and all previous timesteps. This behavior ensures that the authentication state progresses strictly forward, preventing the validation of any older codes, even if those codes still fall within the configured clock drift window (typically around 4 minutes to accommodate network latency and client desynchronization).

In vulnerable versions of Filament, the code-tracking mechanism maintained state on a per-code basis rather than a per-secret basis. The application generated a unique cache key for each verification attempt using the following schema:

$cacheKey = 'filament.app_authentication_codes.' . md5($secret . $code);

Because the cache key incorporated both the user's multi-factor secret and the specific 6-digit verification code string submitted, each unique code generated its own distinct cache entry. While a user could not reuse the exact same 6-digit code within its active validity lifespan, the server treated any other valid code from a different timestep within the allowed clock drift window as entirely separate and untracked. Consequently, if a user logged in with a code from timestep T, an attacker possessing an unused code from timestep T-1 could submit it, bypass the tracking check, and successfully authenticate.

Code-Level Vulnerability & Fix Analysis

Analyzing the patch applied to packages/panels/src/Auth/MultiFactor/App/AppAuthentication.php reveals how the flaw was remedied. The tracking mechanism was modified to monitor the timestamp of the last validated code globally for each secret rather than monitoring individual 6-digit code strings.

Vulnerable Code Pattern

Before the patch, the verifyCode method tracked code reuse by incorporating the submitted code into the MD5 hash:

$cacheKey = 'filament.app_authentication_codes.' . md5($secret . $code);
$timestamp = $this->google2FA->verifyKeyNewer($secret, $code, cache()->get($cacheKey), $this->getCodeWindow());

Because each individual code generated a separate cache key, the underlying library's verifyKeyNewer function compared the current code's timestep against an empty or non-existent cached timestamp, allowing older but still mathematically valid codes to pass verification.

Patched Code Pattern

In the patched implementation, the cache key is generated using only the multi-factor secret, ensuring a single centralized record of the last authenticated timestamp per user:

$cacheKey = 'filament.app_authentication_codes.' . md5($secret);
 
$verifyCode = function () use ($cacheKey, $code, $secret): bool {
    // Retrieve the last used timestamp globally for this secret
    $timestamp = $this->google2FA->verifyKeyNewer($secret, $code, Cache::get($cacheKey), $this->getCodeWindow());
 
    if ($timestamp === false) {
        return false;
    }
 
    if ($timestamp === true) {
        $timestamp = $this->google2FA->getTimestamp();
    }
 
    // Save the timestamp of the verified code back into the cache
    Cache::put($cacheKey, $timestamp, ($this->getCodeWindow() + 1) * 60);
 
    return true;
};

Additionally, the patch implements a critical optimization using cache locks to block race conditions where an attacker could execute parallel, concurrent verification requests:

if (! (Cache::getStore() instanceof LockProvider)) {
    return $verifyCode();
}
 
return Cache::lock("{$cacheKey}.lock", 10)->block(10, $verifyCode);

This implementation ensures that concurrent operations must wait for the preceding validation to commit its state to the cache, eliminating race-condition windows.

Exploitation & Attack Mechanics

An attack targeting this vulnerability is classified as highly complex because it requires a specific set of pre-existing conditions and access rights. An attacker cannot exploit this flaw to compromise an account unless they have already obtained the target user's primary credentials (username and password) and can intercept the TOTP codes transmitted by the legitimate user.

Attack Vector Diagram

Exploitation Methodology

  1. Credential Harvest: The attacker steals the user's login credentials via phishing, malware, or credential stuffing.

  2. TOTP Interception: The attacker intercepts the user's TOTP codes. For example, if the user receives TOTP codes via SMS or email, or if the attacker is in a position to monitor the network interface or local device storage, they can intercept a code from an earlier timestep (e.g., T-1 or T-2) that the user did not use because they had already generated a newer code (timestep T).

  3. MFA Replay: The user authenticates with code T. The server accepts the code and writes a cache entry for that specific code. The attacker then authenticates using the intercepted, older code (T-1).

  4. Bypass Verification: Since the older code T-1 has never been recorded in the cache, the server evaluates it as a valid, unused code because it falls within the acceptable clock drift window. The server grants the attacker full access to the administrative panel.

Impact Assessment & Threat Context

The security impact of CVE-2026-84306 is marked by the complete breakdown of multi-factor authentication integrity for affected Filament installations. When bypassed, the primary layer of credential protection is rendered ineffective, allowing attackers with compromised user credentials to elevate their privileges to that of the targeted administrative account.

Since Filament is frequently used as an administrative interface for business databases, customer information systems, and core application configurations, an administrative session compromise typically results in high confidentiality and integrity impacts. An attacker could extract database contents, manipulate system configuration parameters, or perform unauthorized actions on behalf of administrative users.

Despite the severity of a successful bypass, the exploitability of this vulnerability is limited by the strict prerequisites. The attacker must already hold valid primary credentials and have active visibility into the user's TOTP sequence within a tight time window of approximately four minutes. This requirement accounts for the CVSS score of 6.5 and the high-complexity classification.

Detection & Remediation

To eliminate the exposure caused by CVE-2026-84306, administrators and developers must upgrade Filament to a patched release. No manual configuration changes to the codebase are required once the upgrade is completed.

Recommended Software Updates

  • For applications utilizing Filament v4.x, update to version 4.12.6 or later.
  • For applications utilizing Filament v5.x, update to version 5.7.6 or later.

Run the following commands in the root directory of the application:

# For v4 installations
composer update filament/filament:^4.12.6
 
# For v5 installations
composer update filament/filament:^5.7.6

Supporting Infrastructure Mitigations

To ensure the performance and security of the newly introduced mutex lock mechanism, the application's caching backend must support locking. Cache stores such as file, apc, or database drivers without locking support will fail silently back to non-locking verification, maintaining a small race-condition vulnerability window.

It is strongly advised to deploy a cache backend that supports native distributed locking, such as Redis or Memcached, and ensure that the CACHE_DRIVER environment variable is configured to utilize this backend in production.

Official Patches

FilamentPHPGit commit fixing the TOTP verification key logic and adding locking mechanics

Fix Analysis (1)

Technical Appendix

CVSS Score
6.5/ 10
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:N

Affected Systems

Filament Framework Panels

Affected Versions Detail

Product
Affected Versions
Fixed Version
Filament
FilamentPHP
>= 4.0.0, < 4.12.64.12.6
Filament
FilamentPHP
>= 5.0.0, < 5.7.65.7.6
AttributeDetail
CWE IDCWE-294
Attack VectorNetwork
CVSS v3.1 Score6.5
Exploit StatusNone/Unproven
CISA KEV StatusNot Listed
Vulnerability TypeAuthentication Bypass by Capture-replay

MITRE ATT&CK Mapping

T1111Multi-Factor Authentication Bypass
Credential Access
T1556Modify Authentication Process
Defense Evasion
CWE-294
Authentication Bypass by Capture-replay

The software receives a one-time password or other authentication credential that was captured from a previous session, and it accepts the replayed credential to establish a new, unauthorized session.

References & Sources

  • [1]GitHub Security Advisory GHSA-r3j6-gpjw-qfjr
  • [2]CVE-2026-84306 on CVE.org
  • [3]Official Patch Commit
  • [4]Official Pull Request
  • [5]Filament v4.12.6 Release Notes
  • [6]Filament v5.7.6 Release Notes

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

•2 minutes ago•CVE-2026-109619
9.2

CVE-2026-109619: Remote Code Execution in PHP Core via Stale Global State Memory Corruption (PHP2Shell)

CVE-2026-109619 (PHP2Shell) is a critical Use-After-Free vulnerability in the core PHP engine caused by improper global state cleanup during out-of-memory exception handling across persistent worker requests.

Alon Barad
Alon Barad
1 views•6 min read
•5 minutes ago•CVE-2026-113721
4.5

CVE-2026-113721: Unsafe Link Resolution in virtualenv File Generation

In Python virtualenv prior to version 21.14.9, activation script generators and configuration writers use Path.exists() before writing files. Because Path.exists() resolves symbolic links, it returns False for dangling symlinks. Consequently, virtualenv skips unlinking pre-planted symbolic links or hard links, writing data directly to target locations outside the intended virtual environment directory.

Amit Schendel
Amit Schendel
1 views•5 min read
•9 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
31 views•5 min read
•9 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
19 views•6 min read
•10 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
18 views•5 min read
•10 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
24 views•6 min read