backpack/crud security advisory
CVE-2026-54181: Laravel Backpack CRUD: Stored XSS in the color column — the @if($column['escaped']) branches are inverted
CVE-2026-54181 is a medium-severity stored XSS vulnerability in the PHP package backpack/crud (CVSS 5.4), published 14 September 2026. It is fixed in 6.8.14 and 7.0.38, one per release line; earlier versions on each line are affected. Exploiting it needs a low-privilege user account.
medium 5.4 published 2026-09-14 · updated 2026-09-30
- Affected versions
- >= 6.0.0, < 6.8.14
>= 7.0.0, < 7.0.38 - Fixed in
- 6.8.14, 7.0.38
- Newest release
- 7.1.24
- Severity
- Medium · CVSS 5.4
- Type
- Stored cross-site scripting (XSS)
CWE-79, CWE-1023 - Exploited in the wild
- Not on the CISA KEV list
checked 2026-11-04
Is your backpack/crud version affected?
Who can exploit CVE-2026-54181
- Access: A normal, low-privilege user account in the app.
- Interaction: A user also has to do something, such as open a link or a page the attacker prepared.
CVSS vector (scored by GitHub): CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
How to fix CVE-2026-54181 in backpack/crud
- Find the installed version:
composer show backpack/crud. If you never required it yourself,composer why backpack/crudshows which package pulls it in. - Update it:
composer update backpack/crud --with-all-dependencies. You need the fixed version for your release line (6.8.14 and 7.0.38). - If Composer will not go that high, your composer.json constraint is holding it back. Widen it (for example
"backpack/crud": "^7.0.38"if you can take that version), or upgrade the package that requires it. - Run
composer audit. It reads the same advisory data and should no longer list CVE-2026-54181. - Commit composer.lock and deploy it. On the server, run
composer install --no-devfrom the lock file, notcomposer update.
If you cannot upgrade yet
- Escape output in your own templates and add a Content-Security-Policy that blocks inline scripts.
- Limit who can save the content the advisory names (for example rich text, SVG or form fields).
- If your app does not use the affected feature, note that in your audit, but still plan the upgrade.
The CVE-2026-54181 advisory
backpack/crud provides Create, Read, Update & Delete (CRUD) functions for Backpack, a collection of Laravel packages that help users build custom administration panels. From 6.0.0 until 6.8.14 and 7.0.38, src/resources/views/crud/columns/color.blade.php inverts the escaped and raw rendering branches controlled by $column['escaped'], which defaults to true, causing $column['text'] to be rendered unescaped by default. An attacker who can store an unsanitized value in a color column can execute script in the browser of a user who views the CRUD list, including an administrator, with access to the victim's session-backed application capabilities. Exploitation requires write access to the stored color value and a victim viewing the list. This issue is fixed in versions 6.8.14 and 7.0.38.
References
- GitHub advisory GHSA-mmg4-322v-6jvc github.com
- Fix commit 608652b github.com
- Fix commit 76c3a6e github.com
- Pull request #5992 github.com
- Pull request #5994 github.com
- Release 6.8.14 github.com
- Release 7.0.38 github.com
Other backpack/crud advisories
- medium CVE-2026-57570: Laravel Backpack CRUD: HasMany/MorphMany relation fields allow cross-tenant record re-parenting (IDOR) via attachManyRelation 2026-08-20
- high CVE-2026-54182: Laravel Backpack CRUD: OS command injection in Stats::makeCurlRequest via attacker-controlled Host header (pre-auth) 2026-08-20
- high CVE-2026-54180: Laravel Backpack CRUD: CRUD panel query scopes are not enforced on Update, Delete, and Reorder (cross-tenant IDOR) 2026-08-20
- medium CVE-2026-54179: Laravel Backpack CRUD: SingleBase64Image accepts any base64 payload behind a data:image prefix — SVG-with-script lands on the public disk 2026-08-20
- high CVE-2026-54178: Laravel Backpack CRUD: Arbitrary file deletion via attacker-controlled clear_<attr>[] in HasUploadFields::uploadMultipleFilesToDisk 2026-08-20
- medium CVE-2026-54177: Laravel Backpack CRUD: HasUploadFields keeps the attacker-supplied file extension — public-disk uploads of shell.php reach the webserver 2026-08-20
Related
Need help patching or upgrading? Laskyr does PHP and Laravel security fixes and upgrades. Tell us what you run and we reply with a plan and a price.
Ask about a fixWhere this data comes from
- Affected and fixed versions: the Packagist security advisories API (GitHub Advisory Database and FriendsOfPHP), the same data
composer audituses. Synced 2026-11-03. - Description, score, weakness and references: NIST National Vulnerability Database (NVD), checked 2026-11-04. This product uses data from the NVD API but is not endorsed or certified by the NVD.
- Exploited-in-the-wild status: the CISA Known Exploited Vulnerabilities catalog, checked 2026-11-04.
- Compiled by Daniel Lasek at Laskyr from the sources above. The summary, “who can exploit it”, “how to fix it” and hardening sections are our plain-English reading of the record and are generated from it. The quoted description is the record's own text. Spot an error? Tell us.