Threat IntelMay 202510 min read

SolarWinds to XZ Utils: What Supply Chain Attacks Tell Us About Modern Security

In March 2024, a Microsoft engineer named Andres Freund noticed that SSH logins on his Debian machine were taking slightly longer than expected and consuming more CPU than they should. He dug into it. What he found was a backdoor deliberately inserted into XZ Utils, a compression library present in nearly every Linux distribution, by a contributor who had spent two years earning trust in the open-source community before making their move. CVE-2024-3094 had a CVSS score of 10.0. We got lucky that someone noticed.

SolarWinds: The Attack That Changed How We Think About Trust

The SUNBURST attack, disclosed in December 2020, compromised SolarWinds' build pipeline. Attackers injected malicious code into the Orion software update mechanism. Around 18,000 organizations installed the trojanized update. Because it came through a legitimate, signed software update from a trusted vendor, most security controls did not flag it. FireEye discovered their own tools had been stolen via the compromised update. The US Treasury, Department of Homeland Security, and dozens of Fortune 500 companies were affected.

What made SUNBURST so effective was that it attacked trust itself. The update was signed. It came from a known vendor. It passed integrity checks. The attackers had compromised the process that produces the artifact, not the artifact verification mechanism. Traditional perimeter security had nothing to say about it. This is what makes supply chain attacks categorically different from direct attacks on your infrastructure.

XZ Utils: A Long Game in Open Source

The XZ Utils attack was more patient and more targeted than SolarWinds. The attacker, operating under the name "Jia Tan," began contributing to the XZ Utils project in late 2021. Over two years, they built a reputation as a reliable contributor, gradually gained maintainer-level trust, and eventually convinced the original maintainer to hand over control. The backdoor was inserted in 2024 and was specifically designed to enable unauthorized remote access via OpenSSH on affected systems.

The technical sophistication was remarkable. The backdoor was concealed in test binary files that were not part of the normal source code audit trail. It activated only under specific conditions, including the presence of systemd, which limited it to certain Linux distributions and made it harder to detect in lab environments. Forensic analysis after discovery revealed that the attack had been months in the making and showed indicators of a well-resourced, organized effort.

npm Hijacking and Typosquatting: The Everyday Threat

Not every supply chain attack requires years of social engineering. The npm ecosystem has seen repeated incidents of account hijacking and typosquatting. In 2018, the "event-stream" package was compromised after its maintainer transferred ownership to a malicious actor who added a dependency that targeted Bitcoin wallet software. The package had millions of weekly downloads. In 2021, the "ua-parser-js" package was similarly hijacked after the author's npm account was compromised.

Typosquatting is simpler: publish a package named "lodahs" or "requst" and wait for developers to mistype an install command. Researchers regularly find malicious packages sitting in npm, PyPI, and RubyGems for weeks before they are removed, quietly exfiltrating environment variables and credentials from CI pipelines and developer machines. The barrier to this kind of attack is low. The payoff, getting execution in a CI environment that has cloud credentials, is high.

What SBOM Actually Does and Does Not Prevent

A Software Bill of Materials is an inventory of every component in your software, including direct dependencies, transitive dependencies, and their versions. The US government's executive order on cybersecurity in 2021 pushed SBOM into the mainstream, and most large software vendors now produce them. SBOMs are genuinely useful for incident response. When a new vulnerability like Log4Shell hits, an organization with an accurate SBOM can answer "do we use this?" in minutes rather than days.

What SBOM does not prevent is the XZ Utils scenario. An SBOM tells you what you are using. It does not tell you whether the code in those packages is malicious. A backdoor inserted into a legitimate package by a trusted contributor will appear as a normal, known package in your SBOM. The value of SBOM is in known-vulnerability tracking, not malicious-code detection. Both problems matter, but they require different tools.

Dependency Scanning: Where It Helps and Where It Stops

Dependency scanning tools like Dependabot, Snyk, and OWASP Dependency-Check compare your dependency list against CVE databases and alert you when a known vulnerability is published for a package you use. This is table-stakes hygiene and it works well for the problem it solves. Log4Shell, Spring4Shell, and dozens of other critical library vulnerabilities would be caught by any reasonable dependency scanner before they are exploited.

The gap is novel malicious packages. No CVE exists for a freshly uploaded malicious typosquatted package. No CVE existed for XZ Utils during the window between insertion and discovery. Tools like Socket.dev attempt to detect anomalous behavior in npm packages by analyzing install scripts, network access patterns, and code that looks like it exfiltrates environment variables. This behavioral analysis is complementary to CVE-based scanning, not a replacement. You need both.

What a Defensible Supply Chain Posture Looks Like

Start with a private package registry that proxies public registries and allows you to audit and pin specific versions. Lock your dependency files and verify checksums in CI. Treat dependency updates as code changes, not maintenance noise: review changelogs, look at what files changed, and be suspicious of updates that touch unusual areas like build scripts. Use signed commits and require code review on critical open-source projects you maintain or heavily rely on.

At the build pipeline level, treat your CI environment as a high-value target. Rotate secrets regularly, use short-lived credentials, and audit which pipeline steps have access to production credentials. The SolarWinds attack compromised the build process. If your build system has broad production access and runs arbitrary code from external dependencies, you are trusting the entire dependency graph with production access. Scope those credentials tightly. The XZ Utils backdoor was caught because someone noticed anomalous behavior at the system level. Build anomaly detection into your CI output as well.

Know exactly what is running in your environment

NexusVoid maps your dependency graph, monitors for anomalous package behavior, and alerts you to supply chain risks before they become incidents.

Book a Demo