Skip to content
· 5 min read CRITICAL @Sdmrf

The XZ Utils Backdoor: One Year Later, What Have We Learned?

A year after the discovery of the XZ Utils supply chain attack, examining what changed in open source security and what still keeps maintainers up at night.

On this page

March 29, 2024. Andres Freund, a PostgreSQL developer at Microsoft, noticed something odd. SSH connections to his Debian sid box were taking longer than usual - about 500ms of extra CPU time per connection.

What he found when he investigated would shake the open source community to its core.

A Quick Refresher

The XZ Utils backdoor (CVE-2024-3094) was a sophisticated supply chain attack that nearly compromised SSH authentication on most Linux distributions. The key points:

  • A malicious maintainer (“Jia Tan”) spent 2+ years building trust in the xz-utils project
  • Backdoor code was hidden in test files, activated only during package builds
  • The backdoor hooked into OpenSSH via systemd’s liblzma dependency
  • It would have allowed attackers to bypass SSH authentication entirely

The attack was caught literally days before it would have shipped in stable Debian and other major distributions.

What Changed

The Good

1. Increased Scrutiny of Build Systems

The xz backdoor exploited the gap between source code (which was clean) and binary packages (which contained the backdoor). This has led to:

  • More distributions adopting reproducible builds
  • Increased use of binary transparency logs
  • Better tooling for comparing built packages against source

2. Maintainer Support Programs

Several initiatives launched to support critical open source maintainers:

  • The Linux Foundation’s Alpha-Omega Project expanded funding
  • GitHub’s Sponsors program got better visibility
  • Companies started paying maintainers directly for security work

3. Identity Verification

The attacker used a pseudonymous identity with no verifiable real-world connection. Now:

  • Many projects require identity verification for commit access
  • Some require multiple maintainers to sign off on releases
  • Package repositories are implementing stricter verification

The Bad

1. Maintainer Burnout is Worse

The aftermath created a chilling effect. Maintainers now face:

  • Increased scrutiny and criticism
  • Paranoia about accepting new contributors
  • More work for already-overworked volunteers

One maintainer told me: “Now every time someone offers to help, I wonder if they’re the next Jia Tan. It’s exhausting.”

2. The Fundamental Problem Remains

Critical infrastructure still depends on:

  • Unpaid volunteers
  • Single points of failure
  • Minimal security review

For every xz-utils that gets attention, there are thousands of similar projects with one stressed maintainer.

3. Detection Was Lucky

Let’s be clear: we got lucky. The backdoor was discovered because:

  • One engineer noticed a performance regression
  • He had the skills to investigate deeply
  • The attackers made a timing mistake

If the backdoor had been slightly more optimized, or if Andres had been too busy that day, this would be in production everywhere.

The Technical Legacy

The xz backdoor was technically impressive in concerning ways. Some elements we’re still learning from:

Staged Payload Delivery

The backdoor wasn’t in the source repo. It was constructed during the build process from seemingly innocent test files. This is now a known attack pattern to watch for:

test_files/ + build_script = backdoor

Build systems need to be treated as part of the attack surface.

Targeted Activation

The backdoor only activated when:

  • Built on Debian or RPM-based systems
  • Using specific compiler flags
  • The resulting binary was running as sshd

This level of targeting made it harder to detect during development.

Dependency Chain Exploitation

The attack exploited a non-obvious dependency:

sshd → systemd → liblzma (xz-utils)

Most people didn’t know sshd had any connection to xz compression. Mapping these hidden dependencies is now a priority.

What We’re Watching Now

A few concerning trends since the incident:

1. Copycat Attempts

There have been at least three public cases of suspicious contributors attempting the same playbook: build trust slowly, then request commit access. Projects are getting better at spotting these, but it’s a constant game.

2. Other Compression Libraries

XZ wasn’t special - it was just the one that got caught. Security researchers have been auditing similar projects. I won’t name specifics, but let’s say the audit findings haven’t been reassuring.

3. Nation-State Interest

The sophistication of the xz attack suggests nation-state involvement. There’s no public attribution, but the resources required - years of patient social engineering, sophisticated technical implementation - aren’t typical of financially-motivated attackers.

What You Should Do

If you run infrastructure:

  • Audit your dependency trees, especially compression libraries
  • Implement binary transparency checking where possible
  • Fund the open source projects you depend on
  • Have a response plan for supply chain compromises

If you’re a maintainer:

  • Document your build process and make it reproducible
  • Require multiple reviewers for sensitive changes
  • It’s okay to be paranoid about new contributors
  • Reach out if you need support - you’re not alone

If you’re a developer:

  • Understand your transitive dependencies
  • Verify package signatures and hashes
  • Consider vendoring critical dependencies
  • Participate in security reviews when you can

One Year On

The xz incident was a wake-up call. Whether we actually woke up is still TBD.

We’ve made progress on tooling and awareness. But the structural problems - volunteer maintainers, inadequate funding, complexity of modern software - remain largely unsolved.

The next xz-style attack isn’t a matter of if, but when. The question is whether we’ll get lucky again.

Further Reading


“In retrospect, it seems almost miraculous that it was caught.” - Bruce Schneier on the xz backdoor

Related Articles