Grav Privilege Escalation via Group Blueprint ACL Bypass
A missing 'security@' guard in Grav's group blueprint allows an 'admin.users' operator to escalate privileges to 'admin.super' by modifying group access configurations.
CVE search metadata
CVE search record: CVE-2026-75837. Severity: critical. CVSS: 9.1. EPSS: 0.34%. KEV: no. Product: Grav (<= 2.0.12), grav (<= 2.0.14), grav (<= 2.0.15). Brief: Grav Privilege Escalation via Group Blueprint ACL Bypass. Brief link: https://feed.craftedsignal.io/briefs/2026-09-grav-privilege-escalation/
What's new
Grav version 2.0.12 and earlier contains a privilege escalation vulnerability within its Flex group management functionality. The core group blueprint file located at system/blueprints/user/group.yaml omits a mandatory security@: admin.super guard on the group access field. In the Grav Flex architecture, the security@ guard is the primary mechanism that flags fields for exclusion during the data save path for non-super users.
Because this guard is missing from the group blueprint, a delegated administrator holding only admin.users.update permissions can successfully submit a request to update a group's access map. By injecting admin.super: true into the group's access configuration, the attacker effectively grants the 'super-admin' role to all members of that group. This escalation provides full administrative control over the application, including access to the scheduler, which can be leveraged for Remote Code Execution (RCE) via cron jobs, and potential Twig template evaluation.
Attack Chain
- Initial Access: The attacker authenticates as a user with
admin.users.updatepermissions, which is typically granted to delegated administrators responsible for user management. - Discovery: The attacker identifies that they can modify group access configurations, as the application exposes groups at the
admin.users:crudlpath, which the attacker has permission to update. - Form Submission: The attacker sends a
POSTrequest to the/admin/accounts/groups/endpoint, embedding the malicious payloadaccess[admin][super]=truewithin the group update data. - Blueprint Bypass: The system's
Blueprint::dynamicSecuritycheck fails to flag theaccessfield as restricted because thegroup.yamlblueprint lacks the requiredsecurity@: admin.superdeclaration. - Validation Bypass: The
BlueprintSchema::filterArrayandValidation::filterArraylogic processes the payload and retains the restrictedadmin.superkey because the input is not marked for filtering. - Persistence: The application saves the unauthorized access configuration to
user://config/groups.yamlvia theFlexObject::update()path without further authorization checks. - Privilege Escalation: Upon the next request, the
UserGroupObject::authorize('admin.super')method evaluates the modified group ACL and returns true, promoting the attacker to full super-admin status. - Impact: The attacker utilizes the escalated super-admin privileges to access the administrative dashboard, modify scheduler tasks, or execute malicious Twig templates to achieve RCE.
Impact
Successful exploitation results in full administrative control (C:H/I:H/A:H) over the Grav instance. The attacker gains the ability to manage all users, execute arbitrary code via the scheduler, and modify system files. This vulnerability affects all Grav versions up to and including 2.0.12.
Recommendation
Prioritized actions for security and IT operations teams:
- Update Grav to version 2.0.14 or later immediately to incorporate the required blueprint security guards.
- Audit existing
user://config/groups.yamlfiles for any unauthorizedadmin.super: trueentries in group access maps. - Review all users currently holding the
admin.usersrole to identify accounts that should not have the ability to modify group permissions. - Use server-side web application logs to monitor for unauthorized
POSTrequests to/admin/accounts/groups/originating from non-super-admin accounts.
Immediate actions
Upgrade Grav to version 2.0.14 or later.
Threat Hunt
Look for POST requests to /admin/accounts/groups/ followed by manual changes in group permissions.
Data: Web server access logs
Mitigations
Manually patch system/blueprints/user/group.yaml by adding 'security@: admin.super' to the access field if upgrading is delayed.
CVE-2026-75837
Detection coverage 1
Detect CVE-2026-74907 Exploitation Attempt - Path Traversal
highDetects path traversal attempts targeting the Grav static asset server by looking for directory traversal sequences within requests to potential asset routes.
Detection queries are available on the platform. Get full rules →