Imagine onboarding a contractor to your GitHub org's docs-only team and discovering they can administer every production cluster in Rancher — because as far as Rancher is concerned, they are also on prod-admins, sre-oncall, and every other team in the org. No stolen tokens. No misconfigured role binding. They just logged in.
That was CVE-2026-41053, patched in Rancher v2.13.6 and v2.14.2 at the end of May 2026. A single low-privilege GitHub team membership was enough to inherit every team's Rancher permissions, and the bug sat in the exact layer most teams never audit: the identity provider's group-expansion logic.
The verdict up front
| Fact | Detail |
|---|---|
| CVE | CVE-2026-41053 (GHSA-4j6x-2764-m8gh) |
| Severity | CVSS 3.1 8.8 HIGH (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H), CWE-303 |
| Affected | Rancher 2.13.0–2.13.5 and 2.14.0–2.14.1 with the GitHub App auth provider enabled |
| Fixed in | v2.13.6 and v2.14.2 (May 27, 2026) |
| Fix behavior | Upgrade triggers a mandatory refresh of all affected user principals |
If you run Rancher with GitHub authentication and you are on anything older than those patch releases, stop here and schedule the upgrade — the rest of this post explains why the patch alone is not the whole job. You also need to verify the principals refresh actually stripped the phantom memberships, because the bad data lived in stored user records, not just in a code path.
How GitHub teams become Rancher permissions
To see why this bug is so devastating, you need the three-link chain that connects a GitHub team to power over a cluster.
Link 1: group principals. When a user logs into Rancher through the GitHub App auth provider, Rancher resolves their GitHub team memberships into group principals — identifiers like team://my-org/prod-admins attached to the user's session and stored record. Principals are Rancher's native language for "who is this, and which groups do they speak for."
Link 2: the login allowlist. Rancher's auth config supports allowedPrincipalIds — an explicit list of user and group principals permitted to log in at all. Many teams gate Rancher access with entries like team://my-org/sre-oncall, meaning membership in that GitHub team is the login ticket.
Link 3: role bindings. Cluster roles, project roles, and global roles get bound to principals. Bind cluster-admin to team://my-org/prod-admins and everyone Rancher believes is on that team inherits it.
The entire chain rests on one assumption: that the set of group principals attached to a user equals the set of GitHub teams they actually belong to. CVE-2026-41053 broke exactly that assumption, at the worst possible layer — below every policy decision Rancher makes.
The broken loop: all org teams instead of yours
Per the advisory and the DailyCVE writeup, the GitHub App provider's team-membership expansion logic mishandled its cached data. Instead of consulting the correctly cached per-user membership list, the evaluation code iterated over all teams defined in the entire GitHub organization and minted group principals for each of them.
Concretely, the failure mode was:
- Attacker belongs to exactly one team — say,
docs-only. - At login, Rancher expands memberships by walking the org's team roster, not the user's roster.
- The user walks away with group principals for
docs-onlyandprod-adminsandbillingand everything else. - Every downstream check — login allowlist, cluster role bindings, project bindings, global bindings — passes against teams the user was never on.
Three preconditions all had to hold for exploitation, which is also your triage checklist:
- The GitHub App authentication provider is enabled and configured for the target org.
- The attacker holds a valid GitHub account with membership in at least one team in that org (zero teams means zero expansion — the bug needs one seed membership to over-expand from).
- Some other team in the same org is mapped to Rancher RBAC roles or named in the login allowlist.
Note what is absent from that list: any sophistication. Network-accessible, low privileges required, no user interaction, and full confidentiality/integrity/availability impact once the inherited role is powerful enough. That combination is precisely what the 8.8 score encodes.
The CVE's classification is telling, too: CWE-303, incorrect implementation of authentication algorithm. Authentication itself worked — the user really was who GitHub said they were. What was implemented incorrectly was the authorization derivation: the algorithm that turns "authenticated as X" into "X may act as these groups." That distinction is why the bug was so quiet. Nothing errored, nothing logged a failure, no login was ever denied. Every affected user's effective permissions were simply a silent superset of what they should have been, visible only if you diffed Rancher's stored principals against GitHub's actual team rosters — a comparison almost nobody runs until after an incident forces it.
Why this one stung: May 2026 was a bad month for Rancher multitenancy
CVE-2026-41053 did not land in isolation. It was part of a brutal May for Rancher's isolation story:
- CVE-2026-41050 (CVSS 9.9, early May): Fleet's Helm deployer failed to enforce ServiceAccount impersonation in two code paths, letting a tenant with mere
git pushaccess to a Fleet-monitored repo read secrets from any namespace on every downstream cluster. Same theme — a trusted intermediary (Fleet, the auth provider) silently widening authority beyond what was granted. - CVE-2026-41052 (same patch release): the built-in
project-ownerrole was stripped of theupdatepsaverb — another overly broad default grant, fixed in the same v2.13.6/v2.14.2 shipment. - CVE-2026-25705 (CVSS 8.4): a Rancher Extensions path traversal enabling code injection.
And the pattern is older than May. CVE-2025-23389 (CVSS 8.4) was an improper account-binding validation in Rancher's SAML provider that enabled user impersonation. Identity-provider binding bugs — the seam where an external directory's notion of "who" meets Rancher's notion of "allowed" — keep recurring across providers: SAML then, GitHub now. If your threat model treats the IdP integration as boring plumbing, Rancher's last eighteen months argue it deserves its own review slot.
The remediation checklist (upgrade plus verification)
Patching is step one of four. Because the phantom memberships were persisted into user principal records, you must confirm the cleanup, not just the binary version.
1. Upgrade to a fixed release. v2.14.2 if you track the 2.14 line, v2.13.6 for 2.13. Versions 2.12 and earlier are outside this advisory's affected range, but check the release notes for your line regardless — May shipped multiple security fixes.
2. Confirm the mandatory principals refresh ran. The fixed releases automatically trigger a refresh of affected users' principals on upgrade, removing incorrectly assigned team memberships. Verify it: after upgrading, spot-check users who previously carried suspiciously broad group principal sets and confirm they now resolve to only their real teams. If your upgrade path skipped the migration hook (restored backup, unusual rollout), assume the stale data is still there until proven otherwise.
3. Audit who had what. Pull each user's group principals and diff them against actual GitHub team membership. Pay special attention to bindings on powerful roles (cluster-admin, project-owner, global admin) that reference GitHub-team principals — anyone who authenticated through the buggy provider while holding one junk membership could have exercised those roles. Cross-reference Rancher audit logs for actions taken under team-derived bindings by users outside those teams.
4. Harden the seam going forward. Three cheap, durable lessons:
- Map teams least-privilege-first. Prefer narrow teams in
allowedPrincipalIdsand role bindings; an org-wide or catch-all team entry turns any future expansion bug into instant total compromise. - Test group expansion with a two-team fixture. The bug class is trivially detectable: a test user on team A must never resolve principals for team B. Any IdP integration — GitHub, SAML, OIDC, LDAP — deserves that test in CI, run against the real provider code path, not a mock that assumes correctness.
- Treat the IdP mapping as a security boundary. Cache layers in auth paths are where "iterate the wrong collection" bugs hide. Code review for auth-provider changes should explicitly ask: whose list are we iterating — the user's, or the directory's?
The takeaway for self-hosted platforms
The uncomfortable lesson of CVE-2026-41053 is that the most dangerous line in the whole chain was not an RBAC rule anyone wrote — it was a loop bound in membership-expansion code nobody reviewed. Teams that carefully scope their ClusterRoles can still be undone one layer down, where an external identity gets translated into internal principals. Own that translation layer: test it, log it, and re-verify it after every upgrade.
Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own. Star the repo on GitHub or deploy your first app today.



