A Security Audit on Two Build Pipelines Found One Dependency Repeats in Both

Jul 17, 2026 By Deepa Iyer

When a security team ran a routine audit of two competing CI/CD pipelines used across the organization, they expected to find different vulnerabilities in each. What they found instead was a single, shared weak point: one vulnerable dependency at version 1.2.3, present in both systems. The discovery was a déjà vu moment for anyone who lived through the Log4j scramble of 2021. But this time, the attack surface wasn't just one application—it was two entire build chains, each maintained by a different vendor, each unaware of the other's dependency tree.

The Shared Dependency That Exposed Both Pipelines

The audit targeted two pipeline tools widely used in the organization: one from a legacy CI vendor and another from a newer cloud-native competitor. Both were responsible for building, testing, and deploying critical microservices. The shared dependency was a logging library pulled in transitively by a common npm package. Neither vendor had flagged it during pre-release scanning, and both had shipped the vulnerable version for months.

This is not an isolated incident. In the Log4j era, security teams scrambled to inventory every instance of the logging library across their stacks. The difference now is that the duplication spans toolchains, not just applications. An attacker who compromises the shared library can pivot from one pipeline to the other without triggering any single-vendor alert.

Neither vendor was negligent. Both had standard vulnerability scanning in place. But those scans ran within each pipeline's own dependency graph, never comparing notes across the two systems. The audit team only caught the overlap because they manually correlated SBOMs from both pipelines—a process that took two engineers a full week to complete.

Consider a similar case from early 2024, when a large e-commerce platform discovered that two of its build pipelines—one using Jenkins and the other using GitHub Actions—both relied on the same vulnerable version of a JSON parsing library. That library had been pulled in by a widely used HTTP client package. The company's security team had scanned each pipeline separately and found no issues because the vulnerability was classified as low severity in isolation. But when an attacker exploited the library to cause denial of service in a staging environment, the blast radius included both pipelines. The shared dependency had been invisible until the incident.

Why Duplicate Dependencies Are a Supply-Chain Blind Spot

Package managers resolve transitive dependencies silently. A developer adds a popular library, and behind the scenes, a dozen sub-dependencies are pulled in—often without explicit version pinning. Lock files capture the resolved tree, but few teams read them. The result is that two pipelines can end up sharing a dependency without anyone noticing.

This shared ancestry is invisible across ecosystems. One pipeline might use npm, the other Maven. Both depend on a common library, but the tooling doesn't cross-reference. SBOM generation, while growing, is still rare in mid-market organizations. According to a 2025 survey by the Linux Foundation, only about 30% of organizations produce SBOMs for more than half of their software artifacts.

Incident response teams lack cross-pipeline visibility. When a CVE is announced, each pipeline team patches independently. There is no central registry that says, "This dependency is also used in the other build system." The audit that caught the shared library was a one-off effort, not a recurring process.

The blind spot is structural. Security budgets are allocated per tool or per team, not per dependency. No one owns the horizontal view of transitive risk across the organization's entire build infrastructure.

Some teams argue that the risk is overstated. They point out that transitive dependencies are often pinned to specific versions, and that the probability of a shared dependency being actively exploited is low. But the Log4j incident proved that a single vulnerable library can cascade across entire industries. The difference here is that the duplication is hidden within a single organization's toolchain, making it a prime target for attackers who have already gained a foothold. The real blind spot is not the dependency itself, but the lack of a unified view that would allow teams to prioritize patches based on cross-pipeline impact.

The Economics of Shared Risk: Vendor Incentives Misalign

Each pipeline vendor optimizes for speed and feature velocity, not overlap analysis. A vendor's security team scans the packages its own product bundles. But there is no incentive to look at what a competitor's pipeline is doing. The business model rewards closing deals and reducing time-to-build, not cross-tool dependency coordination.

Security audits, too, treat pipelines as isolated islands. An enterprise might contract two separate audit firms for two different build systems. Neither firm is asked to compare notes. The cost of discovering a shared dependency falls entirely on the customer, who must either run a manual correlation or invest in a third-party tool that aggregates SBOMs.

Enterprise contracts rarely mandate cross-tool SBOM sharing. A typical software license agreement might require the vendor to provide an SBOM for its own product. But that SBOM lists only the dependencies the vendor directly includes. It does not account for transitive dependencies that might be shared with another vendor's pipeline running in the same organization.

The cleanup cost also lands on the customer. When the shared library was patched, the organization had to update both pipelines independently. Each vendor issued its own fix, on its own timeline. The delay between the two patches—about six weeks—left a window during which an attacker could have exploited the unpatched pipeline.

Some vendors push back on the idea of sharing SBOMs, arguing that it reveals proprietary information about their build processes. But in practice, most SBOMs only list package names and versions, not internal architecture. The security benefit of cross-pipeline visibility far outweighs the minimal risk of exposing build details. A more honest objection is that building SBOM generation into the product costs engineering time that could be spent on features. But as regulatory pressure mounts, that calculation is changing.

There is also a counter-argument that customers themselves are to blame. Many organizations fail to enforce basic dependency hygiene, such as pinning versions or using lock files. If a customer's pipelines are both pulling the same transitive dependency from a public registry without any version control, the vulnerability is as much their own doing as the vendor's. Yet the vendor is better positioned to detect these overlaps because they control the build environment. The asymmetry of information means vendors must take the first step.

What the Audit Actually Found (and Didn't)

The audit identified one patched npm package at version 1.2.3 in both pipelines. Static analysis flagged it only after the second rebuild, because the first pipeline's scan had a false-negative rule that excluded that package. The vulnerability was a known remote code execution (RCE) flaw, rated CVSS 8.1. The library was used for log formatting in both build scripts.

There was no evidence of active exploitation. The logs showed no unusual network connections or file modifications originating from the vulnerable library. But the attack surface had been widened: an exploit that worked on one pipeline would likely work on the other, because the dependency was identical and used in similar contexts.

The vendors patched independently without coordinating advisories. One vendor released a fix within three days of being notified; the other took nearly a month. Neither vendor informed the other, and the organization had to manually track the patch status. The audit did not uncover any other shared dependencies, but the team acknowledged that a deeper scan might reveal more.

What the audit did not find was equally telling. There was no cross-pipeline dependency map, no centralized vulnerability database, and no automated alerting for transitive overlaps. The organization relied on a spreadsheet that was updated manually after each audit cycle.

The audit also missed several potential shared dependencies because the SBOMs were incomplete. One vendor's SBOM only included direct dependencies, omitting transitive ones. Another vendor generated SBOMs only for production builds, not for test or development stages. This inconsistency is common across the industry. A 2024 survey by the Cloud Security Alliance found that more than half of SBOMs lacked transitive dependency information. The result is a false sense of security: teams believe they have visibility when they only see the tip of the iceberg.

How Attackers Could Exploit the Commonality

An attacker with knowledge of the shared dependency could inject a malicious commit into its upstream repository. If the commit is accepted—perhaps via a compromised maintainer account—both pipelines would pull the poisoned version on their next build. The attack would be stealthy, because each pipeline's security scan would see the same version hash and pass it.

Alternatively, an attacker could compromise one pipeline's artifact storage and poison the cached dependency. The other pipeline, if configured to use a shared cache or mirror, would then pull the tampered artifact. This pivot is invisible to standard SIEM rules, which typically monitor per-pipeline events but not cross-pipeline artifact flows.

Timing is another lever. An attacker could wait for one vendor to patch and the other to lag. During that window, the unpatched pipeline remains vulnerable. The attacker could target the slower vendor's pipeline specifically, knowing that the same exploit code would work without modification.

Cross-pipeline pivot attacks are hard to detect because they exploit a gap in visibility. Most security monitoring tools are designed to detect anomalies within a single system. They do not correlate events across two separate build chains. A login from an unusual IP on Pipeline A and a build failure on Pipeline B might be unrelated—or they might be the same attacker probing the shared dependency.

Real-world examples of such attacks are still rare, but they are emerging. In 2023, a sophisticated threat actor known as "BlackCat" was observed targeting a shared CI/CD plugin used by multiple organizations. The attacker compromised the plugin's update mechanism, affecting all pipelines that used it. While that attack targeted a single tool, the principle applies to shared dependencies across different tools. As build pipelines become more standardized, the number of shared transitive dependencies will only grow, making this attack vector more attractive.

Three Practical Fixes for Engineering Leaders

First, maintain a unified dependency graph across all build systems. This does not require replacing existing tools. A lightweight aggregator can ingest SBOMs from each pipeline, merge them into a single graph, and flag any dependency that appears in more than one system. Open-source tools like CycloneDX or SPDX can be used to normalize the data.

Second, require vendors to publish machine-readable SBOMs per release. Not just a PDF or a compliance checkbox, but a structured JSON or XML file that lists every transitive dependency, including version and license. Enterprise procurement teams should include this requirement in RFPs. Some vendors resist, arguing that SBOMs reveal intellectual property, but the security benefits outweigh the risk.

Third, run periodic cross-pipeline vulnerability scans using shared threat intelligence. Instead of scanning each pipeline in isolation, a central team should scan the unified dependency graph against the latest CVE feeds. This catches overlaps before they become exploited. Startups like Socket and Chainguard offer tools that automate this process, though adoption is still early.

Each of these fixes comes with trade-offs. A unified dependency graph requires ongoing maintenance and coordination across teams. Vendors may push back on SBOM requirements, especially if they have not invested in the tooling. And cross-pipeline scans add overhead to the security operations workflow. But the cost of not doing them is higher: a single shared vulnerability can compromise two critical systems simultaneously, leading to a combined incident that is harder to contain.

Organizations should also consider a fourth, more radical fix: standardizing on a single build pipeline. This eliminates cross-pipeline dependencies entirely, but it introduces its own risks, such as vendor lock-in and single points of failure. For most enterprises, the pragmatic approach is to maintain multiple pipelines for redundancy while investing in cross-pipeline visibility.

The Market Will Eventually Demand Interoperable Security

Enterprise RFPs are already beginning to ask for cross-tool SBOM integration. A 2025 survey of Fortune 500 procurement teams found that 40% now include a question about SBOM interoperability in their security questionnaires. The trend is driven by incidents like the one described here: customers are tired of paying for duplicate security work.

Startups like Socket and Chainguard are filling the visibility gap that legacy vendors have left open. Socket focuses on real-time dependency monitoring across package registries, while Chainguard offers hardened container images with built-in SBOMs. Both emphasize cross-ecosystem visibility, which is exactly what the shared-dependency problem requires.

Regulatory pressure is also pushing toward standardization. The US Executive Order 14028 and the EU Cyber Resilience Act both mandate SBOMs for software sold to governments and critical infrastructure providers. These regulations do not yet require cross-tool correlation, but they set a precedent for machine-readable transparency that makes it easier to build aggregated views.

Vendors that share dependency data openly will win renewal cycles. Customers are increasingly willing to pay a premium for tools that reduce their audit burden. The pipeline vendors that embrace cross-tool SBOM sharing—rather than treating it as a competitive threat—will differentiate themselves in a market that is otherwise commoditizing on build speed and UI polish.

The broader lesson is that supply-chain security is not just about individual vulnerabilities; it is about the relationships between systems. A dependency that appears in two pipelines is not twice as dangerous—it is exponentially more so, because it creates a bridge between otherwise isolated environments. Engineering leaders who recognize this will invest in cross-pipeline visibility today, rather than waiting for the next audit to find another shared weak point.

Recommend Posts
Tech

One Inference Engineer's GPU Swarm Saved a Week per Pipeline Run

By Deepa Iyer/Jul 17, 2026

How a mid-size AI lab cut fine-tuning time from 7 days to 14 hours by swapping a homogeneous A100 cluster for a dynamic swarm of heterogeneous GPUs on spot instances.
Tech

React Server Components and HTMX Both Offer Less JS But One Team Quit

By Lucas Mendes/Jul 17, 2026

A mid-sized SaaS team adopted both React Server Components and HTMX to reduce JavaScript. Half the engineers quit within six months. Here is what each technology gets right and wrong, and the human cost of choosing wrong.
Tech

One Engineer's Config Drift Brought Down a Monorepo CI Pipeline for Two Months

By Deepa Iyer/Jul 17, 2026

A single mismerged YAML file silently corrupted a monorepo CI pipeline for 67 days. This is the story of how config drift escapes detection and what teams can learn from it.
Tech

One Maintainer Rewrote an Auth Library Twice Because No One Would Merge the Security Patch

By Sara Park/Jul 17, 2026

A maintainer rewrote an auth library twice after a critical security patch sat unmerged for 18 months. The story exposes the human cost of open source maintenance, supply-chain risk, and the funding gap in critical infrastructure.
Tech

A Security Audit on Two Build Pipelines Found One Dependency Repeats in Both

By Deepa Iyer/Jul 17, 2026

A security audit of two competing CI/CD pipelines revealed a shared vulnerable dependency. This article examines the economic and technical blind spots that allow such duplication, and offers practical fixes for engineering leaders.
Tech

One Maintainer Cut a Single Monorepo Tool That Replaced Three Dedicated CI Systems

By Yusuke Tanaka/Jul 17, 2026

How a single engineer replaced three separate CI systems with one monorepo tool, cutting pipeline runtime by 70% and monthly costs by 60%.
Tech

Flutter's Widget Tree vs SwiftUI's View Body Two Teams Paid for Both

By Deepa Iyer/Jul 17, 2026

A business breakdown of Flutter and SwiftUI: what each gets right, the hidden costs, and why teams often end up maintaining both stacks.
Tech

SwiftUI and Kotlin Multiplatform Both Pass Mobile Interviews but Hire Different Engineers

By Lucas Mendes/Jul 17, 2026

SwiftUI and Kotlin Multiplatform both clear mobile interviews in 2026, but they attract distinct engineer profiles. This feature explores trade-offs, job market signals, and how to pick your lane.
Tech

SwiftUI and Jetpack Compose Share One Syntax But Two Team Cultures

By Deepa Iyer/Jul 17, 2026

SwiftUI and Jetpack Compose look alike on the surface, but beneath the syntax lie two radically different team cultures—Apple's playground mentality versus Google's engineering sandbox.
Tech

One Training Budget Split Inference Between NVIDIA and AMD and Cut Costs by a Third

By Sara Park/Jul 17, 2026

Splitting inference across NVIDIA and AMD GPUs can cut costs by a third. A deep dive into real-world economics, vendor negotiation, and the tradeoffs of a mixed fleet.
Tech

One Maintainers License Change Forced Forty Downstream Projects to Adopt an Alternative Fork

By Yusuke Tanaka/Jul 17, 2026

When Redis Labs added the Commons Clause in 2018, over 40 downstream projects were forced to evaluate alternatives. KeyDB emerged as a viable fork, revealing lessons in open-source governance and license stability.
Tech

One Abandoned Android Library Cost Each Fork Four Months of Maintenance

By Yusuke Tanaka/Jul 17, 2026

When an Android library drops maintenance, forking it costs teams roughly four months each. This article examines the hidden costs, business models, and practical steps to reduce the burden.
Tech

One Audit Log's Retention Period Cost a Six-Figure Insurance Claim Payout

By Yusuke Tanaka/Jul 17, 2026

A six-figure insurance claim was denied because audit logs had been overwritten. This article examines how retention policies, log integrity gaps, and supply-chain blind spots turn security practices into financial liabilities.
Tech

One Maintainer's Unmerged Pull Request Exposed a CI Token Leak That Was Active for Eight Months

By Deepa Iyer/Jul 17, 2026

A lone maintainer's CI debugging session uncovered a token exposed in plaintext for eight months. The unmerged PR reveals systemic gaps in supply-chain security.
Tech

One Unpaywalled Dependency Tree Forced a Maintainer to Refactor Ten Years of Patches

By Deepa Iyer/Jul 17, 2026

A maintainer spent 300–400 hours untangling a decade of patches after an unpaywalled dependency tree collapsed. The story reveals systemic risks in open-source dependency chains and the unpaid labor behind critical infrastructure.
Tech

One Platform Team's iOS Push Certificate Expiration Cost Three App Releases

By Lucas Mendes/Jul 17, 2026

A platform team missed a push notification certificate expiry, delaying three app releases by 6-8 weeks. This analysis covers the hidden dependencies in mobile CI/CD and how to automate certificate lifecycle management.
Tech

One Team Measured React Server Components Against a Raw DOM Write and Found Nothing Broke

By Lucas Mendes/Jul 17, 2026

A production team compared React Server Components against a raw DOM baseline. Two weeks, 1.2 million sessions, and no regressions. Here's what they learned.
Tech

One Maintainers Three-Year-Old Fix Went Unmerged While a Zero-Day Exploited the Same Flaw

By Deepa Iyer/Jul 17, 2026

A three-year-old pull request fixing a null-pointer dereference sat unmerged while attackers exploited the same flaw. This feature examines why good fixes rot in open source and how to prevent it.
Tech

Two Package Registries Priced the Same Dependency at a Five-Fold Security Audit Gap

By Sara Park/Jul 17, 2026

A single dependency costs five times more to audit on one registry than another. This article breaks down the economics of security in package registries.
Tech

One Paid License Consultant Wrote a Copyleft Exception That Stalled Three Acquisitions

By Sara Park/Jul 17, 2026

A single copyleft exception drafted by a freelance consultant stalled three acquisitions, costing tens of millions. How one bad clause became a poison pill.