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

CVE-2026-104181: Authentication Bypass and Privilege Escalation in Filament Multi-Factor Authentication

Amit Schendel
Amit Schendel
Senior Security Researcher

Oct 6, 2026·6 min read·4 visits

Executive Summary (TL;DR)

Filament failed to prompt for the user's password when modifying, disabling, or establishing app-based multi-factor authentication (MFA). If an attacker hijacked an active session, they could bind their own MFA token or disable the user's protection without knowing the master password.

An authentication bypass and privilege escalation vulnerability exists in Filament (filamentphp/filament) due to missing password verification during multi-factor authentication (MFA) setup and management. An attacker with access to an active session can modify or disable MFA, leading to account hijacking.

Vulnerability Overview

The Filament administration panel framework, which operates as a rapid-application development layer for the Laravel PHP framework, exposes crucial user profile operations through its web interface. Among these operations are management workflows for app-based multi-factor authentication (MFA). In standard secure architectures, modifications to multi-factor settings must reside behind a re-authentication barrier to ensure that only the verified account owner can alter credential settings.

Prior to the resolution of CVE-2026-104181, Filament did not consistently enforce step-up authentication or password verification for critical MFA-related actions. The components representing TOTP (Time-Based One-Time Password) setup, recovery code regeneration, and MFA deactivation did not require the user's current password. This omission created a significant vulnerability surface, leaving these functions accessible to any user session containing active authentication cookies.

Because Filament relies heavily on Laravel Livewire, its user interfaces are driven by backend-driven AJAX requests. These requests execute action logic based on the user's current session state. Consequently, any security control depending strictly on the assumption that a user has visual physical control of their screen or session is bypassed if an unauthorized entity can trigger these actions over the network.

Root Cause Analysis

The root cause of this vulnerability lies in a Missing Authentication for Critical Function defect, classified under CWE-306. Specifically, three Filament core action classes responsible for TOTP/App-based MFA operations omitted password confirmation logic: DisableAppAuthenticationAction, RegenerateAppAuthenticationRecoveryCodesAction, and SetUpAppAuthenticationAction.

In a standard secure web application workflow, the configuration of authentication factors is treated as a sensitive administrative context. Any request to toggle MFA settings must require the user to input their password. This pattern acts as a primary defense against session hijacking and physical console access.

Within the vulnerable Filament versions, the multi-factor management forms allowed users to complete actions by merely supplying a valid current code (in the case of disabling) or by executing the action directly (in the case of regeneration or setup). Because the execution did not prompt for or validate the underlying account password against the authentication guard, the system assumed authorization purely based on session state validity.

Code Analysis

A detailed review of the patch implemented in commit 6d4dae6d7a94ce5aefd7ed4dc836acb0e6b71bb1 demonstrates the transition from unauthenticated state mutation to verified, rate-limited step-up verification.

The patch integrates a password field directly into the action's modal form schemas using Filament's form builder component. This field leverages Laravel's active authentication guard to evaluate the submitted value against the hashed password stored in the database. Below is the structured representation of the implementation within the affected action classes:

// Integration of the password input element into the action form
$passwordInput = TextInput::make('password')
    ->label(__('filament-panels::auth/multi-factor/app/actions/disable.modal.form.password.label'))
    ->validationAttribute(__('filament-panels::auth/multi-factor/app/actions/disable.modal.form.password.validation_attribute'))
    ->currentPassword(guard: Filament::getAuthGuard())
    ->password()
    ->revealable(Filament::arePasswordsRevealable())
    ->required()
    ->dehydrated(false);

To ensure validation is executed securely, the patch hooks into the Livewire component lifecycle, forcing validation of the user's password state path before any action logic executes:

->beforeFormValidated(function (Component $livewire) use ($passwordInput, $rateLimitAuthenticationAttempt): void {
    $passwordStatePath = $passwordInput->getStatePath();
 
    $rateLimitAuthenticationAttempt($passwordStatePath);
 
    $livewire->validateOnly(
        $passwordStatePath,
        [$passwordStatePath => $passwordInput->getValidationRules()],
        attributes: [$passwordStatePath => $passwordInput->getValidationAttribute()],
    );
})

To mitigate the risk of password brute-forcing within the authenticated session, a throttle mechanism was added. It uses the Laravel cache to limit attempts to five per session:

$rateLimitAuthenticationAttempt = static function (string $passwordStatePath): void {
    $rateLimitingKey = 'filament-disable-app-authentication:' . Filament::auth()->id();
 
    if (RateLimiter::tooManyAttempts($rateLimitingKey, maxAttempts: 5)) {
        throw ValidationException::withMessages([
            $passwordStatePath => __('filament-panels::auth/multi-factor/app/actions/disable.modal.form.code.messages.rate_limited'),
        ]);
    }
 
    RateLimiter::hit($rateLimitingKey);
};

This remediation pattern is applied uniformly across all three actions. It establishes complete coverage of the vulnerable endpoints and effectively closes the bypass route.

Exploitation Methodology

Exploitation of CVE-2026-104181 relies on the attacker first securing access to an active, authenticated session. This prerequisite is attainable through several common vectors, including Cross-Site Scripting (XSS), physical device access, or local session hijacking.

Once inside the session, the attacker interacts with the Filament panel's user profile interface. If MFA is already configured on the target account, the attacker executes the deactivation action. Because the system does not prompt for the user's master password, the attacker can use a single active code from the legitimate user's device (if accessible) or exploit a scenario where they can regenerate recovery codes to achieve persistent backend access.

If MFA is not yet configured, the attacker registers their own mobile authenticator device. Since the setup flow does not demand password validation, Filament binds the attacker's cryptographic secret key to the victim's account. This achieves persistent access, locking out the legitimate owner and enabling subsequent MFA challenge bypasses.

Impact Assessment

The security impact of this vulnerability is measured by the potential for permanent account compromise and persistent administrative lockout. An attacker who successfully updates or registers an MFA token on a high-privilege account (such as a Filament administrator) can establish persistence that survives a basic password reset if the system continues to demand MFA validation.

The CVSS v3.1 score of 5.4 reflects the medium severity of the issue, influenced primarily by the requirement of low-privileged authenticated access (PR:L). However, within enterprise environments, administrative sessions are high-value targets, and the actual risk of account takeover via this vector is substantial.

No general confidentiality impact exists since general database contents are not directly leaked. However, integrity and availability impacts are elevated because user authentication settings are modified and users can be locked out.

Mitigation and Remediation

To resolve this vulnerability, system administrators must update the Filament framework within their Laravel project files. Immediate patching is the only complete defense against the exploitation vectors described.

Filament versions 4.13.3 and 5.8.3 introduce the required password verification and rate-limiting features. Project dependency configurations should be updated immediately to target these versions or higher.

In environments where updates cannot be deployed instantly, developers can mitigate the risk by auditing their custom profile pages. This ensures that any action mutating security settings implements step-up password verification manually. Monitoring the application cache for authentication-related rate limits can also assist in detecting active attempts to abuse the endpoints.

Official Patches

filamentphpSecurity Advisory and Patch Details

Fix Analysis (1)

Technical Appendix

CVSS Score
5.4/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
EPSS Probability
0.34%
Top 75% most exploited

Affected Systems

Filament Panel Builder application instances using app-based multi-factor authentication (TOTP).

Affected Versions Detail

Product
Affected Versions
Fixed Version
Filament
filamentphp
>= 4.0.0, < 4.13.34.13.3
Filament
filamentphp
>= 5.0.0, < 5.8.35.8.3
AttributeDetail
CWE IDCWE-306
Attack VectorNetwork (AV:N)
CVSS Score5.4
EPSS Score0.0034
ImpactAccount Takeover / Multi-Factor Authentication Bypass
Exploit Statuspoc
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1098Account Manipulation
Persistence
T1556.006Modify Authentication Process: Multi-Factor Authentication
Defense Evasion
CWE-306
Missing Authentication for Critical Function

The application does not perform identity authentication or validation steps when a user attempts to execute a highly sensitive action, specifically mutating multi-factor authentication parameters.

Known Exploits & Detection

GitHubGitHub Security Advisory details explaining the authentication vulnerability.

Vulnerability Timeline

Vulnerability patched in source repository via commit 6d4dae6d7a94ce5aefd7ed4dc836acb0e6b71bb1
2026-09-18
CVE and GitHub Security Advisory GHSA-7m6h-rg42-m449 published
2026-10-01
CVSS metrics analyzed and updated by NVD
2026-10-06

References & Sources

  • [1]GHSA-7m6h-rg42-m449 Advisory on GitHub
  • [2]NVD CVE-2026-104181 Detail
  • [3]Fix Commit

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

•about 1 hour ago•CVE-2026-102275
6.5

CVE-2026-102275: Public/Private Key Identity Confusion in PyJWT OKP JWK Processing

CVE-2026-102275 (GHSA-x33g-cr3x-6449) is a public/private key identity confusion vulnerability in PyJWT versions 2.1.0 through 2.14.0. When importing Octet Key Pair (OKP) JSON Web Keys (JWKs) representing Ed25519 or Ed448 curves, PyJWT fails to verify that the public parameter 'x' matches the private parameter 'd'. An attacker can construct a hybrid JWK combining a victim's public key with the attacker's private key. In protocols like DPoP that bind sessions via public key thumbprints, this allows the attacker to authenticate as the victim while signing proofs with their own private key, fully bypassing sender-constrained security guarantees.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 3 hours ago•CVE-2026-102600
7.5

CVE-2026-102600: Unhandled Runtime Exception via Unsafe Prototype Lookup in @socket.io/cluster-engine

A critical Denial of Service (DoS) vulnerability exists in @socket.io/cluster-engine before version 0.1.1. Unauthenticated remote attackers can crash the server process by supplying inherited prototype property names as session identifiers.

Alon Barad
Alon Barad
7 views•6 min read
•about 4 hours ago•CVE-2026-96747
5.0

CVE-2026-96747: Local Unix Domain Socket SSRF via KMS Endpoint Manipulation in PyMongo

A vulnerability in the Client-Side Field-Level Encryption (CSFLE) component of the MongoDB Python Driver (PyMongo) allows an attacker with database write access to trigger local Unix domain socket connections. By manipulating the Key Management Service (KMS) endpoint configuration inside the key vault collection to end with a '.sock' extension, an attacker forces the application to perform a Server-Side Request Forgery (SSRF) against internal Unix domain sockets.

Alon Barad
Alon Barad
7 views•6 min read
•about 5 hours ago•CVE-2026-52993
9.8

CVE-2026-52993: Double-Free Vulnerability in Linux Kernel TIPC Module

A critical double-free vulnerability exists in the Transparent Inter-Process Communication (TIPC) module of the Linux kernel, specifically within the fragment reassembly implementation in `tipc_buf_append()`. This vulnerability can be triggered locally or remotely to cause kernel heap corruption, leading to local privilege escalation or denial of service.

Amit Schendel
Amit Schendel
7 views•7 min read
•about 5 hours ago•CVE-2026-72137
9.8

CVE-2026-72137: Double Free in Linux Kernel XFRM NAT Keepalive

CVE-2026-72137 is a critical double-free vulnerability in the Linux kernel's XFRM (IPsec) subsystem. The vulnerability occurs when the kernel attempts to send NAT keepalive packets over UDP. Under specific transmission failure conditions, both the downstream networking stack and the upstream keepalive dispatcher attempt to free the same socket buffer (sk_buff) structure, leading to kernel memory corruption, denial of service, or potential local privilege escalation.

Amit Schendel
Amit Schendel
7 views•7 min read
•about 5 hours ago•CVE-2026-96748
8.3

CVE-2026-96748: Host Injection Vulnerability in PyMongo Connection String Parsing

A critical host injection vulnerability exists in PyMongo's connection string parser prior to version 4.18.2. The parser globally decodes percent-encoded characters in the host portion before splitting on delimiters, allowing attackers to inject arbitrary servers into the database client's connection pool.

Amit Schendel
Amit Schendel
7 views•7 min read