Skip to main content

Capsule CVE-2026-61794

| EUVDEUVD-2026-83055 MEDIUM
Improper Input Validation (CWE-20)
2026-09-18 GitHub_M GHSA-gxjc-74v5-3vx3
6.8
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain Tenant update privilege
  2. Delivery
    Persist malformed ForbiddenAnnotations.Regex
  3. Exploit
    Webhook validates wrong field, accepts it
  4. Execution
    Tenant triggers namespace create/update
  5. Persist
    regexp.MustCompile panics
  6. Impact
    Namespace operations denied for tenant

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
Exploitation Conditions

Requires Capsule 0.13.0 through 0.13.6 and an actor with permission to update a Tenant custom resource (tenant owner or cluster admin with Tenant write access) - this is a privileged, largely self-inflicted denial of service. The specific trigger is setting Spec.NamespaceOptions.ForbiddenAnnotations.Regex to a value that is not a valid Go regexp (e.g. '(', '[', '(?P<') while leaving ForbiddenLabels.Regex valid so the update webhook accepts it; the panic only manifests later, on namespace create/update for the affected tenant. Limiting factors: high privilege requirement (PR:H, no unauthenticated path), impact confined to the affected tenant's namespace operations rather than the whole cluster, and no confidentiality or integrity impact.

Impact

This is a genuine but low-urgency availability issue, not a high-impact priority. The CVSS 3.1 vector (AV:N/AC:L/PR:H/UI:N/S:C/C:N/I:N/A:H, base 6.8) correctly reflects a pure denial-of-service (C:N/I:N) that requires high privileges (PR:H) - specifically the ability to update a Tenant custom resource in Capsule. No EPSS score, no CISA KEV listing, and no public exploit are present in the input, so exploitation status is 'no public exploit identified at time of analysis' (the linked PR contains only e2e regression tests, which validate the fix rather than weaponize the flaw). The signals are internally consistent: a config-validation bug reachable only by a privileged tenant/cluster administrator, whose worst outcome is that Capsule denies namespace create/update operations for the affected tenant. The tag 'Information Disclosure' CONFLICTS with the vector (C:N means no confidentiality impact) - this is a mislabeling, not a confidentiality issue. The S:C (scope change) rating is defensible (a webhook mis-validation causes denial in downstream namespace operations) but arguable; S:U would also be reasonable, marginally lowering the score.

Exploit ScenarioDerived

A user with rights to update a Tenant object (e.g., a delegated tenant owner or cluster admin) sets ForbiddenAnnotations.Regex to a malformed pattern such as '(' while keeping the labels regex valid; the update webhook mistakenly validates only ForbiddenLabels.Regex and accepts it. Later, any namespace create or update for that tenant reaches pkg/api/forbidden_list.go, where regexp.MustCompile panics on the stored bad expression and blocks the operation, denying namespace management for the tenant. No public exploit code exists; the only demonstration is the vendor's e2e test using invalid regexes like '(', '[', '*invalid'.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 18, 2026

Capsule 0.13.0 through 0.13.6 accepts a malformed ForbiddenAnnotations.Regex on Tenant updates because the update webhook validates ForbiddenLabels.Regex for both the labels and annotations checks, letting a privileged tenant administrator persist a bad regular expression that later panics Capsule's forbidden-metadata validator and blocks namespace creation and updates for the affected tenant. Exploitation requires authenticated, high-privileged access - a Tenant update permission (tenant owner or cluster admin with Tenant write access, CVSS PR:H) - and the impact is a tenant-scoped denial of service with no confidentiality or integrity effect (AV:N/AC:L/PR:H/UI:N/S:C/C:N/I:N/A:H, CWE-20). There is no public exploit identified at time of analysis, no CISA KEV listing, and the issue is fixed in version 0.13.7, making this a genuine but low-urgency availability bug rather than a high-impact priority.

RemediationAI

Upgrade Capsule to v0.13.7 (https://github.com/projectcapsule/capsule/releases/tag/v0.13.7), which is the vendor-released patch containing the fix from PR https://github.com/projectcapsule/capsule/pull/1983 (commit 8d89d6865df6f41c7faa22fc9e807a57b01bfd0e); see the advisory at https://github.com/projectcapsule/capsule/security/advisories/GHSA-gxjc-74v5-3vx3 for details. Since the malformed regex is persisted before the panic occurs, patch plus cleanup is required: after upgrading, audit existing Tenant objects for Spec.NamespaceOptions.ForbiddenAnnotations.Regex values that do not compile as Go regular expressions (common invalid samples include '(', '[', '*invalid', '(?P<') and remove or correct them, because the upgraded webhook only blocks new writes. The most effective compensating control is to tighten RBAC on the tenants.capsule.clastix.io resource so only a small set of fully trusted cluster administrators can update Tenants, removing tenant-owner self-service update rights; the trade-off is reduced tenant autonomy and more manual cluster-admin work for tenant lifecycle changes. If full RBAC restriction is impractical, add a CI/admission policy layer that independently validates every ForbiddenAnnotations and ForbiddenLabels regex value on Tenant writes, at the cost of maintaining duplicate validation logic. There is no configuration switch that disables the affected forbidden-metadata validation, so patching or RBAC restriction is the only reliable mitigation; note that the impact is confined to the affected tenant's namespace operations, so cluster-wide outage risk is limited.

Affected VersionsENISA

capsule 0.13.0, < 0.13.7

Affected Packages

go github.com/projectcapsule/capsule fix: 0.13.7
euvd capsule_0_13_0 fix: 0.13.7

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in go, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Capsule (projectcapsule:capsule, CPE cpe:2.3:a:projectcapsule:capsule:*:*:*:*:*:*:*:*) is a Kubernetes multi-tenancy framework that enforces policy on Tenant custom resources (capsulev1beta2). Tenants carry NamespaceOptions with ForbiddenLabels and ForbiddenAnnotations lists, each of which can hold a user-supplied Go regular expression used to forbid metadata on namespaces belonging to that tenant. The root cause is CWE-20 improper input validation implemented as a copy-paste defect in internal/webhook/tenant/validation/forbidden_annotations_regex.go: the Tenant update path compiles ForbiddenLabels.Regex for both the labels scope and the annotations scope, so a value placed in ForbiddenAnnotations.Regex is never syntactically validated on update. Because the labels expression remains valid, the admission webhook admits the object and the malformed annotation regex is persisted in etcd. The failure is deferred rather than immediate: when a namespace is created or updated, pkg/api/forbidden_list.go compiles the stored expression with regexp.MustCompile (rather than regexp.Compile), which panics on invalid input such as '(', '[', '*invalid' or '(?P<', aborting the reconciliation and denying namespace operations for that tenant. The S:C scope-change rating reflects that the vulnerable component (the webhook/controller path) is authorized differently from the Tenant object that the attacker controls. Regression tests added in PR 1983 confirm the create path already rejected invalid regexes for both labels and annotations, while the update path did not, and the fix also hardens handling of nil Tenant/NamespaceOptions and skips empty expressions.

Know when Capsule gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 6.8 MEDIUM
AV:N/AC:L/PR:H/UI:N/S:C/C:N/I:N/A:H
vuln.today AI 6.8 MEDIUM

Exploitation needs Tenant-update rights (PR:H) via the K8s API (AV:N/AC:L); impact is availability-only denial of namespace operations (A:H, C:N/I:N), with S:C for the downstream namespace scope.

3.1 AV:N/AC:L/PR:H/UI:N/S:C/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:H/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
High
User Interaction
None
Scope
Changed
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

1
Patch available
Sep 18, 2026 - 17:17 EUVD

DescriptionCVE.org

Capsule is a multi-tenancy and policy-based framework for Kubernetes. From 0.13.0 until 0.13.7, the Tenant update validation in internal/webhook/tenant/validation/forbidden_annotations_regex.go compiles ForbiddenLabels.Regex for both the labels and annotations checks instead of validating ForbiddenAnnotations.Regex. An administrator who can update a Tenant can therefore persist a malformed ForbiddenAnnotations.Regex while leaving the labels expression valid. Namespace creation or update later passes the stored expression through pkg/api/forbidden_list.go, where regexp.MustCompile can panic during forbidden metadata validation and deny namespace operations for the affected tenant. This issue is fixed in version 0.13.7.

Threat Intelligence Overview

EPSS Score
0.3%
Top 74% exploitable
Prevalence
Low
niche CNCF Kubernetes multi-tenancy add-on, not universally deployed
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC Yes
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

54
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy