Skip to content
Heist/ feed
Back to feed
High

Calicoctl leaks cluster credentials to stderr when verbose logging is enabled

Type: advisorySources: OSV

When calicoctl is invoked with --log-level=info or --log-level=debug, the client prints the full contents of its loaded connection-configuration struct to stderr in a single log line. The struct embeds every credential calicoctl uses to talk to the cluster — inline kubeconfig (with bearer token), Kubernetes API bearer token, etcd password, and inline PEM-encoded etcd client certificate and key. Any reader of that stderr stream — CI job logs, session-recording archives, shared support-ticket transcripts, or local filesystem viewers on the host that ran calicoctl — can extract these credentials with zero Kubernetes privilege. calicoctl's default log level is panic, so this issue only triggers when verbose logging is explicitly enabled.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-6720
Confirmed fixed CVEs
Not specified
Updated in this feed
4 Nov 2026, 22:28 UTC · Revision 1

Source evidence

Calicoctl leaks cluster credentials to stderr when verbose logging is enabled

core-osv · Original source

Published 28 May 2026, 15:47 UTC

When calicoctl is invoked with --log-level=info or --log-level=debug, the client prints the full contents of its loaded connection-configuration struct to stderr in a single log line. The struct embeds every credential calicoctl uses to talk to the cluster — inline kubeconfig (with bearer token), Kubernetes API bearer token, etcd password, and inline PEM-encoded etcd client certificate and key. Any reader of that stderr stream — CI job logs, session-recording archives, shared support-ticket transcripts, or local filesystem viewers on the host that ran calicoctl — can extract these credentials with zero Kubernetes privilege. calicoctl's default log level is panic, so this issue only triggers when verbose logging is explicitly enabled.

osv:CVE-2026-6720
Complete source record
{
  "id": "27b43869a281af08ee4b35057811bdb079226719b8695dded98b6fabdfde1599",
  "url": "https://osv.dev/vulnerability/CVE-2026-6720",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Calicoctl leaks cluster credentials to stderr when verbose logging is enabled",
    "summary": "When calicoctl is invoked with --log-level=info or --log-level=debug, the client prints the full contents of its loaded connection-configuration struct to stderr in a single log line. The struct embeds every credential calicoctl uses to talk to the cluster — inline kubeconfig (with bearer token), Kubernetes API bearer token, etcd password, and inline PEM-encoded etcd client certificate and key. Any reader of that stderr stream — CI job logs, session-recording archives, shared support-ticket transcripts, or local filesystem viewers on the host that ran calicoctl — can extract these credentials with zero Kubernetes privilege. calicoctl's default log level is panic, so this issue only triggers when verbose logging is explicitly enabled.",
    "evidence": "osv:CVE-2026-6720",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-6720",
      "aliases": [
        "CVE-2026-6720",
        "GHSA-3m4q-ggcj-j6m4",
        "GO-2026-5893"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:P/VC:H/VI:N/VA:N/SC:H/SI:H/SA:H"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/projectcalico/calico",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "eb1cf57823a1dd8d25c48b82fd023ea9e3e17996"
                },
                {
                  "fixed": "1be7791d130f7756981f67cce23b260be0330aa0"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "3.32.0"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StandardRange"
                  },
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "3.22.3"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "InverseAffectedRanges"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v3.32.0-0.dev",
            "v3.31.0-0.dev",
            "v3.30.0-0.dev",
            "v3.29.0-0.dev",
            "v3.28.0-0.dev",
            "v3.27.0-0.dev",
            "v3.25.0-0.dev",
            "v3.22.3-0.dev",
            "v3.24.0-0.dev",
            "v3.18.5-calico",
            "v3.18.5",
            "v3.17.5-calico",
            "v3.17.5",
            "v3.18.1-calico",
            "v3.18.1",
            "v3.16.5-calico",
            "v3.16.5",
            "v3.16.0-calico",
            "v3.16.0",
            "v3.11.1-calico",
            "v3.11.1",
            "v3.9.4-calico",
            "v3.9.4",
            "v3.8.5-calico",
            "v3.8.5",
            "v3.10.2-calico",
            "v3.10.2",
            "v3.10.0-calico",
            "v3.10.0",
            "v3.9.0-calico",
            "v3.9.0",
            "v3.3.7-calico",
            "v3.3.7",
            "v3.2.8-calico",
            "v3.2.8",
            "v3.1.7-calico",
            "v3.1.7",
            "v3.0.12-calico",
            "v3.0.12",
            "v3.2.0-calico",
            "v3.2.0",
            "v3.0.1-calico",
            "v3.0.1",
            "v3.0.0-calico",
            "v3.0.0",
            "v2.6.2-calico",
            "v2.6.2",
            "v3.0.0-alpha1-rc1-calico",
            "v3.0.0-alpha1-rc1",
            "v2.6.0-calico",
            "v2.6.0",
            "v2.6.0-rc2-calico",
            "v2.6.0-rc2",
            "v2.6.0-rc1-calico",
            "v2.6.0-rc1",
            "v2.5.0-calico",
            "v2.5.0",
            "v2.5.0-rc2-calico",
            "v2.5.0-rc2"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-6720.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:39.868474969Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/6xxx/CVE-2026-6720.json",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-6720",
        "https://www.tigera.io/security-bulletins/tta-2026-003/",
        "https://github.com/projectcalico/calico/pull/12535",
        "https://github.com/projectcalico/calico/pull/12536",
        "https://github.com/projectcalico/calico/pull/12537"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-532"
        ],
        "cna_assigner": "Tigera",
        "unresolved_ranges": [
          {
            "extracted_events": [
              {
                "range": [
                  {
                    "fixed": "3.21.7"
                  },
                  {
                    "fixed": "22.4.0"
                  }
                ],
                "source": "AFFECTED_FIELD",
                "strategy": "StandardRange"
              }
            ]
          }
        ],
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/6xxx/CVE-2026-6720.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-6720",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 507597,
  "published_at": "2026-05-28T15:47:42.519+00:00"
}