CVE-2026-54176
mediumpriority · track · 0EPSS 0.006 · 51 %ileUSEPSS · scored 2026-10-27
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, MyAccountController::postAccountInfoForm at POST /admin/edit-account-info permits AccountInfoRequest to update backpack_authentication_column(), which is email by default, without requiring current_password or otherwise verifying the account's existing password. An attacker with a temporary authenticated Backpack session can change the account-recovery email and later use the password-reset flow after the original session expires, converting session compromise into persistent account takeover. The same mechanism permits an insider to set a personal recovery address before access is revoked. The separate password-change endpoint is not affected because it verifies old_password. This issue is fixed in versions 6.8.14 and 7.0.38.
cvss
Technical severity, 0–10. One row per scoring source.
base score 0–10 · higher = more severe · hover a vector to decode
ssvc
A stakeholder decision — act, attend, or track — from exploitation and impact.
weaknesses
The CWE weakness classes this flaw belongs to.
affected products (2)
Products and version ranges known to be affected.
advisories (1)
Vendor and ecosystem advisories describing this.
- GHSA-9fw9-8c49-qch8Laravel Backpack CRUD: MyAccountController allows changing the login email without a current-password check2026-08-20ghsa · osvUS
## Summary `MyAccountController::postAccountInfoForm` allows an authenticated user to update the authentication column (default: `email`) without verifying their current password. Because email is the account-recovery anchor, this enables account takeover after the attacker's session ends: the new email address can be used to request a password reset from outside the system. The password-change endpoint in the same controller correctly requires `old_password` verification, so the gap is asymmetric. ## Details The `postAccountInfoForm` action passes `$request->validated()` directly to `$user->update()`. The `AccountInfoRequest` whitelists the authentication column (`email` by default) with no ownership challenge. Contrast this with `ChangePasswordRequest`, which uses `Hash::check` against the stored password before allowing any change. Scenarios where this is exploitable include: - A brief unauthorized session (e.g. unattended workstation, XSS in the admin panel) - An insider/offboarding case where a departing admin sets a personal email address before access is revoked, then resets the password after leaving ## Patch Fixed in [#5990](https://github.com/Laravel-Backpack/CRUD/pull/5990) — the authentication column is now protected by a `current_password` check (mirroring `ChangePasswordRequest`) whenever its value changes. A stronger mitigation — sending a verification link to the new address before persisting the change — can be layered on top using Laravel's `MustVerifyEmail` flow. ## Affected versions All versions prior to 6.8.14 / 7.0.38. ## Fixed versions - 6.x: 6.8.14 - 7.x: 7.0.38
sources
Which sources assert this record, and when.
references (7) nvd
External citations — patches, advisories, analysis.
- https://github.com/Laravel-Backpack/CRUD/commit/76c3a6e50e3fbd6d5f633208da5b04acb8322969
- https://github.com/Laravel-Backpack/CRUD/commit/8ab94543d880b03c1189acb96b78186323c62a0b
- https://github.com/Laravel-Backpack/CRUD/pull/5990
- https://github.com/Laravel-Backpack/CRUD/pull/5994
- https://github.com/Laravel-Backpack/CRUD/releases/tag/6.8.14
- https://github.com/Laravel-Backpack/CRUD/releases/tag/7.0.38
- https://github.com/Laravel-Backpack/CRUD/security/advisories/GHSA-9fw9-8c49-qch8
Attackers weaponise vulnerabilities like this against internet-exposed services. See what is exposed on your perimeter with a free passive scan.
Free scan