NIST deprecates RSA-2048 from 2030. Find every one of them before attackers do.
🐍 PyPI
Not in CISA KEV

CVE-2026-102289 — zizmor

Fix: zizmorcore/zizmor@0731e01

CVE-2026-102289 is a CWE-532 vulnerability in zizmor. A fix is available for zizmor — see the affected versions and patch details below.

zizmor: Debug logging prints available GitHub credentials in cleartext

Also known asGHSA-f42p-wjw5-97qh
Published
Updated
Affected
1 pkg
Patched
1 / 1
Exploits
None indexed
Exploitation data as of Nov 10, 2026 · OSV.dev, NVD, FIRST.org (EPSS)

EPSS Exploitation Probability

via FIRST.org ↗
0.2%probability of exploitation in next 30 days
Lower Risk0.00%
Lower risk than most CVEs16th percentile — riskier than 16% of all scored CVEsHighest risk

Probability of exploitation in the next 30 days, from FIRST.org EPSS.

Real-World Exposure

1 pkg affected
🐍zizmor

Real-time download stats are indexed for npm and PyPI packages. This vulnerability affects PyPI packages — download data is not available via public APIs for these ecosystems.

Description

Summary

zizmor 1.27.0 exposes GitHub access tokens in cleartext when debug-level logging is enabled. Tokens supplied via environment variables (GH_TOKEN, GITHUB_TOKEN, ZIZMOR_GITHUB_TOKEN), or the corresponding command-line options (--gh-token, --github-token, --zizmor-github-token) are included in the debug representation of the parsed application configuration and written to stderr.

The affected logging is enabled by a single -v/--verbose or an applicable RUST_LOG directive.

Details

The issue was introduced in commit 919bea46, merged through PR #2180. Version 1.26.1 and earlier are unaffected. Version 1.27.0 is the first and only affected release.

zizmor accepts GitHub credentials to perform authenticated GitHub API requests for the purposes of retrieving remote GitHub repositories and performing online audits that may require resolving information such as action references, commits, or repository metadata. A GitHub credential is used to avoid unauthenticated API limits and, when applicable, provide access to private repositories.

PR #2180 was intended to improve the experience around zizmor’s implicit offline mode. It also moved the CLI types into a dedicated module and added a debug log of the fully parsed App value:

tracing::debug!("app: {app:?}");

This diagnostic is useful for understanding the effective CLI state, including whether offline operation was explicit or inferred. However, the same commit added derived Debug implementations to App, NetworkArgs, and GitHubToken(String). Before the debug event is emitted, the compatibility token aliases are merged into app.network.gh_token.

The resulting stderr contains the token verbatim. Explicit --offline clears the token before the debug event, but normal online operation and --no-online-audits retain it.

PoC

Using zizmor at v1.27.0:

GH_TOKEN=gho_ZIZMOR_MRE zizmor --verbose example.yml

will emit

DEBUG zizmor: app: App { input: InputArgs { inputs: ["example.yml"], collect: [Default], strict_collection: false }, audit: AuditArgs { fix: None, pedantic: false, persona: Regular, min_severity: None, min_confidence: None, no_ignores: false }, output: OutputArgs { verbose: Verbosity { verbose: 1, quiet: 0, phantom: PhantomData<clap_verbosity_flag::InfoLevel> }, format: Plain, no_progress: false, color: None, render_links: Auto, show_audit_urls: Auto, no_exit_codes: false, naches: false }, network: NetworkArgs { offline: false, gh_token: Some(GitHubToken("gho_ZIZMOR_MRE")), github_token: None, zizmor_github_token: None, gh_hostname: Standard("github.com"), no_online_audits: false, cache_dir: "/Users/shaan/.cache/zizmor" }, args: GlobalArgs { lsp: LspArgs { lsp: false, stdio: false }, config: None, no_config: false, completions: None, thanks: false, help: (), version: () } }

Impact

In practice, the impact of this vulnerability should be mediated by GitHub's own layered defenses, including secret redaction in Actions logs and automatic credential revocation in issue/PR/etc. comments. However, zizmor itself should never log sensitive materials, and so the behavior is still considered vulnerable even if compensating controls exist in downstream systems.

An affected user must enable debug logging while supplying a GitHub credential, and the resulting stderr must be available to another party. Plausible disclosure channels include a public bug report, CI log or artifact, or terminal capture. A potential attacker only needs permission to read the disclosed logs.

The resulting impact depends on the token's scopes, repository access, and lifetime. A minimally scoped token may only expose public read-only data, while a broader OAuth token or personal access token may permit private-repository or modification of repositories, packages, workflows, or organization resources. The default informational logging level is unaffected. Exploitation requires debug logging and subsequent log exposure, which limits likelihood.

Notably, because zizmor’s bug-report template asks users to rerun commands with --verbose and paste the complete logs, this can result in credentials being copied into public issues or other support channels.

Affected Packages

1 total 1 fixed
EcosystemPackageVulnerable rangeFix
🐍PyPIzizmor≥ 1.27.0&&< 1.28.01.28.0pip install --upgrade 'zizmor==1.28.0'

Detection & mitigation playbook

Open-source dependency
  1. Detect

    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for zizmor, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.

  2. Fix

    Update zizmor to 1.28.0 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-102289 is resolved across your whole dependency graph.

  3. Workarounds

    If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.

Frequently Asked Questions

### Summary zizmor 1.27.0 exposes GitHub access tokens in cleartext when debug-level logging is enabled. Tokens supplied via environment variables (`GH_TOKEN`, `GITHUB_TOKEN`, `ZIZMOR_GITHUB_TOKEN`), or the corresponding command-line options (`--gh-token`, `--github-token`, `--zizmor-github-token`) are included in the debug representation of the parsed application configuration and written to stderr. The affected logging is enabled by a single `-v`/`--verbose` or an applicable `RUST_LOG` directive. ### Details The issue was introduced in commit [919bea46](https://github.com/zizmorcore/ziz
O3 Security · Impact-Aware SCA

Is CVE-2026-102289 in your dependencies?

Find it across PyPI, including transitive dependencies.

CVE-2026-102289: zizmor — Fixed in 1.28.0