Published 2026-05-01 · 13 min read

CVE-2024-3094 (xz/liblzma backdoor) — what homelabs had to fear and how to check

In March 2024 a Microsoft engineer noticed sshd on his Debian testing box was unusually slow during login. Two days later he had unwound a multi-stage backdoor planted across two years of patient social engineering by a contributor to xz-utils. The affected versions (xz 5.6.0 and 5.6.1) had landed in bleeding-edge distros — Fedora Rawhide, Debian sid, openSUSE Tumbleweed, Kali rolling. Stable LTS releases dodged the bullet by hours. This post explains what CVE-2024-3094 actually did, who was exposed, the single command you can still run today to check, and what supply-chain hygiene a homelab can realistically practice.

The TL;DR

The one-line check

Run this on every Linux box in your homelab:

strings $(ldconfig -p | grep -m1 liblzma.so.5 | awk '{print $NF}') 2>/dev/null \
  | grep -E "^5\\.(6\\.0|6\\.1)$" || echo "clean (not 5.6.0/5.6.1)"

The check works like this: ldconfig -p finds the installed liblzma.so.5, strings dumps its embedded version banner, and grep matches only the affected versions. Most boxes will print clean (not 5.6.0/5.6.1) and you can move on. If you see 5.6.0 or 5.6.1, your distro shipped the backdoored version and you need to upgrade xz-utils immediately and rotate any SSH keys that authenticated to that box during the affected window.

How the backdoor actually worked

The technical mechanism is worth understanding because it reframes "supply-chain attack" from an abstract risk into something concrete. The backdoor was a multi-stage payload hidden in test fixture files (tests/files/bad-3-corrupt_lzma2.xz and tests/files/good-large_compressed.lzma) that looked like deliberately-malformed compression test cases. The build script's m4/build-to-host.m4 macro extracted payload bytes from these files only when:

Once linked into liblzma.so, the backdoor used glibc's IFUNC resolver mechanism to hook RSA_public_decrypt at first call. Because sshd on systemd-using distros transitively loads libsystemdliblzma, every sshd child process inherited the hook. When an attacker presented a pubkey signed with their specific Ed448 key as part of the SSH handshake, the hook decoded a command from the certificate and executed it via system(3) — pre-auth, as root.

Three things made this dangerous beyond the obvious:

Why your stable LTS box is almost certainly clean

Distros split into two release models, and one of them effectively immunised against this attack:

Stable / LTS distros (Ubuntu 22.04, Debian stable, RHEL, Rocky, AlmaLinux) lock to a frozen package set at release time. Updates within the LTS lifetime are limited to security patches and explicit point-release backports. xz 5.6.0 simply never entered Ubuntu 22.04's archive — Ubuntu was on 5.2.5 at the time and stayed there. Same story across Debian-stable and the RHEL family.

Rolling-release distros (Arch, Tumbleweed, Gentoo, Kali, Debian sid) ship upstream updates within days. xz 5.6.0 and 5.6.1 landed in those archives and remained there until the disclosure, giving an exposure window of roughly three weeks. Whether your specific box was actually backdoored depends on when in that window you ran pacman -Syu / zypper dup / apt update && apt upgrade.

Container base images are the trickier case. If you pulled fedora:rawhide, debian:sid, or archlinux:latest in March 2024 and froze a derived image, that image still contains the backdoor today — even though the upstream archives have long since rolled forward. Audit container base-image dates before assuming clean.

What this means for homelab supply-chain hygiene

Three lessons that generalise beyond this specific incident:

1. Stable LTS is a security feature, not just a stability feature. The "boring" choice of running Ubuntu 22.04 instead of Arch on your homelab boxes is also the choice that adds a multi-week buffer between an upstream compromise and your machine. Reflexively chasing the latest kernel and library versions has costs that aren't visible until events like this make them visible.

2. SBOMs without scanning are theatre. Every Linux box "has an SBOM" — dpkg -l or rpm -qa enumerate every installed package and version. The gap is between having that list and continuously matching it against published CVE data. A homelab with five boxes has roughly 1,000 packages installed across them; manually checking each against NVD weekly is not realistic. This is exactly the gap Noxen is built to close — agentless SSH inventory plus automatic CVE matching against a daily-refreshed feed, with distro-aware version comparison so backports get credited correctly. See how the agentless inventory works for the mechanism.

3. Build provenance is the next horizon. CVE- 2024-3094 wouldn't have been caught by reproducible builds (the malicious payload was in the source, just obfuscated as test fixtures), but it would have been caught by stricter review practices for downstream packagers. Distros are tightening their provenance pipelines as a result — Debian's reproducible builds project has gained urgency. Homelabbers can contribute by running on reproducibly-built distros where possible and being suspicious of "convenience" repositories that haven't earned trust.

How Noxen would have flagged it

Once xz 5.6.0 and 5.6.1 had a CVE assigned (initially only "CVE-2024-3094") with affected-version metadata in NVD and OSV, Noxen's matcher would have surfaced any box running an affected version on the next scan. The flow:

  1. Agentless SSH probe runs dpkg -l xz-utils (or rpm -q xz on RPM distros), captures version.
  2. Matcher consults the daily-refreshed CVE feed, finds CVE-2024-3094 with affected: xz-utils < 5.6.2.
  3. Distro-aware version comparison (Debian dpkg ordering for Ubuntu/Debian, RPM ordering for Fedora/Rocky) confirms the installed version satisfies the vulnerable range.
  4. Finding lands in the report with severity Critical, with the recommended fix being "upgrade xz-utils to ≥ 5.6.2 and rotate SSH keys that authenticated to this host during the affected window."

The "rotate keys" recommendation isn't from CVE metadata — that's the kind of operational context Noxen layers on top of the raw NVD/OSV data via remediation guidance. CVE feeds tell you what's broken; remediation tells you what to do about it.

The homelab playbook for the next CVE-2024-3094

A general pattern, condensed from the xz incident and similar supply-chain events:

Further reading

Want this kind of monitoring across your fleet? Noxen scans every Linux/BSD/macOS host you own over SSH (no agents) and matches installed package versions against a daily-refreshed CVE feed. Pricing & download.

Scan your Linux fleet from your Mac

Noxen runs nightly agentless audits over SSH and shows only what changed since the last scan — new CVEs, config drift, newly exposed admin services. Mac-native control plane, no SaaS round-trip.

Buy Noxen — $79 one-time Download free trial