Логотип exploitDog
Консоль
Логотип exploitDog

exploitDog

github логотип

GHSA-gwxr-7h77-7777

Опубликовано: 17 июн. 2026
Источник: github
Github: Прошло ревью
CVSS3: 5.7

Описание

Capsule: Incomplete fix of CVE-2026-30963: singular/plural typo leaves namespaces/finalize unprotected

Summary

Capsule v0.13.2 webhook rules contain namespace/finalize (singular) instead of namespaces/finalize (plural). K8s requires plural. The finalize defense from CVE-2026-30963 fix is absent.

Details

PUT to /api/v1/namespaces/<ns>/finalize has resource=namespaces (plural). The singular rule never matches. matchPolicy: Equivalent does not compensate.

PoC

Confirmed on kind + Capsule v0.13.2. alice (non-admin with namespaces/finalize RBAC): kubectl label --as=alice = DENIED (control). kubectl replace --raw /finalize --as=alice = 200 OK (bypass). Tenant label changed.

Impact

Namespace tenant-label hijack. Same threat model as CVE-2026-30963. One-char fix: namespace/finalize -> namespaces/finalize. The CVE-2026-30963 fix in Capsule v0.13.2 added subresource entries to the namespace validating webhook, but charts/capsule/templates/configuration.yaml line 105 contains a singular/plural typo: namespace/finalize instead of namespaces/finalize. Kubernetes webhook rules require the plural resource name. The finalize subresource defense is entirely absent.

Details

In Kubernetes admission webhooks, rules.resources matches against the plural resource name. A PUT to /api/v1/namespaces/<ns>/finalize has resource=namespaces (plural). The rule namespace/finalize (singular) never matches any real API request.

The matchPolicy: Equivalent setting does NOT compensate (it handles API group/version variations, not resource name typos).

PoC

Confirmed on kind cluster + Capsule v0.13.2 (Helm chart):

# Setup: alice with namespaces/finalize RBAC kubectl apply -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: ns-finalize-updater rules: - apiGroups: [""] - resources: ["namespaces/finalize"] - verbs: ["update"] - - apiGroups: [""] - resources: ["namespaces"] - verbs: ["get", "list"] - EOF - kubectl create clusterrolebinding alice-finalize --clusterrole=ns-finalize-updater --user=alice # Control: normal label change DENIED kubectl label namespace oil-prod capsule.clastix.io/tenant=evil --overwrite --as=alice # Error: admission webhook denied # Bypass: finalize changes tenant label (webhook NOT invoked) kubectl get namespace oil-prod -o json > /tmp/ns.json # modify tenant label to "hijacked" kubectl replace --raw "/api/v1/namespaces/oil-prod/finalize" -f /tmp/ns_modified.json --as=alice # 200 OK - tenant label changed

Impact

Namespace tenant-label hijack via the finalize subresource bypass. Same threat model as CVE-2026-30963. One-character fix needed: namespace/finalize -> namespaces/finalize.

Пакеты

Наименование

github.com/projectcapsule/capsule

go
Затронутые версииВерсия исправления

>= 0.13.0, < 0.13.6

0.13.6

EPSS

Процентиль: 20%
0.00277
Низкий

5.7 Medium

CVSS3

Дефекты

CWE-863

Связанные уязвимости

CVSS3: 5.7
nvd
8 дней назад

Capsule is a multi-tenancy and policy-based framework for Kubernetes. From 0.13.0 until 0.13.6, charts/capsule/templates/configuration.yaml configures the validating webhook with namespace/finalize instead of the Kubernetes resource name namespaces/finalize. A user with namespaces/finalize RBAC can send a PUT request to /api/v1/namespaces/{namespace}/finalize, and the singular rule never matches the plural resource, so the validating webhook is not invoked and the user can change the namespace tenant label. matchPolicy: Equivalent does not compensate because it handles API group and version equivalence rather than resource-name errors. This vulnerability is fixed in 0.13.6.

EPSS

Процентиль: 20%
0.00277
Низкий

5.7 Medium

CVSS3

Дефекты

CWE-863