CVE-2026-45021: Github.com/kumahq/kuma Default Kuma-cp Leaks Admin Token Vulnerability

MODERATE
Advisory Identifier: GHSA-3vcp-chfh-f6r2
CWE-942 CWE-346
Published
Advisory Summary

CVE-2026-45021 is a MODERATE default kuma-cp leaks admin token vulnerability (CWE-942: Permissive Cross-domain Security Policy with Untrusted Domains) affecting Github.com/kumahq/kuma libraries in the Go ecosystem. The issue involves default kuma-cp leaks admin token cross-origin via cors wildcard + localhostisadmin. Remediation is available by upgrading affected packages to version 2.7.25, 2.9.15, 2.11.13, 2.12.10, 2.13.5.

CVE-2026-45021 at a Glance

CVE Identifier CVE-2026-45021
GHSA Identifier GHSA-3vcp-chfh-f6r2
Severity MODERATE
CVSS v3.1 Base Score N/A
CWE Classification CWE-942: Permissive Cross-domain Security Policy with Untrusted Domains
Affected Product Github.com/kumahq/kuma
Package Ecosystem Go
Published Date
Last Updated

How to Fix CVE-2026-45021

To remediate this vulnerability, upgrade all affected Github.com/kumahq/kuma dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

github.com/kumahq/kuma fixed: 2.7.25
Upgrade github.com/kumahq/kuma to 2.7.25
github.com/kumahq/kuma fixed: 2.9.15
Upgrade github.com/kumahq/kuma to 2.9.15
github.com/kumahq/kuma fixed: 2.11.13
Upgrade github.com/kumahq/kuma to 2.11.13
github.com/kumahq/kuma fixed: 2.12.10
Upgrade github.com/kumahq/kuma to 2.12.10
github.com/kumahq/kuma fixed: 2.13.5
Upgrade github.com/kumahq/kuma to 2.13.5
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for github.com/kumahq/kuma

How to Check if You Are Affected

To determine whether your application is affected by CVE-2026-45021, inspect your project dependencies for Github.com/kumahq/kuma:

inspect dependencies for github.com/kumahq/kuma

Analyze the terminal output to locate any version of Github.com/kumahq/kuma in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 2.7.25), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-942: Permissive Cross-domain Security Policy with Untrusted Domains, where the product uses a web-client protection mechanism such as a content security policy (csp) or cross-domain policy file, but the policy includes untrusted domains with which the web client is allowed to communicate. In Github.com/kumahq/kuma, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

## Summary Default `kuma-cp` config leaks the admin bootstrap token and signing keys to any webpage the operator visits while the control plane is reachable from their browser. `CorsAllowedDomains: [".*"]` reflects any `Origin`, and `LocalhostIsAdmin: true` promotes requests from `127.0.0.1` to `mesh-system:admin`. A cross-origin `fetch()` from a malicious page returns the admin JWT and signing material. ## Am I affected? You are affected if all of these hold: 1. `kuma-cp` runs with default config (`CorsAllowedDomains: [".*"]` and `LocalhostIsAdmin: true`). 2. The control plane is reachable from a browser on the same machine: - `kuma-cp run` on a developer laptop - Docker `--network host` or port-publish on a workstation - `kubectl port-forward` from a machine that also browses the web 3. The operator visits a page running attacker JavaScript while the control plane is reachable. You are not affected if: - The control plane runs on a Kubernetes cluster accessed via ClusterIP, NodePort, or LoadBalancer from a remote client. - The control plane runs on an SSH-administered VM with no browser on the host. - `KUMA_API_SERVER_AUTHN_LOCALHOST_IS_ADMIN=false` is set (see https://kuma.io/docs/latest/production/secure-deployment/api-server-auth/). - `KUMA_API_SERVER_CORS_ALLOWED_DOMAINS` is set to an explicit allowlist that excludes attacker origins. ## Mitigation 1. Set `KUMA_API_SERVER_AUTHN_LOCALHOST_IS_ADMIN=false` after retrieving the admin token. 2. Set `KUMA_API_SERVER_CORS_ALLOWED_DOMAINS` to an explicit allowlist, for example `http://localhost:5681,http://127.0.0.1:5681`. 3. Do not run `kuma-cp` on a machine where you browse untrusted sites. ## Fix Fixed in [#16416](https://github.com/kumahq/kuma/pull/16416), backported to all supported release branches ([#16423](https://github.com/kumahq/kuma/pull/16423), [#16424](https://github.com/kumahq/kuma/pull/16424), [#16425](https://github.com/kumahq/kuma/pull/16425), [#16426](https://github.com/kumahq/kuma/pull/16426), [#16427](https://github.com/kumahq/kuma/pull/16427)). Changes in patched versions: - `CorsAllowedDomains` default changed from `[".*"]` to `[]` — CORS is now opt-in; set the env var explicitly if you need GUI access. - `LocalhostIsAdmin` hardened: now requires direct loopback `RemoteAddr` and `Host`, and rejects requests carrying proxy-hop headers (`X-Forwarded-For`), cross-site fetch metadata (`Sec-Fetch-Site`), or a non-localhost `Origin`. Upgrade to a patched version: - 2.7.25 - 2.9.15 - 2.11.13 - 2.12.10 - 2.13.5 ## Credits Reported by `eldudareeno`. ## CVSS `CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N` = 5.1 Medium.

CVE-2026-45021 Affected Github.com/kumahq/kuma Versions

5 component(s)
Fixed Versions:
2.7.252.9.152.11.132.12.102.13.5
Product / Package Ecosystem Affected Versions Fixed Version
github.com/kumahq/kuma
Go
< 2.7.25
2.7.25
github.com/kumahq/kuma
Go
≥ 2.9.0
< 2.9.15
2.9.15
github.com/kumahq/kuma
Go
≥ 2.11.0
< 2.11.13
2.11.13
github.com/kumahq/kuma
Go
≥ 2.12.0
< 2.12.10
2.12.10
github.com/kumahq/kuma
Go
≥ 2.13.0
< 2.13.5
2.13.5

References

Frequently Asked Questions

What is CVE-2026-45021?
CVE-2026-45021 is a security vulnerability in Github.com/kumahq/kuma involving Default kuma-cp leaks admin token cross-origin via CORS wildcard + LocalhostIsAdmin under CWE-942: Permissive Cross-domain Security Policy with Untrusted Domains.
Which Github.com/kumahq/kuma versions are affected?
Affected versions include releases prior to 2.7.25, 2.9.15, 2.11.13, 2.12.10, 2.13.5 across affected packages: github.com/kumahq/kuma.
What version fixes CVE-2026-45021?
Upgrading to 2.7.25, 2.9.15, 2.11.13, 2.12.10, 2.13.5 (or the latest patched release for your respective branch) resolves the vulnerability.
Is github.com/kumahq/kuma affected?
Yes, github.com/kumahq/kuma is affected in releases prior to 2.7.25, 2.9.15, 2.11.13, 2.12.10, 2.13.5. Upgrade your dependency to 2.7.25, 2.9.15, 2.11.13, 2.12.10, 2.13.5 or later.
What CWE is associated with CVE-2026-45021?
CVE-2026-45021 is classified under CWE-942: Permissive Cross-domain Security Policy with Untrusted Domains (The product uses a web-client protection mechanism such as a Content Security Policy (CSP) or cross-domain policy file, but the policy includes untrusted domains with which the web client is allowed to communicate.).
How can I check Go dependencies for CVE-2026-45021?
Run the dependency tree command: 'inspect dependencies for github.com/kumahq/kuma'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-3vcp-chfh-f6r2",
  "modified" : "2026-06-09T10:19:22Z",
  "published" : "2026-05-14T20:15:08Z",
  "aliases" : [ "CVE-2026-45021" ],
  "summary" : "Default kuma-cp leaks admin token cross-origin via CORS wildcard + LocalhostIsAdmin",
  "details" : "## Summary\n\nDefault `kuma-cp` config leaks the admin bootstrap token and signing keys to any webpage the operator visits while the control plane is reachable from their browser. `CorsAllowedDomains: [\".*\"]` reflects any `Origin`, and `LocalhostIsAdmin: true` promotes requests from `127.0.0.1` to `mesh-system:admin`. A cross-origin `fetch()` from a malicious page returns the admin JWT and signing material.\n\n## Am I affected?\n\nYou are affected if all of these hold:\n\n1. `kuma-cp` runs with default config (`CorsAllowedDomains: [\".*\"]` and `LocalhostIsAdmin: true`).\n2. The control plane is reachable from a browser on the same machine:\n   - `kuma-cp run` on a developer laptop\n   - Docker `--network host` or port-publish on a workstation\n   - `kubectl port-forward` from a machine that also browses the web\n3. The operator visits a page running attacker JavaScript while the control plane is reachable.\n\nYou are not affected if:\n\n- The control plane runs on a Kubernetes cluster accessed via ClusterIP, NodePort, or LoadBalancer from a remote client.\n- The control plane runs on an SSH-administered VM with no browser on the host.\n- `KUMA_API_SERVER_AUTHN_LOCALHOST_IS_ADMIN=false` is set (see https://kuma.io/docs/latest/production/secure-deployment/api-server-auth/).\n- `KUMA_API_SERVER_CORS_ALLOWED_DOMAINS` is set to an explicit allowlist that excludes attacker origins.\n\n## Mitigation\n\n1. Set `KUMA_API_SERVER_AUTHN_LOCALHOST_IS_ADMIN=false` after retrieving the admin token.\n2. Set `KUMA_API_SERVER_CORS_ALLOWED_DOMAINS` to an explicit allowlist, for example `http://localhost:5681,http://127.0.0.1:5681`.\n3. Do not run `kuma-cp` on a machine where you browse untrusted sites.\n\n## Fix\n\nFixed in [#16416](https://github.com/kumahq/kuma/pull/16416), backported to all supported release branches ([#16423](https://github.com/kumahq/kuma/pull/16423), [#16424](https://github.com/kumahq/kuma/pull/16424), [#16425](https://github.com/kumahq/kuma/pull/16425), [#16426](https://github.com/kumahq/kuma/pull/16426), [#16427](https://github.com/kumahq/kuma/pull/16427)).\n\nChanges in patched versions:\n\n- `CorsAllowedDomains` default changed from `[\".*\"]` to `[]` — CORS is now opt-in; set the env var explicitly if you need GUI access.\n- `LocalhostIsAdmin` hardened: now requires direct loopback `RemoteAddr` and `Host`, and rejects requests carrying proxy-hop headers (`X-Forwarded-For`), cross-site fetch metadata (`Sec-Fetch-Site`), or a non-localhost `Origin`.\n\nUpgrade to a patched version:\n\n- 2.7.25\n- 2.9.15\n- 2.11.13\n- 2.12.10\n- 2.13.5\n\n## Credits\n\nReported by `eldudareeno`.\n\n## CVSS\n\n`CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N` = 5.1 Medium.",
  "severity" : [ {
    "type" : "CVSS_V4",
    "score" : "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/kumahq/kuma"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "2.7.25"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/kumahq/kuma"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "2.9.0"
      }, {
        "fixed" : "2.9.15"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/kumahq/kuma"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "2.11.0"
      }, {
        "fixed" : "2.11.13"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/kumahq/kuma"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "2.12.0"
      }, {
        "fixed" : "2.12.10"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/kumahq/kuma"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "2.13.0"
      }, {
        "fixed" : "2.13.5"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/kumahq/kuma/security/advisories/GHSA-3vcp-chfh-f6r2"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-45021"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/kumahq/kuma/pull/16416"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/kumahq/kuma/pull/16423"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/kumahq/kuma/pull/16424"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/kumahq/kuma/pull/16425"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/kumahq/kuma/pull/16426"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/kumahq/kuma/pull/16427"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/kumahq/kuma/commit/8fefa8595d44eb68d922405702ed7a0826322907"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/kumahq/kuma"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-346", "CWE-942" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-05-14T20:15:08Z",
    "nvd_published_at" : "2026-05-28T18:16:34Z"
  }
}