GHSA-vgmv-8xjc-6rch
Laravel Backpack CRUD: CRUD panel query scopes are not enforced on Update, Delete, and Reorder (cross-tenant IDOR)
Quick fix
GHSA-vgmv-8xjc-6rch — backpack/crud: upgrade to the fixed version with the command below.
composer require backpack/crud:^6.8.14 Details
## Summary
Backpack CRUD's list and read operations correctly apply any query scopes registered via `addClause()` / `addBaseClause()` (e.g. tenant isolation, user ownership). However, the **Update**, **Delete**, and **Reorder** operations bypassed these scopes, fetching records directly from the unscoped model query.
An authenticated user who knows or can guess a record's primary key could therefore update, delete, or reorder records that should be invisible to them — a classic IDOR on write paths.
Applications that rely on `addBaseClause` for row-level access control (multi-tenancy, per-user data isolation) are affected.
## Impact
Any Backpack CRUD panel that uses `addBaseClause` or `addClause` to restrict which rows a user may access is affected on its write operations. An authenticated low-privilege user can modify or delete records belonging to other tenants / users.
## Patches
Apply the fixed release for your major version:
- **v6**: upgrade to **6.8.14** or later - **v7**: upgrade to **7.0.38** or later
The fix ensures Update, Delete, and Reorder all resolve records through the same scoped query used by the read side.
## Workarounds
If you cannot upgrade immediately, add explicit `Gate` / `Policy` checks in your `CrudController`'s `update()`, `destroy()`, and `reorder()` methods to verify the authenticated user is permitted to act on the resolved record.
## Credits
Reported by Vishal Shukla ([@shukla304](https://github.com/shukla304)).
Are you affected?
Enter the version of the package you're using.
Affected packages
6.0.0 Fixed in: 6.8.14 composer require backpack/crud:^6.8.14 7.0.0 Fixed in: 7.0.38 composer require backpack/crud:^7.0.38