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

CVE-2026-48166: Timing-Based User Enumeration on Login Page in Filament

Alon Barad
Alon Barad
Software Engineer

Jun 24, 2026·6 min read·16 visits

Executive Summary (TL;DR)

A timing-based user enumeration vulnerability in Filament login pages allows unauthenticated remote attackers to identify valid registered email addresses due to a short-circuiting logic flaw in the authentication mechanism.

An observable timing discrepancy vulnerability (CWE-208) in Filament's administrative login page allows unauthenticated remote attackers to determine the existence of registered email addresses. This timing side-channel arises from short-circuiting logic that skips expensive password hashing checks when a queried email address is not found in the database. Attackers can execute statistical timing attacks to map active administrator accounts, facilitating subsequent targeted brute-force or credential-stuffing campaigns.

Vulnerability Overview

Filament is an administrative panel and form builder library built on top of the Laravel full-stack framework. It provides developers with rapid development tools, including out-of-the-box user authentication and administrative login flows. Because Filament is commonly used to secure backend systems, database management tools, and business-critical dashboards, the security of its administrative endpoints is a critical concern for modern enterprise applications.

The administrative authentication component exposes an unauthenticated login interface at designated pathways. This interface processes incoming email and password combinations. Due to systemic, design-level flaws in credential processing, this endpoint exposes an observable timing discrepancy (CWE-208) to any network adversary.

By systematically analyzing response times, an attacker can reliably perform user enumeration. This compromises user anonymity and assists malicious actors in targeted brute-force, password-spraying, or phishing campaigns. The low complexity of the attack vector makes it highly practical for execution in automated scan sweeps.

Root Cause Analysis

The core defect in the affected versions of Filament (packages/panels/src/Auth/Pages/Login.php) stems from the use of standard short-circuiting logical evaluation during authentication. When a user submits credentials, the application attempts to retrieve the user's model using the provided identifier (typically an email address). This retrieval process queries the underlying database engine.

If the database lookup returns no match, the login logic short-circuits. The expression (! $user) || (! $authProvider->validateCredentials($user, $credentials)) evaluates the left-hand condition first. Because $user is null, the negation (! $user) evaluates to true. This instantly terminates further evaluation of the boolean statement, bypassing the second conditional check entirely.

Conversely, if the email query returns a valid record, the database check succeeds, forcing the application to evaluate the right-hand condition. This condition executes the validateCredentials method. This method triggers computationally heavy CPU functions designed to verify passwords, using algorithms such as Bcrypt or Argon2 with high cost factors.

Because cryptographic hashing routines require significant processing overhead (often consuming between 100ms and 250ms of CPU cycles) while database queries for non-existent users return in less than 15ms, a highly measurable timing delta is created. This discrepancy is measurable remotely and can be analyzed using basic network diagnostics or custom HTTP clients.

Code-Level Vulnerability & Patch Analysis

To understand the specific vulnerability and the implemented correction, analyze the code within Login.php before and after the introduction of the patch. In the vulnerable version, the authentication logical sequence executed sequentially without temporal boundaries.

// Vulnerable Code Path
$user = $authProvider->retrieveByCredentials($credentials);
 
// If $user is null, validateCredentials() is skipped entirely.
if ((! $user) || (! $authProvider->validateCredentials($user, $credentials))) {
    $this->userUndertakingMultiFactorAuthentication = null;
    $this->fireFailedEvent($authGuard, $user, $credentials);
    $this->throwFailureValidationException();
}

The patch authored by Dan Harrin resolves this discrepancy by implementing the Illuminate\Support\Timebox class. This utility class enforces a minimum execution time for a designated closure, normalizing the execution envelope.

// Patched Code Path using Timebox
$timeboxDuration = (int) config('auth.timebox_duration', 200_000); // 200,000 microseconds = 200ms
 
$user = app(Timebox::class)->call(function (Timebox $timebox) use ($authProvider, $authGuard, $credentials, $remember): Authenticatable {
    $this->fireAttemptingEvent($authGuard, $credentials, $remember);
 
    // Perform the same user lookup
    $user = $authProvider->retrieveByCredentials($credentials);
 
    // Perform short-circuit evaluation inside the timebox
    if ((! $user) || (! $authProvider->validateCredentials($user, $credentials))) {
        $this->userUndertakingMultiFactorAuthentication = null;
        $this->fireFailedEvent($authGuard, $user, $credentials);
        $this->throwFailureValidationException();
    }
 
    // If authentication is successful, return immediately without applying the timebox delay
    $timebox->returnEarly();
 
    return $user;
}, $timeboxDuration);

In this patched version, the duration is set to a default value of 200ms (200,000 microseconds). If the evaluation of the conditional block finishes early (such as when the user is not found or when password verification fails), the Timebox intercepts the exception and suspends the execution thread using usleep(). This padding aligns the overall response time to a consistent 200ms, effectively neutralizing the timing side-channel.

Exploit Methodology & Proof of Concept

Exploiting this timing side-channel requires no specialized exploitation frameworks or authenticated access. An attacker only needs a network connection to the target Filament instance and an HTTP client capable of recording round-trip times (RTT) with millisecond-level precision.

The attacker starts by sending several dozen requests containing randomly generated, non-existent email addresses to establish a baseline of network latency and non-hashing processing time. Once the baseline is established, the attacker submits login requests containing the targeted email addresses, recording the elapsed duration for each attempt.

# Pseudo-code timing attack payload loop
import requests
import time
 
target_url = "https://example.com/admin/login"
emails_to_test = ["admin@example.com", "fakeuser999@example.com"]
 
for email in emails_to_test:
    payload = {"email": email, "password": "incorrect_password_placeholder"}
    start_time = time.perf_counter()
    response = requests.post(target_url, data=payload)
    elapsed_time = (time.perf_counter() - start_time) * 1000 # Convert to ms
    print(f"Email: {email} | Response Code: {response.status_code} | Duration: {elapsed_time:.2f}ms")

By running this script, the attacker analyzes the resulting timing signatures. Responses that complete near the baseline network latency (e.g., 10ms) indicate invalid accounts. Responses that display a significantly larger delay (e.g., matching the 100ms - 250ms hashing cost) indicate a valid account, confirming that the corresponding email is a registered user.

Complete Analysis & Underlying Risks of the Fix

While the implementation of Laravel's Timebox utility is the standard mitigation strategy for this class of vulnerability, it has operational limitations. The effectiveness of a timebox relies on setting a duration that consistently exceeds the time required to perform the cryptographic hashing operation.

If the application is deployed on under-provisioned infrastructure, low-cost virtual servers, or container instances experiencing heavy load, the CPU cycles required for password verification can easily exceed the default 200ms threshold. If the cryptographic verification takes 300ms while the timebox limit is 200ms, the timebox does not add any delay.

In this scenario, a request for a non-existent user is completed in 10ms and padded to 200ms by the timebox. However, a request for a valid user with an incorrect password takes the full 300ms. The timing difference of 100ms is still observable, allowing attackers to continue enumerating users despite the patch.

To ensure the fix is complete, administrators must analyze their hosting environment and measure the average duration of a successful password verification. The auth.timebox_duration configuration parameter must be adjusted to a value that safely exceeds the maximum observed hashing duration under peak system load.

Incident Detection & Hardening

Detecting timing-based user enumeration requires analyzing access logs and tracking transaction frequency. Because user enumeration requires sending numerous requests to test multiple target credentials, attackers often generate high-volume patterns that differ from normal login patterns.

Security operations teams should monitor web server logs for rapid, sequential POST requests targeting the /admin/login endpoint. To mitigate the risk, administrators should implement strict rate limiting using Filament's built-in throttling middleware or external Web Application Firewalls (WAFs).

# Example Nginx Rate Limiting Configuration
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/m;
 
location /admin/login {
    limit_req zone=login_limit burst=5 nodelay;
    proxy_pass http://backend_servers;
}

Applying rate limiting prevents attackers from performing timing checks across large lists of credentials. In addition, organizations should enforce multi-factor authentication (MFA) and implement account-lockout policies to secure the system against brute-force attacks if user enumeration occurs.

Fix Analysis (1)

Technical Appendix

CVSS Score
5.3/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
EPSS Probability
0.21%
Top 89% most exploited

Affected Systems

filament/filamentFilament PanelsFilament Auth Page

Affected Versions Detail

Product
Affected Versions
Fixed Version
filament/filament
Filament
>= 4.0.0, < 4.11.54.11.5
filament/filament
Filament
>= 5.0.0, < 5.6.55.6.5
AttributeDetail
CWE IDCWE-208
Attack VectorNetwork (AV:N)
CVSS v3.1 Score5.3 (Medium)
EPSS Score0.0021
Exploit StatusNone
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1589Gather Victim Identity Information
Reconnaissance
T1110Brute Force
Credential Access
CWE-208
Observable Timing Discrepancy

The product performs an operation that takes a variable amount of time depending on the value of a secret or restricted input, and this discrepancy is observable to an actor.

Vulnerability Timeline

Fix commit authored and pushed to the repository
2026-05-21
GitHub Security Advisory GHSA-5w46-g9pq-wh6f published
2026-06-22
CVE-2026-48166 officially published in the NVD
2026-06-22
CVE record updated with detailed CVSS ratings
2026-06-23

References & Sources

  • [1]GHSA-5w46-g9pq-wh6f: Timing-Based User Enumeration on Login Page in Filament
  • [2]Fix Commit 33a9f576efb0d43372607487aebd17eae4315f1f
  • [3]CVE-2026-48166 on CVE.org

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 days ago•CVE-2026-54068
5.9

CVE-2026-54068: Unauthenticated Server-Side Template Injection and SQLite Exfiltration in SiYuan PKM

An authentication bypass in the SiYuan personal knowledge management system before version 3.7.0 exposes a dynamic icon rendering endpoint. This endpoint processes client-supplied Go template directives. By submitting a crafted request, an unauthenticated remote attacker can leverage registered database template functions to execute arbitrary read-only SQL queries and exfiltrate workspace contents.

Amit Schendel
Amit Schendel
13 views•5 min read
•2 days ago•CVE-2026-54069
9.1

CVE-2026-54069: Authentication Bypass in SiYuan Note via Origin Header Spoofing

CVE-2026-54069 is a critical authentication bypass vulnerability in the SiYuan Note personal knowledge management system. The flaw is located in the HTTP server's middleware handling API authorization, which unconditionally trusts requests carrying a 'chrome-extension://' scheme in the Origin HTTP header, granting administrative access without validating API tokens.

Alon Barad
Alon Barad
11 views•5 min read
•2 days ago•CVE-2026-54089
9.1

CVE-2026-54089: Authentication Bypass by Spoofing in File Browser

CVE-2026-54089 is a critical authentication bypass vulnerability in File Browser affecting instances configured with proxy-based authentication. An unauthenticated remote attacker with direct network access can impersonate arbitrary users or register new accounts by spoofing configured HTTP headers.

Amit Schendel
Amit Schendel
8 views•7 min read
•2 days ago•GHSA-99J7-FHR2-XFJ4
10.0

GHSA-99J7-FHR2-XFJ4: Malicious Remote Code Execution Payload in 'exploration' Cargo Crate

The malicious Cargo package 'exploration' was uploaded to the crates.io registry. During compilation or package import, the crate executes code designed to establish an outbound TCP/HTTP connection, download an external second-stage binary, and execute the binary locally on the host machine. This creates an unauthenticated remote code execution vector impacting developer environments and continuous integration pipelines.

Amit Schendel
Amit Schendel
11 views•6 min read
•2 days ago•CVE-2026-54088
9.3

CVE-2026-54088: Pre-Authentication Remote Code Execution in File Browser Hook Authentication

CVE-2026-54088 is a critical command injection vulnerability in File Browser prior to version 2.63.6. When Hook Authentication is enabled, the application interpolates unsanitized credentials into a shell command, allowing unauthenticated remote code execution.

Alon Barad
Alon Barad
11 views•6 min read
•2 days ago•GHSA-QV4M-M73M-8HJ7
8.8

GHSA-qv4m-m73m-8hj7: Authenticated Arbitrary File Upload leading to Remote Code Execution in NotrinosERP

An authenticated remote code execution vulnerability exists in NotrinosERP (versions up to and including 1.0.0) within the Human Resource Management (HRM) module. Users with employee management permissions can upload arbitrary file types, including PHP scripts, which are written directly to a web-accessible directory. This allows for arbitrary code execution in the context of the web-server user.

Alon Barad
Alon Barad
8 views•6 min read