GHSA-f42p-wjw5-97qh: zizmor: Debug logging prints available GitHub credentials in cleartext

Published Nov 9, 2026
·
Updated

Summary

zizmor 1.27.0 exposes GitHub access tokens in cleartext when debug-level logging is enabled. Tokens supplied via environment variables (GHTOKEN, GITHUBTOKEN, ZIZMORGITHUBTOKEN), 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 RUSTLOG 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:

rust 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.ghtoken.

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:

GHTOKEN=ghoZIZMORMRE zizmor --verbose example.yml

will emit

text DEBUG zizmor: app: App { input: InputArgs { inputs: ["example.yml"], collect: [Default], strictcollection: false }, audit: AuditArgs { fix: None, pedantic: false, persona: Regular, minseverity: None, minconfidence: None, noignores: false }, output: OutputArgs { verbose: Verbosity { verbose: 1, quiet: 0, phantom: PhantomData<clapverbosityflag::InfoLevel> }, format: Plain, noprogress: false, color: None, renderlinks: Auto, showauditurls: Auto, noexitcodes: false, naches: false }, network: NetworkArgs { offline: false, ghtoken: Some(GitHubToken("ghoZIZMORMRE")), githubtoken: None, zizmorgithubtoken: None, ghhostname: Standard("github.com"), noonlineaudits: false, cachedir: "/Users/shaan/.cache/zizmor" }, args: GlobalArgs { lsp: LspArgs { lsp: false, stdio: false }, config: None, noconfig: 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 Software

2 affected componentsFixes available
pip/zizmor=1.27.0
1.28.0
pip/zizmor>=1.27.0<1.28.0
1.28.0

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade pip/zizmor to a version that resolves this vulnerability.

    Fixed in 1.28.0
  2. Upgrade

    Upgrade zizmor to a version that resolves this vulnerability.

    Fixed in 1.26.1
  3. Configuration

    Do not use -v/--verbose or an applicable RUST_LOG directive; retain the default informational logging level.

    zizmor debug/verbose logging = disabled

Event History

Nov 9, 2026
Advisory Published
via GitHub·09:56 PM
Data Sourced
via GitHub·09:56 PM
DescriptionWeaknessAffected Software
Data Sourced
via OSV·09:56 PM
DescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

Which runs are at risk of exposing credentials?

Runs of zizmor 1.27.0 that supply a GitHub credential and enable debug-level logging can write that credential to stderr. Debug logging can be enabled by a single -v or --verbose flag, or by an applicable RUST_LOG directive.

2

Which credential sources can be disclosed?

The affected logging includes tokens supplied through the GH_TOKEN, GITHUB_TOKEN, or ZIZMOR_GITHUB_TOKEN environment variables. It also includes tokens passed with --gh-token, --github-token, or --zizmor-github-token.

3

What can be done if updating is not immediately possible?

Avoid enabling debug-level logging for zizmor runs that use GitHub credentials. In particular, do not use -v or --verbose and ensure applicable RUST_LOG settings do not enable debug logging.

4

How can I determine whether an existing run may have exposed a token?

Check whether the run used zizmor 1.27.0, supplied a GitHub token through one of the listed environment variables or command-line options, and had debug logging enabled. If so, the parsed application configuration was written to stderr and may contain the token in cleartext.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203