Description
EasyAdmin is a fast and modern admin generator for Symfony applications. From 4.0.0 until 4.29.16 and 5.5.1, EasyAdmin serves all backend requests through a single dashboard route and, for custom actions (Action::linkToRoute() and MenuItem::linkToRoute()), swaps the executed controller based on the routeName query parameter on the kernel.controller event. The swap happens after Symfony's security firewall has already evaluated access_control against the original dashboard URL, and the routeName value was not validated. As a result, a path-based access_control rule protecting the target route was never evaluated, so a low-privilege backend user who can reach a single EasyAdmin URL and knows a target route's name can execute that route's controller, bypassing the path-based rule. Only path-based protections are bypassed. Routes whose controller enforces its own authorization with #[IsGranted] or denyAccessUnlessGranted() remain protected because those checks are recomputed against the swapped-in controller. This issue is fixed in versions 4.29.16 and 5.5.1.
Published: 2026-08-31
Score: 8.1 High
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

EasyAdmin’s dispatcher swaps a custom action controller based on a query parameter after Symfony’s firewall has already evaluated access_control for the original dashboard URL. Because the injected routeName value is not validated, the security firewall never checks the new route’s path‑based access_control rule, allowing a low‑privilege backend user to execute a protected controller by simply knowing the target route name. The flaw fulfills CWE‑639 (privilege escalation through access control), CWE‑862 (missing authorization checks), and CWE‑863 (unchecked change of role before authorization). The impact is that an attacker can invoke arbitrary backend functionality beyond the intended permissions, potentially exposing data or modifying system state, while the user’s error handling remains unchanged.

Affected Systems

EasyCorp’s EasyAdminBundle in all Symfony‑compatible versions from 4.0.0 up to and including 4.29.16 and 5.5.1 vulnerable to the dispatcher bypass. Users of these bundles who expose a custom‑action link that swaps the controller via the routeName parameter are affected.

Risk and Exploitability

The CVSS score of 8.1 indicates high severity, and the vulnerability is not indexed in CISA KEV, though its EPSS score is unavailable. An attacker would need web access to the EasyAdmin dashboard and knowledge of a target route name. Since the bypass only applies to path‑based access_control, routes protected by in‑controller checks (e.g., #[IsGranted]) remain safe. The attack path requires minimal reconnaissance and is achievable from any user with dashboard access, making the risk tangible for applications that rely solely on path‑based rules for backend protection.

Generated by OpenCVE AI on August 31, 2026 at 21:35 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply the latest EasyAdminBundle release (v4.29.16 for the 4.x series or v5.5.1 for the 5.x series) to remove the dispatcher flaw
  • If upgrading is not immediately possible, block or remove any custom-action links that use the routeName parameter and enforce access at the controller level using #[IsGranted] or denyAccessUnlessGranted()
  • Restrict the EasyAdmin dashboard URL with additional firewall rules or authentication so that only fully authorized administrators can access it, limiting the potential exposure of the vulnerability

Generated by OpenCVE AI on August 31, 2026 at 21:35 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 31 Aug 2026 20:45:00 +0000

Type Values Removed Values Added
Description EasyAdmin is a fast and modern admin generator for Symfony applications. From 4.0.0 until 4.29.16 and 5.5.1, EasyAdmin serves all backend requests through a single dashboard route and, for custom actions (Action::linkToRoute() and MenuItem::linkToRoute()), swaps the executed controller based on the routeName query parameter on the kernel.controller event. The swap happens after Symfony's security firewall has already evaluated access_control against the original dashboard URL, and the routeName value was not validated. As a result, a path-based access_control rule protecting the target route was never evaluated, so a low-privilege backend user who can reach a single EasyAdmin URL and knows a target route's name can execute that route's controller, bypassing the path-based rule. Only path-based protections are bypassed. Routes whose controller enforces its own authorization with #[IsGranted] or denyAccessUnlessGranted() remain protected because those checks are recomputed against the swapped-in controller. This issue is fixed in versions 4.29.16 and 5.5.1.
Title EasyAdmin custom-action dispatcher bypasses access_control on other routes
Weaknesses CWE-639
CWE-862
CWE-863
References
Metrics cvssV3_1

{'score': 8.1, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-08-31T20:38:06.196Z

Reserved: 2026-08-27T17:48:42.123Z

Link: CVE-2026-81892

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-31T21:17:52.927

Modified: 2026-08-31T21:17:52.927

Link: CVE-2026-81892

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-31T21:45:04Z

Weaknesses
  • CWE-639

    Authorization Bypass Through User-Controlled Key

  • CWE-862

    Missing Authorization

  • CWE-863

    Incorrect Authorization