The vulnerability in Concrete CMS allows any authenticated user with access to the "Bulk User Assignment" dashboard page to escalate their privileges. The root cause is a lack of authorization checks in the concrete/controllers/single_page/dashboard/users/bulk_user_assignment.php controller.
Specifically, the submit() function in the Concrete\Controller\SinglePage\Dashboard\Users\BulkUserAssignment controller did not verify if the user had the necessary permissions to assign or unassign the selected user groups. This allowed a low-privileged user to add any user (including themselves) to any group, such as the "Administrators" group, leading to a full privilege escalation. The view() function also lacked a permission check, making the vulnerable functionality accessible to a wider range of authenticated users.
The patch for CVE-2026-8350 introduces several checks:
- It adds a
canAccessGroupManagement() permission check in both the view() and submit() methods to ensure only authorized users can access and use this feature.
- It introduces a new
validateGroupSelection() method which checks the canAssignGroup() permission for each group being assigned or unassigned. This prevents users from assigning groups they are not supposed to manage.
- The list of available groups is now filtered by
filterByAssignable(), ensuring users only see and can select groups they are permitted to assign.
During exploitation, a runtime profiler would show calls to Concrete\Controller\SinglePage\Dashboard\Users\BulkUserAssignment::view() when accessing the page, and Concrete\Controller\SinglePage\Dashboard\Users\BulkUserAssignment::submit() when the malicious group assignment is performed.