CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-79767

CVE-2026-79767: Authorization Bypass in Gardener API Server admission plugin

Alon Barad
Alon Barad
Software Engineer

Sep 23, 2026·7 min read·21 visits

Executive Summary (TL;DR)

Gardener's admission plugin failed to compare Group and ServiceAccount subjects during membership updates, enabling restricted project administrators to bypass permission checks and escalate access by injecting arbitrary groups.

An incorrect authorization vulnerability (CWE-863) in Gardener's customverbauthorizer admission plugin allows project administrators lacking the manage-members permission to inject arbitrary Group or ServiceAccount subjects, granting unauthorized access to project resources.

Vulnerability Overview

Gardener is an open-source system designed to orchestrate the management of Kubernetes clusters across multiple cloud providers. The Gardener API Server implements custom resource definitions (CRDs), including the Project resource, to partition clusters, users, and resources into administrative boundaries. To enforce access controls on these project boundaries, Gardener utilizes a dedicated admission plugin named customverbauthorizer.

The role of the customverbauthorizer admission plugin is to validate operations against custom RBAC verbs. Specifically, modifying the membership of a project (defined under Project.spec.members) is a highly sensitive action that normally requires the initiator to possess the manage-members custom verb authorization. This check ensures that a standard project administrator cannot arbitrarily elevate the privileges of other entities or introduce unauthorized external users into the project scope.

The vulnerability, identified as CVE-2026-79767 (and GHSA-gfjv-gqf2-c888), resides in the logic that determines if a membership modification has occurred. Due to an incomplete filtering mechanism within the validation code, changes involving Group and ServiceAccount subjects were completely omitted from comparison checks. This allows a project administrator who lacks the manage-members permission to execute update operations that inject unauthorized groups or service accounts directly into the project configuration.

Root Cause Analysis

The root cause of this vulnerability lies in the implementation of the helper function mustCheckProjectMembers inside the customverbauthorizer admission plugin. When an update request for a Project resource is processed, this function is called to determine if the membership list (Project.spec.members) has been modified in a way that necessitates the custom verb authorization check. The function compares the previous state of the members array against the newly requested state.

To perform this comparison, the plugin utilized a helper function named findHumanUsersWithRoles. This function was designed to extract and track only human user subjects from the members list, using the following logic to identify them:

func isHumanUser(subject rbacv1.Subject) bool {
	return subject.Kind == rbacv1.UserKind && !strings.HasPrefix(subject.Name, serviceaccount.ServiceAccountUsernamePrefix)
}

Because the comparison logic specifically queried for rbacv1.UserKind and excluded service account prefixes, any Subject of kind Group or ServiceAccount was silently ignored during the member extraction. Consequently, if an attacker updated a project to append a new Group subject (for example, the default system:authenticated group) or an external ServiceAccount subject, the comparison sets returned by findHumanUsersWithRoles for both the old and new specifications remained identical. The mustCheckProjectMembers function returned false, indicating that no restricted membership changes had occurred, and the API server processed the request without enforcing the manage-members authorization check.

Code Analysis and Logic Flow

A detailed review of the patch commit reveals how the vulnerability was introduced and remediated. The legacy code was based on an allowlist approach that strictly extracted human users, leaving all other subject types unmonitored. This logical gap meant that any non-human subject could be manipulated by unauthorized administrators.

// Legacy Vulnerable Implementation
func findHumanUsersWithRoles(members []core.ProjectMember) sets.Set[humanMembership] {
	result := sets.New[humanMembership]()
	for _, member := range members {
		if isHumanUser(member.Subject) {
			memberKey := humanMemberKey(member.Subject)
			for _, role := range member.Roles {
				result.Insert(humanMembership{member: memberKey, role: role})
			}
		}
	}
	return result
}

The patched implementation reverses this paradigm. It shifts from an allowlist of human users to a blocklist of local service accounts. The new helper function findNonServiceAccountsWithRoles extracts all subjects except those explicitly identified as local service accounts. This ensures that any modification to Group or external User subjects is caught during the evaluation.

// Patched Implementation
func findNonServiceAccountsWithRoles(members []core.ProjectMember) sets.Set[membership] {
	result := sets.New[membership]()
	for _, member := range members {
		if !isServiceAccountSubject(member.Subject) {
			memberKey := memberSubjectKey(member.Subject)
			for _, role := range member.Roles {
				result.Insert(membership{member: memberKey, role: role})
			}
		}
	}
	return result
}

The helper isServiceAccountSubject was also carefully designed to ensure service account groups (e.g., system:serviceaccounts) are not treated as local service accounts, preventing project admins from managing service account groups without authorization.

Exploitation Methodology

To exploit this vulnerability, an attacker must have administrative control over a Gardener project but must lack the manage-members custom verb permission. The attack is executed by directly modifying the spec.members section of the Project resource via the Kubernetes API.

In a standard scenario, the attacker identifies a target project where they are registered as a limited administrator. The existing members list contains only authorized human operators:

apiVersion: core.gardener.cloud/v1alpha1
kind: Project
metadata:
  name: target-project
spec:
  owner:
    apiGroup: rbac.authorization.k8s.io
    kind: User
    name: owner@example.com
  members:
  - roles:
    - admin
    subject:
      apiGroup: rbac.authorization.k8s.io
      kind: User
      name: restricted-admin@example.com

The attacker submits an HTTP PUT or PATCH request to update the project resource. They inject a new entry into the members array containing a broad Kubernetes group, such as the standard system:authenticated group, assigning it the admin role:

  members:
  - roles:
    - admin
    subject:
      apiGroup: rbac.authorization.k8s.io
      kind: User
      name: restricted-admin@example.com
  - roles:
    - admin
    subject:
      apiGroup: rbac.authorization.k8s.io
      kind: Group
      name: system:authenticated

Because the customverbauthorizer processes only human users, it compares the before-and-after user sets, finds them identical (both only containing restricted-admin@example.com), and permits the transaction. Once committed, any authenticated user in the cluster inherits project administrator capabilities, bypassing the intended RBAC boundaries.

Security Impact Assessment

The security impact of CVE-2026-79767 is classified as Medium with a CVSS v3.1 base score of 5.5. The vulnerability requires high privileges (PR:H) because the attacker must already possess an administrative role within the targeted project to modify the resource. However, the integrity impact is high (I:H) within the scope of the affected project.

Successful exploitation allows complete authorization bypass within the project boundary. By mapping the project's administrator role to generic groups (like system:authenticated) or external service accounts, an attacker can expose all resources managed within the project. This includes access to Shoots (the managed Kubernetes clusters), sensitive Kubernetes Secrets containing credentials, and cloud provider infrastructure integration tokens (e.g., AWS, Azure, GCP access keys).

This logical bypass weakens the multi-tenancy assurances provided by Gardener. Although it does not escape the boundary of the master Kubernetes API server, the compromise of project isolation allows lateral movement across any target clusters managed under the compromised project scope.

Remediation and Detection Guidance

The primary remediation step is to upgrade the Gardener deployment to a non-vulnerable release. Security teams should target the respective patch branches depending on their current deployment path:

  • Upgrade to 1.142.6 or higher (for 1.142.x deployments)
  • Upgrade to 1.143.3 or higher (for 1.143.x deployments)
  • Upgrade to 1.144.2 or higher (for 1.144.x deployments)
  • Upgrade to 1.145.0 or higher

To audit existing Gardener environments for active exploitation or misconfigurations, administrators can execute a script to identify any projects that contain non-human subjects in their members list. The following Bash script utilizes kubectl and jq to parse project resources:

#!/usr/bin/env bash
set -euo pipefail
 
echo "[*] Auditing Gardener Project resources for non-User subjects..."
PROJECTS_JSON=$(kubectl get projects -o json)
 
echo "$PROJECTS_JSON" | jq -r '
  .items[] | {
    name: .metadata.name,
    suspicious_members: [
      .spec.members[]? | select(.subject.kind != "User") | {
        kind: .subject.kind,
        name: .subject.name,
        roles: .roles
      }
    ]
  } | select(.suspicious_members | length > 0)
'

Additionally, security operations teams should analyze Kubernetes API server audit logs for update requests to the projects API endpoint. Audit entries where the user executing the change does not possess the manage-members custom verb, but the payload contains Group or ServiceAccount additions, indicate potential exploitation attempts.

Official Patches

GardenerOfficial Security Advisory

Fix Analysis (1)

Technical Appendix

CVSS Score
5.5/ 10
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:H/A:N

Affected Systems

Gardener API Server admission plugin (customverbauthorizer)

Affected Versions Detail

Product
Affected Versions
Fixed Version
Gardener
gardener
< 1.142.61.142.6
Gardener
gardener
>= 1.143.0, < 1.143.31.143.3
Gardener
gardener
>= 1.144.0, < 1.144.21.144.2
Gardener
gardener
< 1.145.01.145.0
AttributeDetail
CWE IDCWE-863 (Incorrect Authorization)
Attack VectorNetwork (AV:N)
CVSS Score5.5 (Medium Severity)
EPSS ScoreN/A
ImpactPrivilege Escalation / Authorization Bypass
Exploit StatusNone (No public exploits or active exploitation reported)
KEV StatusNot Listed in CISA KEV

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-863
Incorrect Authorization

The software performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly prove that the actor is authorized to perform the action.

Vulnerability Timeline

Patches developed and committed into Gardener repository branches.
2026-06-18
Vulnerability officially published in the CVE registry.
2026-09-22

References & Sources

  • [1]Gardener Security Advisory
  • [2]Vulnerability Fix Commit
  • [3]Fix Pull Request
  • [4]Release Tag Info v1.144.2

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•17 minutes ago•CVE-2026-46429
5.5

CVE-2026-46429: Unrestricted File Upload and Validation Bypass in GeoNode

GeoNode versions prior to 5.0.3 contain an unrestricted file upload vulnerability (CWE-434) within the document and dataset ingestion architecture. Authenticated low-privileged users can bypass upload validation via direct REST API interactions, file extension masquerading, metadata mutation via PATCH requests, or malicious archive submissions. This allows attackers to store and serve dangerous file types, alter on-disk file references, or trigger path traversal and resource exhaustion during archive extraction.

Amit Schendel
Amit Schendel
1 views•10 min read
•about 1 hour ago•CVE-2026-55649
6.3

CVE-2026-55649: Stored Cross-Site Scripting in GeoNode Document Metadata Abstract Field

CVE-2026-55649 is a stored Cross-Site Scripting (XSS) vulnerability in GeoNode versions prior to 5.0.3. The flaw exists because document abstract metadata fields are ingested via the metadata management pipeline and stored in the backend database without HTML sanitization or input neutralization. An authenticated attacker with privileges to create or edit document metadata can inject arbitrary HTML and JavaScript payloads into these fields. When another user, such as an administrator, views the affected document page or catalog listing, the unencoded payload is rendered into the Document Object Model (DOM) and executes within the victim's browser session.

Amit Schendel
Amit Schendel
4 views•9 min read
•about 2 hours ago•GHSA-QX75-2P3R-PWM5
7.7

CVE-2026-55622: Cross-Project Instance Copy Authorization Bypass in Canonical LXD and LXC Incus

CVE-2026-55622 (GHSA-qx75-2p3r-pwm5) is an improper access control vulnerability (CWE-284) in Canonical LXD and LXC Incus (tracked as GHSA-c9f5-j9c3-mhrg). In multi-tenant deployments utilizing project-based isolation, the REST API handler for instance creation via POST /1.0/instances verifies that the authenticated user has authorization in the destination project specified by the query parameter, but fails to verify whether the user holds read or view permissions for the source instance when executing a copy operation across projects. Consequently, an authenticated client restricted to a single project can clone instances or snapshots from unauthorized projects into their own project, resulting in complete disclosure of the target instance filesystem and embedded credentials.

Amit Schendel
Amit Schendel
3 views•11 min read
•about 3 hours ago•GHSA-7MR3-28H5-M5VX
7.7

GHSA-7mr3-28h5-m5vx: Authorization Bypass and Cross-Project Volume Copy in Canonical LXD

An authorization bypass vulnerability in Canonical LXD (tracked as GHSA-7mr3-28h5-m5vx and CVE-2026-55621, and as GHSA-64f3-v33m-w89f in Linux Containers Incus) allows an authenticated user with restricted project access to copy custom storage volumes and volume snapshots from unauthorized projects. The flaw resides in the storagePoolVolumesPost REST API handler, which verifies permissions on the destination project but fails to check whether the caller holds view entitlements on the source project or volume specified in the request body.

Alon Barad
Alon Barad
3 views•10 min read
•about 4 hours ago•GHSA-47W9-6R3F-938G
9.9

GHSA-47w9-6r3f-938g: Authorization Bypass and Host Root Command Execution in Canonical LXD and Incus

A missing authorization and configuration validation vulnerability in Canonical LXD and LXC Incus allows authenticated users within restricted projects to bypass project security boundaries. By smuggling prohibited low-level configuration directives (such as raw.lxc or raw.qemu) inside instance snapshots or backup archives, an attacker can restore these configurations within a restricted project and execute arbitrary commands with root privileges on the underlying host operating system.

Alon Barad
Alon Barad
4 views•11 min read
•about 5 hours ago•GHSA-JPF8-86F3-WP38
9.9

CVE-2026-48752: Arbitrary Host File Read and Write via Templates Symlink in Canonical LXD and Incus

A symbolic link traversal vulnerability (CWE-59) in Canonical LXD and Linux Containers Incus allows an authenticated user with image import permissions to read and write arbitrary files on the host filesystem. During image archive unpacking, the daemon fails to reject top-level symbolic links for the instance `templates` directory. Subsequent requests to the instance template API endpoints follow this symbolic link outside the instance storage directory with root privileges, enabling complete host compromise.

Amit Schendel
Amit Schendel
4 views•10 min read