Skip to main content

Backpack CRUD EUVDEUVD-2026-77706

| CVE-2026-54175 HIGH
Unverified Password Change (CWE-620)
2026-08-20 https://github.com/Laravel-Backpack/CRUD GHSA-xpv2-hrfc-hw62
7.6
CVSS 3.1 · Vendor: https://github.com/Laravel-Backpack/CRUD
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain authenticated Backpack admin session via XSS or cookie theft
  2. Delivery
    Craft single POST request to /admin/edit-account-info
  3. Exploit
    Include password=attacker_value in request body
  4. Execution
    Eloquent hashed cast auto-hashes and persists new password
  5. Impact
    Log in as victim using attacker-controlled credentials after original session expires

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Password change verification
Exploitation Conditions

The attacker must hold a valid authenticated Backpack admin session - either legitimately (for self-privilege-escalation on additional $fillable fields) or obtained via XSS, session theft, malware, or a residual public-terminal session. The POST /admin/edit-account-info route must exist, which requires setup_my_account_routes=true in Backpack configuration - this is the default. The target user model must include password in its $fillable array; the canonical Laravel 11 App\Models\User (documented by Backpack as the admin model) does include it. The attack does NOT require knowledge of the victim's current password, does NOT require any privilege beyond a valid session, and is NOT blocked by the application's dedicated password-change flow. Exploitation is limited by: (1) session access is required - unauthenticated exploitation is not possible; (2) if setup_my_account_routes=false, the route does not exist; (3) if the application uses a custom user model with password absent from $fillable, the password-change vector is blocked, though other fillable fields may still be mass-assigned.

Impact

The NVD-assigned CVSS 3.1 score of 7.6 (AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:L) is consistent with the described attack: network-reachable, low complexity, requires only an authenticated session, delivers high integrity impact via irreversible password takeover. The low confidentiality impact likely reflects field enumeration potential and email exposure; the low availability impact reflects account lockout of the legitimate owner. No EPSS score was provided in the source data; no CISA KEV listing exists, and no public exploit code has been identified - these signals suggest limited opportunistic exploitation to date. However, real-world risk is elevated relative to raw CVSS in multi-admin or shared-workstation Backpack deployments, where XSS or session theft is a plausible precursor: the advisory explicitly tags XSS as an attack vector, and the attack requires only one HTTP POST with no current-password knowledge. Additionally, in deployments where the admin user model includes sensitive $fillable fields such as role_id, is_admin, or two_factor_secret - a common Laravel pattern - the effective impact expands to privilege escalation and 2FA disablement, which the base CVSS does not capture.

Exploit ScenarioDerived

An attacker compromises an admin's Backpack session via a stored XSS payload in an admin-visible CRUD field, extracting the session cookie. The attacker then sends a single authenticated POST to /admin/edit-account-info with the body name=victim&email=victim@example.com&password=attacker_chosen_password. Backpack's Eloquent model hashes the plaintext value via the hashed cast and persists it immediately. Even after the stolen session expires and the victim logs out, the attacker logs in using the victim's email and the newly set password, achieving persistent, privileged account access. No public exploit code has been identified, but the attack requires no tooling beyond a standard HTTP client.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Aug 20, 2026

Unverified password change in Laravel Backpack CRUD's account-info endpoint allows any authenticated Backpack admin to permanently take over their own or a hijacked session's account by mass-assigning the password field without supplying the current password. Affected versions are backpack/crud < 6.8.11 and 7.0.0-alpha.1 through 7.0.33, running on Laravel 11 with the default App\Models\User model whose $fillable includes password. The attack converts time-limited stolen session access into permanent credential control, bypassing the dedicated change-password flow that enforces old_password verification. No public exploit code or CISA KEV listing has been identified at time of analysis, but the attack is trivially constructable given full public advisory detail.

RemediationAI

Upgrade to backpack/crud 6.8.11 (v6 stable) or 7.0.34 (v7), released as GitHub tags https://github.com/Laravel-Backpack/CRUD/releases/tag/6.8.11 and https://github.com/Laravel-Backpack/CRUD/releases/tag/7.0.34 respectively. The fix (pull requests #5980 and #5981) replaces $request->except(['_token']) with $request->validated() in postAccountInfoForm, restricting persisted fields to only those validated by AccountInfoRequest. If immediate upgrade is not feasible, override postAccountInfoForm in a custom controller and apply an explicit allowlist: $request->only([backpack_authentication_column(), 'name']) before passing to update() - this preserves the change-password route as the sole path for password mutation. Note that the controller override must be maintained manually through future Backpack upgrades. As an additional defense layer, WAF rules blocking the password parameter on POST /admin/edit-account-info can reduce exposure, but this is a compensating control only; upgrade is the authoritative fix.

Affected VersionsENISA

CRUD 7.0.0, < 7.0.34
CRUD < 6.8.11

Affected Packages

composer backpack/crud fix: 6.8.11, 7.0.34
euvd crud fix: 6.8.11, 7.0.34

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in composer, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root cause is CWE-620 (Unverified Password Change) compounded by Eloquent ORM mass assignment. The MyAccountController::postAccountInfoForm action at src/app/Http/Controllers/MyAccountController.php:38 passes $request->except(['_token']) directly to Eloquent's update() method. Because AccountInfoRequest::validationData() narrows only what is *validated* - not what is *saved* - any field present in the model's $fillable array that is submitted in the POST body is persisted. For the canonical Laravel 11 App\Models\User model (which Backpack's installer documents as the admin user model), $fillable is ['name','email','password'] and the password attribute carries a hashed cast, so a submitted plaintext value is automatically bcrypt-hashed and written to the database. A separate POST /admin/change-password route exists (postChangePasswordForm) and enforces old_password verification via ChangePasswordRequest::withValidator, but the edit-account-info endpoint silently bypasses this control. Affected package is pkg:composer/backpack_crud (both the v6 stable and v7 branches), verified against PHP 8.4.7.

Know when PHP gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (https://github.com/Laravel-Backpack/CRUD) PRIMARY 7.6 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:L
vuln.today AI 7.6 HIGH

Requires authenticated Backpack session (PR:L, AV:N); low confidentiality from field enumeration; low availability from account lockout of the legitimate owner.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:L
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:H/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (https://github.com/Laravel-Backpack/CRUD).

CVSS VectorVendor: https://github.com/Laravel-Backpack/CRUD

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
High
Availability
Low

DescriptionCVE.org

Summary

The MyAccountController::postAccountInfoForm action bound to POST /admin/edit-account-info calls $this->guard()->user()->update($request->except(['_token'])). Because the controller uses except(['_token']) rather than $request->validated() or the restricted keys defined in AccountInfoRequest::validationData(), any column present in the user model's $fillable array is mass-assigned from the request, including password. Backpack ships a separate POST /admin/change-password route (postChangePasswordForm) that requires old_password verification via ChangePasswordRequest::withValidator. The edit-account-info endpoint silently bypasses that security control.

For the default Laravel 11 App\Models\User model - which Backpack's installer and documentation use as the canonical admin user model - $fillable is ['name','email','password']. The password cast is hashed, so a plaintext password=… form field is automatically hashed and persisted. Any attacker holding an authenticated Backpack session (session theft, stolen cookies, XSS, public-terminal residual session) can permanently take over the account by issuing one POST that includes password=<attacker_value>, with no knowledge of the victim's current password. This converts time-limited, session-bound access into persistent account takeover.

Vulnerable code

src/app/Http/Controllers/MyAccountController.php:38

php
public function postAccountInfoForm(AccountInfoRequest $request)
{
    $result = $this->guard()->user()->update($request->except(['_token']));
    ...
}

src/app/Http/Requests/AccountInfoRequest.php validationData() only narrows what gets validated (name, email column) - it does NOT narrow what is later saved.

Impact

  1. Persistent account takeover after session theft. An adversary holding any authenticated Backpack session cookie (XSS, malware, stolen device, shared workstation) can rewrite the victim's password and retain access indefinitely, even after the original session expires or the victim logs out. Without this bypass the equivalent action requires old_password, which the adversary does not have.
  2. Email pivot for full takeover. The same handler permits unverified change of the authentication column (email by default). A hijacked session can change the email to one the attacker controls and then use Backpack's password-reset flow as a backup channel.
  3. Mass-assignment of any other $fillable attribute. In real deployments where the admin user model carries fields such as role_id, is_admin, team_id, email_verified_at, two_factor_secret, etc., the same request mass-assigns those fields. This expands the impact to privilege escalation and 2FA disablement on apps that follow standard Laravel patterns of adding such columns to $fillable.

Fix recommendation

Replace $request->except(['_token']) with an explicit allowlist that mirrors AccountInfoRequest::validationData():

php
public function postAccountInfoForm(AccountInfoRequest $request)
{
    $data = $request->only([backpack_authentication_column(), 'name']);
    $result = $this->guard()->user()->update($data);
    ...
}

This preserves change-password as the sole path for password mutation (which already enforces old_password).

Coordinates

  • Repository: https://github.com/Laravel-Backpack/CRUD
  • Vulnerable file & line: src/app/Http/Controllers/MyAccountController.php:38 (release 6.8.10; master e7201c5)
  • Route: POST /admin/edit-account-info (default admin prefix; setup_my_account_routes=true)
  • Verified against: backpack/crud 6.8.10, laravel/framework 11.x, PHP 8.4.7
  • therawdev (responsible disclosure)

Reported by AI Agent sechub.dev and Vishal Shukla (@shukla304)

Executive ViewAI

Why It Matters

Laravel Backpack CRUD (versions below 6.8.11 and 7.0.34) allows authenticated administrators to permanently take over accounts by bypassing password verification. No public exploit identified at time of analysis. Organizations using affected versions risk admin account takeover if administrative sessions are compromised or stolen.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.4%
Top 68% exploitable
Prevalence
Medium
popular Laravel ecosystem admin panel package
Threat Intel
1
1 source
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

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

CVE-2012-1823 CRITICAL POC
9.8 May 11

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

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

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

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

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

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy