Incidents & Vulnerabilities

The XZ Utils backdoor (CVE-2024-3094) — a supply-chain attack by a trusted co-maintainer

In 2024 a backdoor planted in xz/liblzma by a trusted co-maintainer was found just before stable releases because logins were slow. Supply-chain lessons.

Published 2026-06-07 Updated 2026-10-23 4 min read
On this page

Revisiting a major past incident for the lessons that still apply to your operations.

2024
discovered
years
spent building trust
trust
what was targeted
just in time
caught just before stable

What happened

The library was under-maintained, long carried by a single person. Another individual contributed steadily, built up trust, and eventually gained co-maintainer status. Then, hidden in ordinary updates, they added, step by step, a mechanism allowing unauthorized external access under specific conditions.

What was targeted wasn't a flaw in the code, but the assumption that "a trusted person's legitimate update" is safe.

① Under-maintained, one overworked person carrying it
↓
② Another person contributes steadily and gains trust (over years)
↓
③ Gains co-maintainer privileges
↓
④ Stages a backdoor into ordinary updates, in steps
The attack advanced by slowly earning trust, not through a technical exploit. Each step looked like legitimate activity.

People and trust were the target

Firewalls and patches don't stop this. OSS maintainers run on goodwill and volunteer time, and attackers exploited that overload and isolation. It showed that the health of the people and projects behind OSS is itself a security matter.

How it was found: an engineer investigated a slow login

It was found when an engineer, during unrelated work, noticed a login path was "clearly slower than before" and the benchmark numbers looked off, and traced the cause instead of ignoring it. As a result, it was caught before it spread widely into stable releases, preventing widespread damage.

Not ignoring the feeling that "something is off" turned out to be the most effective detection method in this case.

Timeline

  1. years prior

    The attacker contributes steadily, building maintainer trust.
  2. early 2024

    A backdoor is staged into legitimate updates, in steps.
  3. 2024-03

    An engineer chases a "slow" anomaly; it's caught and disclosed just before stable.

Lessons that still apply

1

Minimize dependencies

Fewer libraries means fewer parties to trust. Don't add "because it's convenient."

2

Pin versions, watch changes

Lockfiles catch unexpected updates; look at the content of important dependency changes (who, what).

3

Improve build reproducibility

The more the same input yields the same artifact, the easier quiet tampering is to spot.

4

Never ignore an anomaly

"Feels slow / off" is an important clue; this discovery started there. Make a habit of following small anomalies to their cause.

5

Respect and support maintainers

The health of the OSS you depend on ultimately affects your own safety. Maintainer overload and isolation can be exploited by attackers.

Sources and scope

These primary references support the settings, scope or remediation discussed above; links were checked on October 23, 2026. Consult their version and configuration conditions. Checklist priorities and lessons are this site's guidance, not a full-article revalidation or a safety guarantee.

FAQ

QWhat made the XZ Utils case unusual?
A

It targeted people and trust, not a code bug. The attacker spent years becoming a trusted OSS maintainer and slipped a backdoor in as a legitimate update. This kind of attack is hard to stop with technical controls alone.

QHow was it discovered?
A

An engineer, mid-unrelated work, noticed a login path was 'clearly slower than before' and the benchmark numbers looked off, and traced the cause instead of ignoring it. As a result it was caught just before spreading widely into stable releases.

QWhat can an indie developer do?
A

Minimize dependencies, watch the provenance and content of updates, pin versions so unexpected changes are detectable, improve build reproducibility, and never ignore a 'something's off' feeling.