What's Hiding in Your Dependency Tree: Supply Chain Security for Open Infrastructure Projects
Photo: Stern, CC BY-SA 3.0, via Wikimedia Commons
The Inheritance Problem Nobody Talks About
Every software project is, in some sense, a collection of decisions made by strangers. When a developer pulls in a third-party library to handle JSON parsing or HTTP requests, they are implicitly trusting a chain of maintainers, contributors, and package registries they have likely never audited. For commercial software companies, this risk is increasingly well-understood. For open infrastructure projects — the platforms, toolkits, and shared services that researchers, nonprofits, and community developers depend on — the exposure can be far more serious and far less examined.
The reasons are understandable. Open projects are typically resource-constrained. Security expertise is unevenly distributed across contributor communities. And there is a cultural tendency, not entirely unreasonable, to treat open-source dependencies as inherently more trustworthy than proprietary alternatives because the code is theoretically visible. That assumption, however, has proven costly.
The 2021 Log4Shell vulnerability — discovered in the ubiquitous Log4j Java logging library — demonstrated with brutal clarity how a single dependency, embedded in thousands of downstream projects, could expose critical infrastructure to remote code execution. Many of the organizations caught flat-footed were not negligent actors. They simply had no systematic process for understanding what was actually running inside their own systems.
Why Open Projects Face Distinct Risks
Commercial software vendors face regulatory pressure, insurance requirements, and reputational incentives to take supply chain security seriously. Open infrastructure projects face none of these structural motivators in the same form. Their contributors are often volunteers or researchers funded on short grant cycles. Their governance structures, where they exist at all, rarely include security review as a standing function.
This creates a particular vulnerability profile. Dependencies adopted during a project's early, scrappy phase tend to calcify. A library chosen in 2017 because it was the most convenient option available may still be present in 2024, even if its original maintainer has long since moved on, its codebase has gone unpatched, or its package registry entry has been quietly transferred to a new owner whose intentions are unknown. The dependency did not become dangerous overnight. It became dangerous gradually, while everyone was looking elsewhere.
There is also the problem of transitive dependencies — the libraries that your libraries depend on. A project may directly reference a dozen packages, each of which pulls in dozens more. The full dependency tree of even a modestly complex application can encompass hundreds of discrete software components, many of them maintained by a single individual with no organizational backing. Auditing only direct dependencies while ignoring the transitive layer is the rough equivalent of checking the front door locks while leaving the basement window open.
Frameworks That Work Without Paralyzing Development
The temptation, upon recognizing the scope of the problem, is either to ignore it entirely or to mandate comprehensive audits that bring development to a standstill. Neither response is sustainable. What effective supply chain security looks like in practice is closer to a continuous, lightweight discipline than a periodic deep-dive.
Several frameworks have emerged that are well-suited to the resource realities of open infrastructure projects. The OpenSSF Scorecard, developed under the Open Source Security Foundation, provides automated assessments of open-source repositories across dimensions like branch protection, dependency update policies, and vulnerability disclosure processes. It is not a substitute for human judgment, but it provides a rapid triage mechanism that allows small teams to prioritize which dependencies warrant closer examination.
Software Bills of Materials, or SBOMs, represent another practical tool. An SBOM is essentially a formal inventory of every component present in a software build, analogous to the ingredient list on a food product. Generating and maintaining an SBOM does not by itself eliminate risk, but it creates the foundational visibility that makes risk management possible. Tools like Syft and CycloneDX have made SBOM generation increasingly accessible to projects without dedicated security staff.
Dependency pinning — specifying exact version numbers rather than accepting the latest available release — is a simple practice that meaningfully reduces exposure to supply chain attacks that target the update mechanism itself. Combined with automated dependency update tools like Dependabot or Renovate, which flag known vulnerabilities in existing versions, pinning allows projects to move deliberately rather than reactively.
Case Studies in Early Detection and Costly Delay
The difference between projects that caught supply chain problems early and those that did not often comes down to whether security review was treated as a recurring practice or a one-time event.
One instructive example comes from the broader open-source community's response to the discovery of the event-stream incident in 2018, in which a popular npm package was transferred to a malicious actor who introduced code designed to steal cryptocurrency wallet credentials. Projects that had implemented automated dependency scanning caught the compromise quickly. Those relying on manual review or no review at all were exposed for significantly longer periods.
Conversely, projects that have implemented proactive supply chain hygiene — including regular reviews of maintainer activity, automated alerts for packages that have gone unmaintained for extended periods, and explicit policies governing the introduction of new dependencies — have generally been able to address vulnerabilities before they were exploited. The overhead is real but manageable: teams report that a structured monthly review of dependency health, combined with continuous automated scanning, adds a modest but acceptable burden to their workflows.
Preserving Collaboration Without Accepting Blind Trust
One legitimate concern among open infrastructure communities is that aggressive supply chain security practices could chill the collaborative culture that makes open development effective. If every proposed dependency addition requires weeks of security review, contributors may simply stop proposing improvements. If audits are conducted in a punitive or secretive manner, they may undermine the transparency norms that distinguish open projects from their proprietary counterparts.
This tension is real, but it is not irresolvable. The most effective approaches treat supply chain security as a shared responsibility rather than a gatekeeping function. Documenting the criteria by which dependencies are evaluated, publishing the results of audits openly, and creating clear pathways for contributors to raise supply chain concerns without fear of dismissal all reinforce rather than contradict the open ethos.
The Condor Platform perspective on this is straightforward: open infrastructure exists to serve builders and researchers who cannot afford the consequences of a compromised platform. Protecting that infrastructure is not a bureaucratic imposition on collaborative development. It is a precondition for it.
Where to Begin
For projects that have not yet implemented any formal supply chain security practice, the entry point need not be overwhelming. A reasonable starting posture includes generating an SBOM for the current codebase, running it against a known vulnerability database such as the National Vulnerability Database maintained by NIST, and identifying any direct or transitive dependencies that are either unmaintained or flagged for known issues. That initial inventory will rarely be clean, but it will be honest — and honesty about what is actually present in the stack is the only foundation on which meaningful security can be built.
The goal is not perfection. It is awareness, discipline, and the institutional habit of asking, periodically and seriously, what is hiding in the dependency tree.