Ga naar hoofdinhoud
AXTONITNOW
Alle inzichten

InzichtenCybersecurity

XZ supply-chain-compromis: hoe de liblzma-backdoor werd geplant en verborgen bleef

Een chronologische blik op CVE-2024-3094: jarenlang vertrouwen opbouwen, stealth in release-tarballs en vijf obfuscatielagen die een compressiebibliotheek omtoverden tot een supply-chain-waarschuwing.

Begin 2024 kreeg de open-sourcewereld een herinnering dat supply-chain-aanvallen niet altijd binnenkomen als een spectaculaire hack. Soms komen ze als een beleefde contributor, een behulpzame patch en twee jaar geduld.

Het compromis in XZ Utils, bijgehouden als CVE-2024-3094, was een backdoor in een veelgebruikte compressiebibliotheek. Niet in een opvallende applicatie. Niet in een trendy npm-pakket. In infrastructuur die zo saai is dat de meeste Linux-systemen erop leunen zonder erbij stil te staan.

Daarom was het gevaarlijk. xz/liblzma zit onder veel andere software. Als de kwaadaardige releases verder waren verspreid, hadden aanvallers SSH-authenticatie op getroffen systemen kunnen beïnvloeden. Een heel on-saai resultaat voor een heel saaie dependency.

Een compromis opgebouwd over jaren, niet minuten

Anders dan veel supply-chain-incidenten die een verkeerd geconfigureerde pipeline of een gestolen token misbruiken, was de XZ-backdoor een langetermijnspel. De aanvaller hoefde het buildsystem niet van buitenaf te breken. Eerst werkte hij zich in de sociale structuur van het project, en gebruikte hij dat vertrouwen om code, tests en uiteindelijk het releaseproces zelf vorm te geven.

De tijdlijn hieronder laat zien hoe dat zich ontvouwde, van een nieuwe GitHub-identiteit in 2021 tot openbare disclosure in maart 2024.

  1. Een nieuwe contributor-identiteit verschijnt

    Het GitHub-account JiaT75 verschijnt en bouwt geloofwaardigheid op via bijdragen aan open source.

  2. Druk op de maintainer

    xz-maintainer Lasse Collin kampt met burnout en minder projectactiviteit, terwijl meerdere nieuwe accounts aandringen op meer updates en een extra maintainer.

  3. Vertrouwen wordt opgebouwd

    Jia Tan levert patches en features, raakt steeds meer betrokken bij xz en verdient geleidelijk vertrouwen binnen het project.

  4. Toegang op maintainer-niveau

    Jia Tan begint wijzigingen te mergen en wordt een belangrijk vertrouwd aanspreekpunt rond het project en het testecosysteem.

  5. Testinfrastructuur die exploit mogelijk maakt

    Testgerelateerde code die later door de exploit wordt gebruikt, wordt in het project geïntroduceerd.

  6. Detectieoppervlak wordt verkleind

    Een pull request schakelt IFUNC-fuzzing in OSS-Fuzz uit, waardoor het uiteindelijke kwaadaardige gedrag moeilijker automatisch te vangen is.

  7. Kwaadaardige releases 5.6.0 en 5.6.1

    Gewijzigde release-tarballs wijken af van de publieke Git-geschiedenis en brengen de verborgen backdoor mee naar downstream-pakketten.

  8. Ontdekking en disclosure

    Andrés Freund merkt trage SSH-logins, hoog CPU-gebruik en valgrind-fouten op Debian sid op. De backdoor wordt openbaar gemaakt en bijgehouden als CVE-2024-3094.

Wat opvalt is het tempo. Dit was geen smash-and-grab. Het was maintainer-burnout, druk vanuit de community, stapsgewijze toegang en technische voorbereiding verspreid over meerdere jaren. Tegen de tijd dat kwaadaardige tarballs verschenen, had de aanvaller al delen van de omgeving gevormd die de backdoor zouden helpen onder de radar te blijven.

Hoe de backdoor werd versluierd

De xz-backdoor werd niet neergezet als een overduidelijk kwaadaardig bestand in de repository voor iedereen om te reviewen. Hij was ontworpen om alleen op het juiste moment, in de juiste build, op het juiste type systeem te verschijnen. Daarom bleef hij zo lang verborgen.

De versluiering verliep in vijf samenhangende stappen:

  1. Verborgen in release-tarballs

    De kwaadaardige logica werd toegevoegd aan release-tarballs, niet duidelijk zichtbaar in de normale Git-bronboom.

  2. Geactiveerd tijdens de build

    Een aangepast build-to-host.m4-script riep tijdens compilatie een verborgen script aan.

  3. Payload verborgen in testbestanden

    Versluierde en versleutelde stappen werden uitgepakt uit twee testbestanden:

    tests/files/bad-3-corrupt_lzma2.xz en tests/files/good-large_compressed.lzma
  4. Alleen actief onder smalle voorwaarden

    De code controleerde op amd64, glibc en Debian- of Red Hat-achtige omgevingen voordat hij verder ging.

  5. Runtime-hooking van sshd

    IFUNC-gebaseerde hooking leidde OpenSSH-authenticatiegedrag om en richtte zich op /usr/sbin/sshd, waardoor de backdoor stil bleef tot aan de juiste voorwaarden waren bereikt.

Samen vormden deze stappen een backdoor die moeilijk te spotten was in normale source review, moeilijk per ongeluk te triggeren, en moeilijk te detecteren met standaard tooling, tenzij u al precies op de juiste plek keek.

De kwaadaardige code stond niet in de Git-boom die iedereen reviewde. Hij zat in het release-artefact waar iedereen op vertrouwde.

Waarom dit incident nog steeds telt

Het XZ-compromis wordt vaak herinnerd als een near miss, en dat was het ook. De backdoor werd ontdekt voordat hij de meeste stabiele productieomgevingen bereikte. Maar “near miss” is niet hetzelfde als “geen les.”

Het incident liet zien hoe een geduldige aanvaller social engineering van maintainers, vertrouwde releaseprocessen en stealth tijdens de build kan combineren om de software supply chain te raken. Het liet ook zien dat open-source trustmodellen, met kleine maintainer-teams, vrijwilligersburnout en druk vanuit de community, deel van het aanvalsoppervlak kunnen worden als niemand oplet.

Wat XZ ongewoon maakteWaarom het ertoe doet voor het bedrijf
Jarenlang vertrouwen opbouwen
Toegang werd sociaal verdiend, niet technisch gestolen.
Supply-chainrisico omvat mensen, rollen en druk op maintainers, niet alleen pakketten en pipelines.
Malware in release-tarballs
Alleen source review was niet genoeg.
Release-integriteit en reproduceerbare builds verdienen dezelfde aandacht als code review.
Omgevingsspecifieke activatie
De backdoor wachtte op het juiste doelwit.
Testen in één omgeving bewijst niet dat alles downstream veilig is.
Ontdekking door anomalie, niet door scanner
Een performanceprobleem legde de backdoor bloot.
Operationele monitoring en ervaren engineers blijven belangrijk wanneer geautomatiseerde checks de dreiging missen.

Wat teams hieruit moeten halen

De meeste organisaties zullen nooit een compressiebibliotheek onderhouden. Dat is prima. De les is breder: kritieke open-sourcecomponenten verdienen meer dan passief vertrouwen, en het pad van contributor naar maintainer verdient meer aandacht dan we gewoonlijk geven.

Praktische reacties zijn onder meer release-tarballs verifiëren tegen de bron, wijzigingen in maintainers van kritieke dependencies monitoren, maintainer-duurzaamheid ondersteunen voordat burnout gaten creëert, en ongebruikelijk runtime-gedrag in kerninfrastructuur zien als een security-signaal in plaats van een performance-overlast.

XZ werd ontdekt omdat iemand merkte dat SSH zich vreemd gedroeg. Dat is zowel geruststellend als ongemakkelijk. Geruststellend omdat het systeem eenmaal werkte. Ongemakkelijk omdat de volgende poging stiller, beter gefinancierd en beter verborgen kan zijn.

Slotgedachte

Het XZ-incident was niet alleen een verhaal over één backdoor in één bibliotheek. Het was een herinnering dat supply-chain-aanvallen geduldig, technisch en sociaal tegelijk kunnen zijn.

Aanvallers hoeven uw CI/CD niet te breken of uw registry te vergiftigen. Soms hebben ze alleen tijd, een vertrouwde identiteit en een releaseproces nodig dat iedereen veilig acht omdat het dat altijd al was.

Uw software supply chain rust op meer dan code. Ze rust op mensen, releases, vertrouwen en de saaie infrastructuur die alles bij elkaar houdt. Dat verdient dezelfde ernst als productie zelf.