Backpack CRUD CVE-2026-54179
MEDIUMSeverity by source
AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:N
Advisory explicitly requires admin-level access (PR:H); AC:H reflects the non-default withFiles() image-field configuration prerequisite; UI:R retained as XSS requires a victim to load the stored file.
Primary rating from GitHub Advisory.
CVSS VectorGitHub Advisory
Lifecycle Timeline
2DescriptionGitHub Advisory
Summary
SingleBase64Image::uploadFiles - the uploader bound to image-typed fields via withFiles() - only verifies that the submitted value starts with the string data:image. The MIME subtype and the base64-decoded bytes are never inspected or validated. A related bug in FileNameGenerator causes the stored file to receive an extensionless filename, because mime_content_type() returns false when given a data URI instead of a filesystem path.
The combination allows an authenticated admin to store a file of arbitrary type on the configured disk under a name without a recognizable extension.
Details
// src/app/Library/Uploaders/SingleBase64Image.php
if (Str::startsWith($value, 'data:image')) {
// MIME subtype and decoded bytes are not validated
$base64Image = Str::after($value, ';base64,');
$finalPath = $this->getPath() . $this->getFileName($value);
Storage::disk($this->getDisk())->put($finalPath, base64_decode($base64Image));
return $finalPath;
}
// src/app/Library/Uploaders/Support/FileNameGenerator.php
private function getExtensionFromFile(string|UploadedFile $file): string
{
return is_a($file, UploadedFile::class, true)
? $file->extension()
: Str::after(mime_content_type($file), '/'); // returns false on data URIs → empty string
}The stored filename ends with a trailing dot and no extension.
Impact
An authenticated admin submitting a malicious payload to a Backpack image field stored with withFiles() can write arbitrary file content to the configured storage disk. Depending on server configuration and how stored files are served, this may lead to stored XSS or other unintended behavior when the file is later accessed.
Fix
The fix validates the declared MIME subtype against an allowlist, decodes the base64 payload, and verifies the actual file bytes with finfo before storing. The extension is derived from the detected MIME type rather than the data URI string. Applied in SingleBase64Image::uploadFiles and uploadRepeatableFiles; FileNameGenerator::getExtensionFromFile now rejects inputs that produce an empty extension.
Setting X-Content-Type-Options: nosniff on admin responses is a useful defense-in-depth complement.
Affected versions
>= 6.0.0, < 6.8.14>= 7.0.0, < 7.0.38
Patched versions
6.8.147.0.38
AnalysisAI
Stored XSS and arbitrary file upload in Laravel Backpack CRUD allows an authenticated admin to bypass the SingleBase64Image uploader's trivial data:image prefix check, writing files of any MIME type - including SVG with embedded JavaScript - to the configured storage disk. A companion bug in FileNameGenerator causes stored files to receive extensionless names because mime_content_type() returns false when passed a data URI string rather than a filesystem path, compounding server-side MIME enforcement failures. …
Unlock full vulnerability intelligence
- Risk assessment & exploitation conditions
- Attack chain visualization
- Remediation with exact patch versions
- Threat intelligence from 22 sources
- Personal watchlist & email alerts
Free forever · No credit card required
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata
Vulnerability AssessmentAI
| Exploitation | Exploitation requires a valid authenticated Backpack admin account - unauthenticated access is insufficient, and CVSS PR:L may understate this requirement given the advisory's explicit 'authenticated admin' language. … Additional conditions and limiting factors are described in the full assessment. |
| Risk Assessment | The NVD-assigned CVSS 3.1 score of 4.4 (Medium) uses vector AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:N. … Full risk analysis with EPSS, KEV, and SSVC signal comparison available after sign-in. |
| Exploit Scenario | Full exploit scenario with step-by-step reproduction available after sign-in. |
| Remediation | Vendor-released patches are available: upgrade backpack/crud to version 6.8.14 (release notes: https://github.com/Laravel-Backpack/CRUD/releases/tag/6.8.14) or version 7.0.38 (https://github.com/Laravel-Backpack/CRUD/releases/tag/7.0.38). … Detailed patch versions, workarounds, and compensating controls in full report. |
Threat intelligence, references, and detailed analysis are available after sign-in.
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
Same weakness CWE-79 – Cross-site Scripting (XSS)
View allShare
External POC / Exploit Code
Leaving vuln.today
GHSA-8hw4-7qjr-3wxg