GHSA-c534-2w9c-x7fm json
Kite Kubernetes proxy path traversal allows authenticated users to bypass RBAC and read cluster-wide resources
published 3mo ago modified 2mo ago also GO-2026-6105
- cvss
- 6.5
- version 3.1, GitHub
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- —
- no score, EPSS covers CVEs only
- public exploits
- 0
- none known
Summary
## Summary
Kite versions 0.6.9 through 0.14.0 authorize Kubernetes proxy requests against the pod or service identified by the original route parameters. Encoded path traversal segments can cause the upstream URL to resolve to a different Kubernetes API endpoint after authorization.
## Impact
An authenticated user with `get` permission on pods or services in one namespace can cause Kite to issue GET requests to Kubernetes API endpoints outside that namespace using Kite's service account.
With Kite's default Helm RBAC configuration, this allows cluster-wide resource disclosure, including Secrets. The validated impact is confidentiality only; resource modification and denial of service were not demonstrated.
Deployments using a restricted Kite service account are affected only up to the permissions granted to that service account.
## Technical details
The authorization check is performed against the original namespace and kind route parameters. The proxy path is subsequently decoded and passed to `url.JoinPath`, which resolves `..` segments and can produce an upstream URL outside the authorized pod or service proxy prefix.
Two input locations were affected:
1. Encoded traversal segments in the proxy catch-all path. 2. Encoded traversal and slash characters in the resource name.
## Reproduction
1. Create a user with a role granting only `pods:get` in namespace `default`. 2. Create any pod in `default` (e.g. `nginx`). 3. Send the following request (auth cookie required):
```bash curl --path-as-is --cookie "auth_token=<JWT>" \ 'http://<kite-host>/api/v1/_clusters/<cluster>/namespaces/default/pods/nginx/proxy/%2e%2e/%2e%2e/%2e%2e/%2e%2e/kube-system/secrets' ```
## Patches
Fixed in Kite 0.14.1.
- https://github.com/kite-org/kite/releases/tag/v0.14.1
## Workarounds
Upgrade to 0.14.1 or later.
If upgrading is temporarily impossible, reject encoded dot segments and encoded slashes at the reverse proxy and restrict Kite's Kubernetes service account permissions. Reverse-proxy normalization should not be treated as a permanent fix.
Patch / fix
- go github.com/zxh326/kite 0.14.1
- github.com/kite-org/kite@08116ee commit
- github.com/kite-org/kite@69ad938 commit
- github.com/kite-org/kite#638 pull request
- github.com/kite-org/kite/releases/tag/v0.14.1 release
Is GHSA-c534-2w9c-x7fm in your dependencies? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.
Check with FencerCVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| GitHub | 3.1 | 6.5 | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| go | github.com/zxh326/kite | >=0.6.9, <0.14.1 |
0.14.1 |
Classification
- Weakness
-
- CWE-647 Use of Non-Canonical URL Paths for Authorization Decisions
References
-
github.com
/kite-org/kite/pull/638
web
-
github.com
/kite-org/kite/commit/08116eed557f8d6982cc83af0b02991e0f3577d5
web
-
github.com
/kite-org/kite/commit/69ad938937af8f375a2e183d1a331926ab851d98
web
-
github.com
/kite-org/kite/security/advisories/GHSA-c534-2w9c-x7fm
web, advisory
-
github.com
/kite-org/kite
package
-
github.com
/kite-org/kite/releases/tag/v0.14.1
web
Sources
- GitHub Advisory GHSA-c534-2w9c-x7fm
- OSV GO-2026-6105
Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.