Description
Gitsign is a keyless Sigstore to signing tool for Git commits with your a GitHub / OIDC identity. From 0.4.0 to before 0.15.0, CertVerifier.Verify() in pkg/git/verifier.go unconditionally dereferences certs[0] after sd.GetCertificates() without checking the slice length. A CMS/PKCS7 signed message with an empty certificate set is a structurally valid DER payload; GetCertificates() returns an empty slice with no error, causing an immediate index-out-of-range panic. On the gitsign --verify code path (the GPG-compatible mode invoked by git verify-commit), the panic is silently recovered by internal/io/streams.go's Wrap() function, which returns nil instead of an error. main.go then exits with code 0, causing exit-code-only verification callers to interpret the failed verification as success. This vulnerability is fixed in 0.15.0.
Published: 2026-05-15
Score: 5.4 Medium
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

Gitsign's CertVerifier.Verify routine dereferences the first element of the certificates slice without checking that the slice contains any certificates. When a CMS/PKCS7 signed message supplies an empty certificate set, the routine panics with an index-out-of-range error. The panic is caught by an internal recovery wrapper that swallows the error and returns nil, leading the program to continue as if verification had succeeded. Because the error is hidden, the --verify command exits with status 0 despite the signature being invalid. Any script or CI system that interprets a zero exit status as a successful verification will therefore accept a forged commit or signature, effectively bypassing the trust model and allowing attackers to inject malicious changes. The flaw arises from improper bounds checking (CWE-129) and unchecked error handling (CWE-390). It affects sigstore's Gitsign tool versions 0.4.0 through 0.14.x and is fixed in 0.15.0.

Affected Systems

Vendor sigstore publishes the Gitsign utility, a keyless signing tool for Git commits that uses GitHub/OIDC identities. The vulnerability exists in Gitsign releases 0.4.0 up to and including 0.14.x. Systems relying on any of these versions and using the git verify-commit path are susceptible until they are updated to 0.15.0 or later.

Risk and Exploitability

The CVSS score of 5.4 indicates a medium severity, and the vulnerability is not listed in CISA's KEV catalog. With no EPSS score published, the exploit probability is uncertain. The likely attack vector requires an attacker to supply a specially crafted PKCS7 signed message that contains no certificates; when such a message is verified via git verify-commit, the flawed recovery masks the failure and signals success. Although the attacker must be able to influence the verification process, the consequence of a successful bypass is that untrusted commits can appear authenticated, potentially compromising the integrity of the repository.

Generated by OpenCVE AI on May 15, 2026 at 17:22 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Gitsign to version 0.15.0 or later to apply the panic recovery fix and proper error return.
  • Configure CI or git to treat non‑zero exit codes as failures when invoking gitsign, ensuring that a zero exit status is not automatically interpreted as success.
  • If an upgrade is not yet possible, audit any automation that runs gitsign --verify to confirm it checks both the exit code and any error messages, and consider disabling the git verify-commit command until the tool can be updated.

Generated by OpenCVE AI on May 15, 2026 at 17:22 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-7c37-gx6w-8vc5 gitsign --verify panics on empty-certificate PKCS7 and exits 0, bypassing exit-code callers
History

Fri, 15 May 2026 17:45:00 +0000

Type Values Removed Values Added
First Time appeared Sigstore
Sigstore gitsign
Vendors & Products Sigstore
Sigstore gitsign

Fri, 15 May 2026 17:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Fri, 15 May 2026 16:45:00 +0000

Type Values Removed Values Added
Description Gitsign is a keyless Sigstore to signing tool for Git commits with your a GitHub / OIDC identity. From 0.4.0 to before 0.15.0, CertVerifier.Verify() in pkg/git/verifier.go unconditionally dereferences certs[0] after sd.GetCertificates() without checking the slice length. A CMS/PKCS7 signed message with an empty certificate set is a structurally valid DER payload; GetCertificates() returns an empty slice with no error, causing an immediate index-out-of-range panic. On the gitsign --verify code path (the GPG-compatible mode invoked by git verify-commit), the panic is silently recovered by internal/io/streams.go's Wrap() function, which returns nil instead of an error. main.go then exits with code 0, causing exit-code-only verification callers to interpret the failed verification as success. This vulnerability is fixed in 0.15.0.
Title gitsign --verify panics on empty-certificate PKCS7 and exits 0, bypassing exit-code callers
Weaknesses CWE-129
CWE-390
References
Metrics cvssV3_1

{'score': 5.4, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L'}


Subscriptions

Sigstore Gitsign
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-05-15T16:44:36.684Z

Reserved: 2026-05-05T19:00:06.021Z

Link: CVE-2026-44310

cve-icon Vulnrichment

Updated: 2026-05-15T16:44:27.724Z

cve-icon NVD

Status : Received

Published: 2026-05-15T17:16:47.430

Modified: 2026-05-15T17:16:47.430

Link: CVE-2026-44310

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-05-15T17:30:04Z

Weaknesses