BitBootcampBitBootcamp ← all explainers 🔄 Review ⚙ Settings

CASE-02 · Case Study — SolarWinds: Poisoning the Well

What happened

In late 2020, investigators disclosed that a nation-state actor had compromised SolarWinds Orion, a widely deployed IT network-monitoring platform. The attacker did not break into each victim one at a time. Instead they broke into one place that every victim trusted: the Orion build system — the machinery that compiles source code into the shipped product. There they inserted a backdoor, later named SUNBURST, into the Orion software itself. The poisoned code was then compiled, signed with SolarWinds' legitimate code-signing certificate, and pushed out through the normal update channel as a routine, trusted update. About 18,000 customers downloaded the trojanized version. Because it carried a valid signature and arrived through the official channel, nothing looked wrong. The well everyone drank from had been poisoned upstream.

See it — the compromise, entry to impact

timeline
  title SUNBURST supply-chain compromise
  Build system breached : Actor reaches the Orion build pipeline
  Backdoor inserted : SUNBURST added before the signing step
  Signed and shipped : Valid certificate, official update channel
  Customers update : About 18,000 pull the trojanized Orion
  Deeper intrusion : A smaller subset further exploited

The root cause

The failure was not a single unpatched vulnerability or a stolen password on one server. The root cause was that the integrity of the build-and-release pipeline was never verified. Everyone downstream — every customer, every automated updater — trusted the artifact because it was signed, and it was signed because it came out of the build system. But nobody proved that what came out of the build matched the reviewed source that went in. The attacker exploited exactly that blind spot: they modified the product between source and signature, in the one window where the code was no longer what developers wrote but was about to be blessed as trusted. Code signing answers "did this come from SolarWinds?" It does not answer "is this the code SolarWinds' developers actually reviewed?" That gap is the whole story.

The control that would have stopped it

Defenders stop this class of attack by treating the build pipeline as a high-value production system, not plumbing. Build-system hardening isolates and monitors the build environment so an intruder cannot quietly alter artifacts. Reproducible builds let an independent party rebuild the same source and confirm they get a bit-for-bit identical binary — so a backdoor inserted during the build no longer matches and is caught before signing. Artifact integrity verification checks each stage against the last, so no step can silently substitute code. And a Software Bill of Materials, an SBOM, gives every consumer a queryable inventory of exactly what shipped, so "am I running the poisoned version?" is a lookup, not a forensic hunt. Signing proves origin; these controls prove the contents.

The blast radius

The reach came from Orion's position: network-monitoring software runs with broad, privileged visibility across an organization. About 18,000 customers received the trojanized update. Not all of them were exploited further — the actor selectively pursued a smaller, high-value subset that included U.S. government agencies and major technology and security firms. The disclosure triggered CISA Emergency Directive 21-01, which ordered federal agencies to disconnect or power down affected Orion products immediately. The blast radius was not measured only in machines compromised; it was measured in eroded trust. Every organization that ran Orion had to assume its monitoring layer — the very tool meant to watch for intrusions — might have been the intrusion.

See it

A defender reasons in two questions the incident forces you to separate. First, origin: did this artifact come from the vendor? Code signing answers that, and here it answered "yes" — which is exactly why the attack worked. Second, integrity: is this artifact the reviewed source, unaltered? Nothing in the pipeline answered that. Reproducible builds and artifact verification exist to answer the second question independently of the first, so a valid signature over poisoned code gets caught. When you only check origin, a compromised build system hands attackers a trusted distribution channel to your entire customer base.

The lesson

A signature proves who shipped the code, never that the code is what they meant to ship — verify the build, not just the signer.

Where it rhymes

This is the archetype of OWASP A08 — Software and Data Integrity Failures: trusting code, updates, or CI/CD pipelines without verifying their integrity. In MITRE ATT&CK terms it is a Supply Chain Compromise (T1195), specifically compromise of the software supply chain before delivery. It rhymes with Drill 60 — The Package That Turned: in both, you inherit and trust code you did not write and cannot see change, so the defensive reflex is the same — make "what am I actually running, and is it unaltered?" a query you can answer on demand, backed by an SBOM and integrity checks, rather than a signature you take on faith.

Named concepts: software supply chain attack, build system integrity, code signing trust, SBOM, reproducible builds