A flaw was found in Keycloak's Admin REST API group-membership endpoints. The PUT /admin/realms/{realm}/users/{id}/groups/{groupId} endpoint and the groups list accepted during user creation both verify only that the caller can manage group membership, without inspecting the roles the target group confers. A delegated administrator holding only the manage-users role can add their own account, or a newly created account, to a pre-existing group that maps realm-admin , thereby inheriting full administrative control of the realm. The direct role-assignment path correctly refuses this operation with HTTP 403, but the group-membership path bypasses that check entirely.
This is tracked as CVE-2026-94000 .
Reproduced against Keycloak 26.7.3 ( quay.io/keycloak/keycloak:26.7.3 ).
Before adding a user to a group, Keycloak should verify that the caller is entitled to every role the group confers. If the group maps an administrative role the caller does not already hold, the request should be rejected with HTTP 403 Forbidden — consistent with the behavior of the direct role-assignment endpoint ( POST /admin/realms/{realm}/users/{id}/role-mappings/realm ), which already enforces this check via requireMapRole / checkAdminRoles .
PUT /admin/realms/{realm}/users/{id}/groups/{groupId} succeeds with HTTP 204 regardless of which roles the target group maps. A manage-users holder who joins a group that maps realm-admin obtains full realm-admin privileges on their token, including the ability to grant realm-admin to other users — an action Keycloak permits only to callers who already hold that role.
Root cause: UserResource.joinGroup calls only requireManageGroupMembership and requireManageMembership , both of which are satisfied unconditionally by manage-users . The UsersResource.createUser groups callback has the identical gap. Neither call site checks the roles the group carries. The SCIM path already has an equivalent guard ( isAdminGroup ); the Admin REST path does not.
Related issues: [KEYCLOAK-883] - Code cleanup and refactoring. #970 / CVE-2026-18571 fixed the createGroups callback but did not fix UserResource.joinGroup . KEYCLOAK-1213 Installation file for bearer-only doesn't include auth-ser... #1148 is a sibling issue achieving the same escalation via composite role name-only matching. phased broker mapper changes #1146 shows this path is reachable from view-clients by chaining through a service-account secret.
CVE record:
This issue was originally tracked in the private repository. Migrated by @abstractj .
abstractj added priority/important Must be worked on very soon Must be worked on very soon area/admin/fine-grained-permissions Fine-grained admin permissions (FGAP v2) — per-resource authorization Fine-grained admin permissions (FGAP v2) — per-resource authorization kind/cve Issues identified as CVEs on third-party dependencies, or issues which Keycloak is not affected Issues identified as CVEs on third-party dependencies, or issues which Keycloak is not affected backport/main on Sep 22, 2026
abstractj added the cve issue type on Sep 22, 2026
abstractj added team/core-iam backport/26.4 backport/26.6 on Sep 22, 2026
github-project-automation added this to Keycloak Roadmap on Sep 22, 2026
github-project-automation moved this to Open in Keycloak Roadmap on Sep 22, 2026
ahus1 changed the title [-] [CVE-2026-94000] Keycloak: A delegated admin with only `manage-users` can become `realm-admin` by joining (or being created into) a group that maps an admin role [/-] [+] [CVE-2026-94000] A delegated admin with only `manage-users` can become `realm-admin` by joining (or being created into) a group that maps an admin role [/+] on Sep 22, 2026
vramik self-assigned this on Sep 23, 2026
pedroigor added a commit that references this issue on Sep 30, 2026 Prevent privilege escalation via group membership to admin-role groups This issue will close once commit 308b6b2 is merged into the 'master' branch. 308b6b2
Prevent privilege escalation via group membership to admin-role groups
vramik added 2 commits that reference this issue on Sep 30, 2026 Prevent privilege escalation via group membership to admin-role groups This issue will close once commit b592bb9 is merged into the 'master' branch. b592bb9 Prevent privilege escalation via group membership to admin-role groups This issue will close once commit 3ec4cb4 is merged into the 'master' branch. 3ec4cb4
Prevent privilege escalation via group membership to admin-role groups
Prevent privilege escalation via group membership to admin-role groups
github-actions added release/26.9.0 on Sep 30, 2026
stianst added a commit that references this issue on Sep 30, 2026 Prevent privilege escalation via group membership to admin-role groups This issue will close once commit b84fb15 is merged into the 'main' branch. b84fb15
Prevent privilege escalation via group membership to admin-role groups
stianst added release/27.0.0 and removed release/26.9.0 backport/26.4 on Oct 1, 2026
vramik added backport/26.8 on Oct 1, 2026
PadzerButch added a commit that references this issue on Oct 2, 2026 Prevent privilege escalation via group membership to admin-role groups This issue will close once commit ea87120 is merged into the 'main' branch. ea87120
Prevent privilege escalation via group membership to admin-role groups
pedroigor added a commit that references this issue on Oct 5, 2026 Prevent privilege escalation via group membership to admin-role groups This issue will close once commit 175ef07 is merged into the 'main' branch. 175ef07
Prevent privilege escalation via group membership to admin-role groups
github-actions added release/26.8.1 and removed backport/26.8 on Oct 5, 2026
pedroigor added a commit that references this issue on Oct 5, 2026 Prevent privilege escalation via group membership to admin-role groups This issue will close once commit da63c2f is merged into the 'master' branch. da63c2f
Prevent privilege escalation via group membership to admin-role groups
vramik added a commit that references this issue on Oct 6, 2026 Prevent privilege escalation via group membership to admin-role groups This issue will close once commit fd6f86d is merged into the 'master' branch. fd6f86d
Prevent privilege escalation via group membership to admin-role groups
pedroigor added a commit that references this issue on Oct 7, 2026 Prevent privilege escalation via group membership to admin-role groups This issue will close once commit 7461987 is merged into the 'main' branch. 7461987
Prevent privilege escalation via group membership to admin-role groups
github-actions added release/26.6.8 and removed backport/26.6 on Oct 7, 2026
Keycloak Roadmap Status Done Show more project fields
The full story
This article is one source in a clustered incident — the cluster page carries the summary, timeline and every other outlet covering it.
