GHSA-mm27-mwq9-fr5g: Go/github.com/cli/cli/v2 vulnerability

Published Oct 15, 2026
·
Updated

Summary

A security vulnerability has been identified in GitHub CLI that could allow attestation verification bypass when using gh attestation verify with --signer-repo or --signer-workflow flags. GitHub CLI builds the certificate matcher from these flag values without escaping regex metacharacters, so a repository or workflow name is treated as a regular expression rather than a literal string. GitHub permits characters such as  .  in organization, repository, and workflow path names, and  .  is a regex wildcard, so a malicious actor can create a lookalike name that satisfies a matcher intended for a different, trusted signer.

Details

GitHub CLI constructs a regular expression from the  --signer-repo  and  --signer-workflow  values and matches it against the signing certificate's SAN (Subject Alternative Name) during Sigstore attestation verification. The user-supplied value is interpolated into the pattern without escaping regex metacharacters, so any metacharacter permitted in a GitHub path is interpreted as regex syntax instead of a literal character.

The most practical case is  . , which GitHub allows in org/repo names and is a regex wildcard meaning "any single character." For example, an attacker-controlled repository named:

github/artifact.attestations-workflows

matches a verifier configured for the trusted signer:

github/artifact-attestations-workflows

because the unescaped  .  in the constructed pattern matches the  -  in the attacker's name (and any other single character at that position). This affected the --signer-repo and --signer-workflow flags but did not affect the --repo and --owner flags which include an exact string comparison.

In v2.97.0, the GitHub CLI escapes the user-supplied signer values before they are incorporated into the SAN matcher, so they are matched as literal strings.

Impact

The practical impact is limited, exploitation requires the attacker to create a plausible lookalike repository name and produce valid Sigstore attestations from it. This could undermine supply chain verification for CI/CD pipelines or policy gates that use these flags to pin trust to a specific signing workflow.

Remediation and Mitigation

1. Upgrade gh to v2.97.0 or later, which escapes signer values before matching. 2. As a workaround, use --repo or --owner flags instead of --signer-repo or --signer-workflow where applicable. 3. Manually inspect the signing certificate SAN in attestation output to confirm the signing workflow origin.

Affected Software

1 affected componentFixes available
go/github.com/cli/cli/v2<2.97.0
2.97.0

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade go/github.com/cli/cli/v2 to a version that resolves this vulnerability.

    Fixed in 2.97.0
  2. Upgrade

    Upgrade GitHub CLI to a version that resolves this vulnerability.

    Fixed in v2.97.0
  3. Compensating control

    Use the --repo or --owner flags instead of --signer-repo or --signer-workflow where applicable.

  4. Compensating control

    Manually inspect the signing certificate SAN in attestation output to confirm the signing workflow origin.

Event History

Oct 15, 2026
Advisory Published
via GitHub·06:08 PM
Data Sourced
via GitHub·06:08 PM
DescriptionWeaknessAffected Software

Frequently Asked Questions

1

Which verification workflows are exposed?

The issue affects uses of gh attestation verify that constrain the expected signer with --signer-repo or --signer-workflow. Those flag values are used to build the certificate SAN matcher.

2

What would an attacker need to bypass the intended signer check?

An attacker would need to create a repository, organization, or workflow path whose name is a regex lookalike of the trusted signer value. A dot in the trusted name is the practical example because it is valid in GitHub paths but matches any single character in a regular expression.

3

Why do names containing dots matter?

The CLI does not escape regex metacharacters in the signer flag values before matching. As a result, a dot is interpreted as a wildcard rather than as a literal dot, allowing a different signer name to satisfy the matcher.

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