
Dependency Confusion Attacks: Detection & Defense Guide
October 16, 2026A single malicious package slipped into the colors.js supply chain in late 2021 corrupted thousands of downstream applications before anyone noticed. That incident — along with the SolarWinds compromise and the XZ Utils backdoor of 2024 — transformed software supply chain security from a theoretical concern into a board-level crisis. According to the 2025 State of Software Supply Chain Report by Sonatype, supply chain attacks surged 742% over a three-year rolling period, with open source packages being the primary attack vector. The software signing ecosystem existed before these events, but it was fragmented, difficult to use, and largely ignored by the open source community. Sigstore changed that calculus entirely.
Sigstore is a Linux Foundation project that delivers a free, transparent, and developer-friendly framework for signing, verifying, and protecting software artifacts. As of October 2026, it has been integrated into package ecosystems including PyPI, npm, Maven Central, and Homebrew, securing billions of artifact downloads monthly. Yet despite widespread adoption, many open source maintainers still treat Sigstore as a checkbox rather than a deeply understood security architecture. This guide addresses that gap — providing the technical depth and implementation clarity needed to deploy Sigstore correctly and defensibly.
Understanding the Sigstore Security Model
Sigstore’s architecture rests on three interlocking components: Cosign (artifact signing and verification), Fulcio (a certificate authority tied to OpenID Connect identity), and Rekor (an immutable, append-only transparency log). Each component addresses a distinct weakness in traditional code signing workflows.
Traditional signing models required maintainers to generate and protect long-lived private keys. These keys, often stored in ~/.gnupg directories or hardware tokens managed inconsistently across teams, represented persistent, high-value attack targets. When a key was compromised or a maintainer left a project, revocation was operationally painful. Sigstore eliminates long-lived signing keys entirely by issuing short-lived certificates — valid for ten minutes — bound to the signer’s OIDC identity from providers like GitHub Actions, Google, or Microsoft.
The Keyless Signing Flow Explained
When a developer or CI pipeline triggers a Sigstore-backed signing operation, the flow proceeds as follows: the signer authenticates to an OIDC provider, which issues an identity token. That token is presented to Fulcio, which verifies the identity claim and issues an ephemeral X.509 certificate containing the signer’s email or workflow identity in the Subject Alternative Name field. Cosign then uses this certificate’s private key material — generated ephemerally in memory — to sign the artifact. The resulting signature, certificate, and a transparency log entry are submitted to Rekor, creating a permanent, tamper-evident audit record.
Because certificates expire in minutes, an attacker who exfiltrates a key after the signing window has zero exploitable value for new signatures. The Rekor log, meanwhile, means every legitimate signature is publicly verifiable — and any rogue signature would appear there too, creating a forensic paper trail that traditional signing completely lacks.
Rekor’s Merkle Tree: Tamper Evidence at Scale
Rekor operates as a verifiable data structure using a Merkle tree, the same cryptographic construct underpinning certificate transparency logs and blockchain networks. Each entry produces a log inclusion proof that any verifier can independently validate. Critically, Rekor also supports signed tree heads, cryptographic commitments to the log’s state at a given time. Monitors can continuously fetch these tree heads, comparing them for consistency and detecting any attempt to rewrite history. This architecture means even a compromised Rekor instance cannot silently insert or delete entries without detection — a property called non-equivocation.
Setting Up Sigstore in a CI/CD Pipeline
The most impactful deployment pattern for open source projects is integrating Sigstore into GitHub Actions or GitLab CI, where OIDC tokens are natively available without any secrets management overhead. A 2025 analysis by Trail of Bits found that 67% of critical open source projects had adopted some form of artifact signing, but only 31% were using keyless methods — meaning a majority were still carrying key management risk they didn’t need to.
GitHub Actions: Keyless Signing with Cosign
To sign a container image or binary artifact from a GitHub Actions workflow, the configuration requires two permissions: id-token: write (to obtain the OIDC token) and contents: read. The signing step itself is remarkably concise:
- Install Cosign using the sigstore/cosign-installer action, pinning to a specific commit SHA to avoid action hijacking.
- After building your artifact, invoke
cosign sign --yes [artifact-reference]for container images orcosign sign-blob --yes [file]for binaries. - Cosign automatically requests an OIDC token from GitHub’s token endpoint and exchanges it with Fulcio for a short-lived certificate.
- The signature and transparency log entry are created without any manually managed secrets.
One critical hardening step that many guides omit: pin the sigstore/cosign-installer action to a full commit SHA, not a mutable tag like v3. Mutable tags are themselves a supply chain attack vector. Similarly, pin any other actions in your workflow. This practice, combined with dependabot alerts for action version updates, dramatically reduces the attack surface of the pipeline itself.
Signing SLSA Provenance Attestations
Sigstore integrates natively with the SLSA (Supply chain Levels for Software Artifacts) framework, allowing maintainers to attach cryptographically signed build provenance to their releases. Using the slsa-framework/slsa-github-generator alongside Cosign, a project can produce attestations that describe exactly which commit triggered the build, which workflow ran it, and what inputs were consumed. Consumers can verify these attestations using cosign verify-attestation, confirming not just that an artifact is authentic, but that it was built in a trusted, reproducible environment. For PyPI packages, the pypi-publish action now supports OIDC-based trusted publishing with automatic Sigstore attestation, meaning Python maintainers can achieve SLSA Level 3 compliance without writing a single line of custom signing code.
Verification Strategies for Downstream Consumers
Signing artifacts provides no security value unless consumers verify them. This is where many Sigstore deployments fall short — projects sign their releases but publish no verification instructions, leaving users to either skip verification or figure it out independently. The consequences are measurable: a 2025 OpenSSF survey found that fewer than 18% of developers routinely verified the signatures of packages they consumed, even when signatures were available.
Policy Enforcement with Cosign and OPA
For enterprise environments consuming open source dependencies, verification should be automated and policy-driven rather than left to individual developer discretion. Open Policy Agent (OPA) combined with Cosign’s verification output enables declarative, auditable enforcement. A policy might specify: “Only accept artifacts signed by identities matching the pattern @[organization].github.io and recorded in the public Rekor log with a certificate issued by Fulcio’s public instance.” This policy can be enforced at the CI gate, preventing any unsigned or improperly signed dependency from entering the build graph.
For Kubernetes environments, Sigstore’s Policy Controller enforces image signature requirements as an admission webhook. Any pod spec referencing an unsigned or unverified image is rejected before it reaches a node. Organizations running sensitive workloads can configure trust policies per namespace, allowing differential enforcement: strict verification for production namespaces, relaxed for development sandboxes.
Handling Verification in Air-Gapped Environments
Air-gapped environments present a genuine challenge for Sigstore’s architecture, which assumes network access to Rekor and Fulcio. The solution is deploying a private Sigstore stack using the officially supported Helm charts. Organizations can run their own Fulcio instance backed by an internal CA, their own Rekor instance synchronized to internal infrastructure, and configure Cosign to point to these internal endpoints via the --rekor-url and --fulcio-url flags. Private OIDC providers — including HashiCorp Vault, Dex, or Keycloak — can serve as the identity backbone. This architecture preserves the security properties of keyless signing while satisfying compliance requirements for isolated networks.
Threat Modeling Sigstore Deployments
No security architecture is immune to attack, and Sigstore is no exception. Understanding its threat model helps maintainers make informed decisions about trust boundaries and compensating controls. The Sigstore Security Model document, maintained by the project’s security team, identifies four primary trust anchors: the OIDC provider, Fulcio, Rekor, and the client-side tooling (Cosign).
Attacks Against the OIDC Identity Layer
The most accessible attack surface is the OIDC identity claim. If an adversary can obtain a valid OIDC token for a legitimate maintainer’s identity — through account compromise, OAuth misconfiguration, or a rogue CI environment — they can request a Fulcio certificate and produce a technically valid Sigstore signature. This threat is mitigated through several mechanisms: GitHub’s OIDC tokens for Actions include workflow-level claims that Cosign can enforce during verification, meaning a policy can require not just that the signer’s email matches, but that the signing occurred in a specific repository, on a specific branch, triggered by a push event rather than a pull request from a fork.
The real-world implication is that verification policies must be precise. A policy that only checks the signer’s email is weaker than one that also enforces the workflow_ref and repository claims embedded in the Fulcio certificate extension. Maintainers publishing release artifacts should document exactly which claims their verification policy enforces, so downstream consumers can replicate the check faithfully.
Log Monitoring and Anomaly Detection
Because Rekor is public and append-only, it enables a category of security monitoring that was previously impossible with opaque signing systems: identity-based log monitoring. Tools like Sigstore’s Rekor Monitor allow maintainers to subscribe to Rekor entries matching their identity (email, GitHub Actions workflow identity, etc.) and receive alerts when unexpected entries appear. If a maintainer’s identity is used to sign an artifact they did not authorize — perhaps through a compromised CI token — the Rekor entry becomes the forensic evidence and the alert mechanism simultaneously. This closes the detection loop that traditional signing models left completely open.
Governance and Compliance Integration
For organizations subject to regulatory frameworks — SOC 2 Type II, FedRAMP, NIST SP 800-218 (SSDF), or the EU’s Cyber Resilience Act — Sigstore’s architecture maps cleanly onto several control requirements. The NIST SSDF Practice PS.2 explicitly calls for verifying the integrity of third-party software components. Sigstore-based verification, when integrated into a CI/CD pipeline with documented policy, provides the automated, auditable evidence that assessors require.
Generating Compliance Evidence from Rekor
Rekor’s public API allows organizations to query signing events by identity, time range, and artifact hash. This queryability transforms Rekor from a passive transparency log into an active compliance evidence store. Security teams can generate signed artifact inventories — a timestamped record of every software component signed and verified in their build pipeline — directly from Rekor queries. When paired with a Software Bill of Materials (SBOM) workflow using tools like Syft or Trivy, and those SBOMs are themselves signed with Cosign, the result is a cryptographically anchored chain of custody from source commit to deployed artifact. This is precisely the evidence posture that modern software supply chain regulations demand.
Key Takeaways
- Keyless signing eliminates the highest-risk element of traditional code signing — long-lived private keys — by binding signatures to short-lived OIDC identity certificates, drastically reducing the window of exploitability for credential compromise.
- Rekor’s immutable transparency log is both a security control and a forensic resource: every signature is publicly auditable, enabling identity-based monitoring that detects unauthorized signing events in near-real time.
- Signing alone is insufficient; verification policy enforcement — using Cosign’s Policy Controller, OPA integration, or CI gate checks — is where the security value is actually realized for downstream consumers.
- OIDC claim-level verification policies (enforcing repository, branch, and workflow claims, not just signer email) significantly raise the bar against account compromise and rogue CI execution scenarios.
- Sigstore maps directly to NIST SSDF, FedRAMP, and EU Cyber Resilience Act requirements, and its Rekor query API enables automated generation of the compliance evidence artifacts that modern regulatory audits demand.
Conclusion: From Architecture to Action
The supply chain attack surface is not shrinking. The sophistication of adversaries targeting open source ecosystems — from nation-state actors compromising individual maintainer accounts to automated typosquatting campaigns — demands that the community treat artifact integrity as a first-class concern, not an afterthought. Sigstore provides the architectural foundation to do exactly that, and its integration into major package ecosystems means the tooling friction has never been lower.
The gap between “Sigstore is available” and “Sigstore is deployed correctly and defensibly” remains wide. Closing that gap requires maintainers who understand the threat model deeply enough to configure verification policies precisely, monitor Rekor for anomalies proactively, and communicate their signing posture clearly to downstream consumers.
Your immediate action: If you maintain a package on PyPI, npm, or Maven Central, audit your release workflow this week. Enable OIDC-based trusted publishing if your registry supports it, add Cosign signing to your release pipeline pinned to a specific SHA, configure a Rekor Monitor alert for your signing identity, and publish a SECURITY.md entry documenting exactly how consumers should verify your artifacts. These four steps, implementable in a single sprint, move your project from supply chain liability to supply chain model — and they protect every downstream user who trusts your code.
💡 Enjoyed this article?
Subscribe for more expert insights delivered to your inbox.
Follow us or subscribe below xe2x80x94 free, no spam.





