LIVE: New phishing campaigns targeting mobile users —View latest threats →

Back to Tutorials
Advanced 13 min read

Supply Chain Attacks: Risks from Trusted Software

SolarWinds and XZ Utils showed attackers now compromise trusted software to reach thousands of targets. Learn how supply chain attacks work and how to defend.

15 February 2026

What Makes Supply Chain Attacks Different

In a traditional attack, the adversary targets your organization directly — exploiting your vulnerabilities, phishing your employees, or brute-forcing your credentials. A supply chain attack takes a more indirect route: the attacker compromises software, hardware, or services that you trust and install yourself. When that trusted component is delivered to you, the malicious payload comes along for the ride.

This approach is devastatingly effective because organizations have mature defenses against direct attacks but often extend implicit trust to their software vendors, package repositories, and build pipelines. The attacker only needs to compromise one upstream provider to reach thousands of downstream targets.

High-Profile Case Studies

SolarWinds Orion (2020)

APT29 (a Russian state-sponsored group) compromised the build system of SolarWinds, a widely used IT monitoring platform. They inserted a backdoor — dubbed SUNBURST — into the legitimate SolarWinds Orion software update. Approximately 18,000 organizations installed the trojanized update, including the US Treasury, Department of Homeland Security, and major defense contractors. The backdoor lay dormant for two weeks after installation before activating, evading behavior-based detection.

The lesson: even signed, vendor-supplied software updates are not unconditionally trustworthy.

XZ Utils Backdoor (2024)

A threat actor spent nearly two years patiently building trust in the XZ Utils open-source project under a fake identity, gradually taking over maintainership. They then inserted a sophisticated backdoor targeting systemd-linked SSH daemons on Linux systems. The backdoor was caught by a Microsoft engineer who noticed unusual CPU usage during SSH logins — just days before the compromised version was set to reach major distribution repositories.

This case demonstrated the sophistication of long-game social engineering targeting open-source maintainers.

npm Package Poisoning

The JavaScript ecosystem has seen repeated supply chain incidents:

  • event-stream (2018): a new maintainer added a cryptomining payload targeting a specific Bitcoin wallet
  • node-ipc (2022): the maintainer deliberately inserted destructive code targeting Russian and Belarusian IP addresses
  • Typosquatting: packages named lodahs, crossenv, or momnet to catch mistyped npm install commands

The npm registry alone hosts over two million packages, and dependency trees commonly run hundreds of packages deep — most of which your team has never reviewed.

Attack Vectors in the Software Supply Chain

Supply chain attacks enter through multiple channels:

  • Compromised build systems: injecting malicious code during compilation (like SolarWinds)
  • Dependency confusion: uploading a malicious public package with the same name as a private internal package, exploiting package manager resolution order
  • Typosquatting: registering packages with names similar to popular libraries
  • Account takeover: hijacking a package maintainer's account to publish a malicious update
  • CI/CD pipeline compromise: injecting malicious steps into build pipelines that have broad access to production systems
  • Compromised hardware: implants added during manufacturing (a concern for firmware and network equipment)

Defenses: Dependency Management

Pin dependency versions — don't use floating version ranges (^1.2.3 or latest). Lock files (package-lock.json, Cargo.lock, requirements.txt with hashes) ensure you install exactly what you tested. Verify integrity using checksums:

# npm — verify against lock file
npm ci

# pip — require hash verification
pip install --require-hashes -r requirements.txt

Audit dependencies regularly: npm audit, pip-audit, cargo audit, trivy for containers. Subscribe to security advisories for your key dependencies via GitHub's Dependabot or OSV.dev.

Minimize your dependency tree. Before adding a package, ask: is this dependency actively maintained? How widely used is it? Could you implement this yourself in 20 lines?

Defenses: Build Pipeline Security

  • Use reproducible builds — the same source should always produce bit-for-bit identical output, making unauthorized modifications detectable
  • Sign your release artifacts and verify signatures before deployment: use Sigstore/cosign for containers and binaries
  • Enforce least privilege in CI/CD: build jobs should only have access to what they need; secrets should be scoped to specific pipelines and environments
  • Enable SLSA (Supply Chain Levels for Software Artifacts) — a framework that provides verifiable provenance for build artifacts
  • Review GitHub Actions workflows and third-party actions — pin actions to specific commit SHAs, not mutable branch names or tags

Defenses: Vendor and Open Source Risk

  • Maintain a Software Bill of Materials (SBOM) — a complete inventory of all software components and their versions. Tools like Syft and CycloneDX can generate SBOMs automatically.
  • Before adopting a critical open-source library, review its maintainer activity, governance model, and whether it has had past security incidents
  • For critical dependencies, consider vendoring — copying the source into your own repository — to prevent upstream changes from affecting you automatically
  • Implement network egress controls in your build environment to prevent malicious packages from exfiltrating secrets during build time
#supply chain#software security#open source#SolarWinds