Skip to content
Private Beta ·invite-only access. Reach out to get in.
Back to blog
Threat Intel7 min read·

Supply Chain Attacks: When Your Dependencies Become the Threat

From dependency confusion to typosquatting, your software supply chain is a growing attack surface. Understanding the risks is the first step.

Your Code Is Only as Secure as Your Dependencies

The average modern application has 200–1,000+ dependencies when you count the transitive tree. Each one is a potential entry point for attackers, and supply chain attacks have surged in recent years.

Types of Supply Chain Attacks

1. Dependency Confusion

An attacker publishes a malicious package on a public registry (npm, PyPI) with the same name as an internal package your organization uses. If your build system checks the public registry before (or instead of) your private registry, it pulls the malicious version.

Alex Birsan's 2021 research demonstrated this against Microsoft, Apple, and PayPal. The technique is now automated and regularly attempted against organizations of all sizes.

2. Typosquatting

Register a package with a name very similar to a popular one: reqeusts instead of requests, lodsah instead of lodash. Developers who mistype an install command get the malicious package instead.

npm and PyPI regularly remove typosquatting packages, but the detection is reactive, the malicious package often gets thousands of downloads before removal.

3. Account Takeover

Compromise the credentials of a legitimate package maintainer and push a malicious update. Since the package name and publisher look correct, downstream users pull the update automatically.

The event-stream incident (npm, 2018) is the textbook example: an attacker gained commit access to a popular package by volunteering as a maintainer, then injected cryptocurrency-stealing code.

4. Build System Compromise

Attack the CI/CD pipeline directly. If you can inject code into the build process, via compromised GitHub Actions, poisoned Docker base images, or modified build scripts, you can affect every artifact produced by that pipeline.

The SolarWinds attack (2020) was a sophisticated version of this: attackers compromised the build system to inject a backdoor into every customer update.

Why This Is Getting Worse

Dependency depth: Modern applications depend on hundreds of packages you've never heard of. A vulnerability or compromise 8 levels deep in your dependency tree still runs in your production environment.

Auto-update culture: Dependabot, Renovate, and similar tools create automated PRs for dependency updates, and many teams configure auto-merge for patch updates. This is good for patching known CVEs, but it also means a compromised upstream package can flow into your codebase quickly if your review process is lax.

Maintainer burnout: Many critical open-source packages are maintained by one or two volunteers. When they lose interest (or get tricked into transferring ownership), the security of thousands of downstream projects is at risk.

Detection and Mitigation

Lock files are mandatory. package-lock.json, Pipfile.lock, Cargo.lock, these pin your dependency versions and their integrity hashes. If someone tampers with a package, the hash won't match.

Audit your dependencies regularly. Run npm audit, pip audit, cargo audit. Check for known vulnerabilities AND for unusual version changes or new maintainers.

Pin versions in production. Don't use ^1.2.3 (any compatible update) in production builds. Pin exact versions and only update deliberately.

Use a registry proxy. Tools like Artifactory, Verdaccio, or Nexus can act as a controlled proxy for public registries, giving you a point of control to block known-malicious packages.

Monitor for new CVEs in your dependency tree. This is where we help. Our platform tracks CVEs across your entire declared dependency tree, not just your direct dependencies. When a transitive dependency is compromised or found vulnerable, you know immediately.

The Supply Chain Security Mindset

Think of every dependency as code you didn't write but are responsible for running. You wouldn't deploy code from a random GitHub repo without reviewing it (hopefully). Your dependencies deserve the same scrutiny, or at least, automated monitoring that raises a flag when something changes.

The supply chain isn't a new attack vector. But it's an increasingly attractive one, because it offers attackers massive reach with a single compromise. One poisoned package can affect thousands of applications simultaneously.

Monitor your dependencies. Lock your versions. Audit regularly. It's not glamorous, but it's where the risk is.

Stay ahead of threats

Get AI-filtered CVE alerts for your specific tech stack. Free to start.

Start for free