GitHub Advisoryadvisory · Go
GHSA-m23h-6mwm-39m8 Kong Ingress Controller for Kubernetes (KIC): Cross-namespace TLS Secret Exfiltration in Gateways with GatewayClass missing `konghq.com/gatewayclass-unmanaged: 'true'` annotation
MEDIUM
Official page ↗
- Ecosystem
- Go
- Packages
- github.com/kong/kubernetes-ingress-controller/v3, github.com/kong/kubernetes-ingress-controller/v2, github.com/kong/kubernetes-ingress-controller
- Severity
- Moderate
- CVSS vector
- CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N/E:P
- Weaknesses
- CWE-200
- Reviewed
- 2026-05-19
Affected packages
• Go github.com/kong/kubernetes-ingress-controller/v3: >= 3.5.0, < 3.5.7 → fixed in 3.5.7
• Go github.com/kong/kubernetes-ingress-controller/v3: < 3.4.14 → fixed in 3.4.14
• Go github.com/kong/kubernetes-ingress-controller/v2: <= 2.12.8 (no fix yet)
• Go github.com/kong/kubernetes-ingress-controller: <= 1.3.4 (no fix yet)
Description
Summary
A vulnerability in the Kong Ingress Controller (KIC) allows for the unauthorized exfiltration of TLS certificates and private keys across Kubernetes namespace boundaries. In "managed" mode (where the `GatewayClass` lacks an unmanaged annotation), the Gateway TLS translator skips critical status checks. This bypass allows the translator to fetch Secrets from any namespace KIC watches, even when a `ReferenceGrant` explicitly denies access or is missing.
An actor with RBAC permissions to create or modify Gateways in a low-privileged namespace can reference a Secret in a high-privileged namespace, causing KIC to "leak" that Secret's sensitive private key material into the Kong dataplane configuration.
Am I affected?
You are affected if all of these hold:
1. You are using Kong Ingress Controller with the Gateway API.
2. Your `GatewayClass` is operating in managed mode (default behavior, no unmanaged annotation).
3. KIC is configured to watch multiple namespaces (multi-tenant environment).
4. Users have RBAC permissions to `create` or `update` `gateways.gateway.networking.k8s.io` in their own namespaces.
You are not affected if any of this:
• You only use KIC for `Ingress` resources (not Gateway API).
• Your `GatewayClass` uses the `konghq.com/gateway-unmanaged` annotation.
• KIC is restricted via RBAC or configuration to only watch a single namespace.
• You have strictly limited Gateway creation/modification permissions to trusted cluster administrators only.
Mitigation
1. Add unmanaged gateway annotation: add the `konghq.com/gateway-unmanaged` annotation to your `GatewayClass`
Additional best practicies
1. Restrict Gateway RBAC: Limit the ability to create or modify Gateway resources to high-trust administrative users until a patch is applied.
2. Namespace Isolation: If possible, limit the namespaces KIC is permitted to watch using the `WATCH_NAMESPACE` environment variable or specific RBAC RoleBindings.
Fix
The fix mandates `ReferenceGrant` validation for all cross-namespace certificate references. By requiring a `Programmed: True` listener status, the translator now strictly authorizes external Secret access while maintaining default access for same-namespace certificates, effectively closing the exfiltration vector.
Fixed in #7920, with backports to supported release branches in #7921 and #7922.
Upgrade to one of the following patched versions (or later):
• 3.4.14
• 3.5.7
CVSS
`CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N/E:P` = 5.6 Medium
Related
Weakness · CWE (1)
- CWE-200 Exposure of Sensitive Information to an Unauthorized Actor weakness
References
- https://github.com/Kong/kubernetes-ingress-controller/security/advisories/GHSA-m23h-6mwm-39m8 web
- https://github.com/Kong/kubernetes-ingress-controller/pull/7920 web
- https://github.com/Kong/kubernetes-ingress-controller/pull/7921 web
- https://github.com/Kong/kubernetes-ingress-controller/pull/7922 web
- https://github.com/Kong/kubernetes-ingress-controller package