The vulnerability stems from how group assignments were handled in the CMS interface. The pre-patch version of getCMSFields used Group::get() without admin group exclusion for non-admins when building the DirectGroups listbox. The security check in onChangeGroups only validated group changes but didn't prevent admin groups from being displayed as assignable options in the UI. By using DirectGroups instead of the Groups relation, the frontend presentation layer bypassed backend security validation, making the UI-level filtering in getCMSFields the critical vulnerable component. The patch specifically modifies this method to implement group filtering using disallowedGroups(), confirming this as the primary vulnerability location.