GHSA-9FW9-8C49-QCH8

Vulnerability from github – Published: 2026-08-20 18:38 – Updated: 2026-08-20 18:38
VLAI
Summary
Laravel Backpack CRUD: MyAccountController allows changing the login email without a current-password check
Details

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 — 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
Show details on source website

{
  "affected": [
    {
      "package": {
        "ecosystem": "Packagist",
        "name": "backpack/crud"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "6.0.0"
            },
            {
              "fixed": "6.8.14"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    },
    {
      "package": {
        "ecosystem": "Packagist",
        "name": "backpack/crud"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "7.0.0"
            },
            {
              "fixed": "7.0.38"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "aliases": [
    "CVE-2026-54176"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-287",
      "CWE-620"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2026-08-20T18:38:30Z",
    "nvd_published_at": null,
    "severity": "MODERATE"
  },
  "details": "## Summary\n\n`MyAccountController::postAccountInfoForm` allows an authenticated user to update\nthe authentication column (default: `email`) without verifying their current password.\nBecause email is the account-recovery anchor, this enables account takeover after\nthe attacker\u0027s session ends: the new email address can be used to request a password\nreset from outside the system.\n\nThe password-change endpoint in the same controller correctly requires `old_password`\nverification, so the gap is asymmetric.\n\n## Details\n\nThe `postAccountInfoForm` action passes `$request-\u003evalidated()` directly to\n`$user-\u003eupdate()`. The `AccountInfoRequest` whitelists the authentication column\n(`email` by default) with no ownership challenge. Contrast this with\n`ChangePasswordRequest`, which uses `Hash::check` against the stored password before\nallowing any change.\n\nScenarios where this is exploitable include:\n- A brief unauthorized session (e.g. unattended workstation, XSS in the admin panel)\n- An insider/offboarding case where a departing admin sets a personal email address\n  before access is revoked, then resets the password after leaving\n\n## Patch\n\nFixed in [#5990](https://github.com/Laravel-Backpack/CRUD/pull/5990) \u2014 the\nauthentication column is now protected by a `current_password` check (mirroring\n`ChangePasswordRequest`) whenever its value changes.\n\nA stronger mitigation \u2014 sending a verification link to the new address before\npersisting the change \u2014 can be layered on top using Laravel\u0027s `MustVerifyEmail` flow.\n\n## Affected versions\n\nAll versions prior to 6.8.14 / 7.0.38.\n\n## Fixed versions\n\n- 6.x: 6.8.14\n- 7.x: 7.0.38",
  "id": "GHSA-9fw9-8c49-qch8",
  "modified": "2026-08-20T18:38:30Z",
  "published": "2026-08-20T18:38:30Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://github.com/Laravel-Backpack/CRUD/security/advisories/GHSA-9fw9-8c49-qch8"
    },
    {
      "type": "WEB",
      "url": "https://github.com/Laravel-Backpack/CRUD/pull/5990"
    },
    {
      "type": "PACKAGE",
      "url": "https://github.com/Laravel-Backpack/CRUD"
    },
    {
      "type": "WEB",
      "url": "https://github.com/Laravel-Backpack/CRUD/releases/tag/6.8.14"
    },
    {
      "type": "WEB",
      "url": "https://github.com/Laravel-Backpack/CRUD/releases/tag/7.0.38"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:N",
      "type": "CVSS_V3"
    }
  ],
  "summary": "Laravel Backpack CRUD: MyAccountController allows changing the login email without a current-password check"
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…