Onderzoekers hebben een opvallende bug gevonden in compressietool xz. Daarmee kon potentieel veel schade worden aangericht in veel Linux-distro's. Het nieuws kwam vlak voor het weekend naar buiten en veel is nog onbekend, maar er begint een beeld te ontstaan van een bewuste achterdeur. Wat weten we nu over de bug in xz?
Wat is xz?
Xz is een compressietool. De software maakt het mogelijk om lossless compressie te doen en komt voornamelijk voor op Linux. De tool is populair: xz, en specifiek het programma xz-utils, wordt standaard meegeleverd in onder andere Ubuntu, Debian, Fedora, Kali Linux en openSUSE, maar praktisch in de meeste Linux-distro's.
De broncode van xz was tot voor kort open source beschikbaar, maar op zondag haalde GitHub de repo offline. Daardoor is het nu lastiger om informatie over de tool online te vinden, al zijn er inmiddels genoeg forks te vinden. Ook hebben de ontwikkelaars zelf nog een mirror online staan.
Gebruikers op een Linux-systeem kunnen via het commando xz --version
kijken welke versie zij draaien.
Wat gebeurde er?
Op vrijdagmiddag ging het nieuws rond dat er een bug in xz leek te zitten. Tweakers schreef daar vrijdagavond dit artikel over. Het nieuws kwam naar buiten doordat Andres Freund een bericht stuurde naar de oss-security-mailinglijst. Freund is een PostgreSQL-ontwikkelaar bij Microsoft en was scherp genoeg de bug op te merken. Hij beschrijft hoe hij een opvallende latency van zo'n 500 milliseconden zag toen hij verbinding maakte via sshd. "Ik deed wat microbenchmarks om het systeem te optimaliseren en zag dat sshd-processen een verrassend hoog cpu-verbruik veroorzaakten", schrijft hij.
Kort daarna begonnen de makers van meerdere Linux-distro's met het versturen van waarschuwingen naar gebruikers. Onder andere Debian, openSUSE en Fedora-maker Red Hat waarschuwden voor de bug.
De kwetsbare versie van xz-utils bleek uiteindelijk in slechts een handvol distro's te zitten, omdat de meeste distro's nog geen update voor xz hadden doorgevoerd. De waarschuwingen bleken dus wat prematuur, maar desondanks hebben de distro's maatregelen genomen om xz-utils terug te draaien naar een eerdere versie.
Wie of wat is er allemaal kwetsbaar?
Doordat Freund de kwetsbaarheid al vroeg spotte, is de schade relatief beperkt gebleven. Versies 5.6.0 en 5.6.1 van xz-utils blijken kwetsbaar te zijn, maar die waren nog niet in de upstream van de package gekomen. Daarom waren er nog geen grote Linux-distro's waarbij de kwetsbare versies zijn doorgevoerd in een stabiele release.
Wel zijn enkele vroege releases, zoals publieke bèta's, kwetsbaar. Dat zijn met name Fedora Rawhide en Debian-testing. Ook packagemanager Homebrew voor macOS bevatte de kwetsbare versie 5.6.1 van xz-utils. Inmiddels hebben al die distro's, en Homebrew, xz-utils teruggerold naar versie 5.4.6.
De kwetsbaarheid zit hoe dan ook alleen in de installatiepackage van xz-utils. De Git-repo is niet getroffen.
Xz maakt ook de library liblzma
aan. Ook software waar die library in zit, kan dus kwetsbaar zijn.
Wat is de kwetsbaarheid precies en wat kon een eventuele aanvaller daarmee?
Om te beginnen: de volledige omvang van de bug is nog niet helemaal bekend. Onderzoekers zijn momenteel nog te druk om de tool te reverse engineeren, dus waarschijnlijk volgen daar de komende dagen of weken nog meer ontwikkelingen uit.
Wat in ieder geval al wel duidelijk is, is dat de update een installatiescript genaamd build-to-host.m4
draaide. Dat wist zichzelf te plaatsen in functies die door sshd
werden gebruikt, een bestand dat op Linux-systemen gebruikt wordt om SSH-verbindingen te leggen. Dat gebeurt via glibc - systemen zijn dus alleen kwetsbaar als ze die library geïnstalleerd hebben, maar dat is vrijwel altijd het geval. De malware gebruikt vervolgens glibc-mechanisme Ifunc om het authenticatieprotocol in OpenSSH te omzeilen.
Sommige onderzoekers zien de bug als een remote code execution-kwetsbaarheid
Er zijn verschillende technische write-ups van de malware die meer de diepte in gaan dan wij hier kunnen doen. Voor een uitgebreide beschrijving kun je de analyse van Filippo Valsorda lezen, die uitlegt waarom hij vindt dat de bug niet alleen een authenticatieomzeiling is maar een remote code execution. Verder heeft Sam James een goede uitleg geschreven waarin ook staat onder welke voorwaarden de malware werkt. Ook heeft securityonderzoeker Gynvael Coldwind een uitgebreide analyse geschreven over hoe een infectie met xz-utils werkt.
Wie zit er achter de malware? En is dit een achterdeur, of gewoon een fout?
In de afgelopen dagen zijn onderzoekers dieper gedoken in misschien niet de belangrijkste, maar wel interessantste vraag rondom de bug: hoe kon dit gebeuren? Inmiddels is duidelijk dat xz-utils dan wel door miljoenen computers mag worden gebruikt, maar slechts door twee personen wordt onderhouden. Het doet daarmee wat denken aan de kwetsbaarheid in Java-library log4j, dat in praktisch alle software zat, maar door slechts een persoon werd onderhouden.

Bij xz-utils lijkt ook weer het door XKCD omschreven probleem om de hoek te kijken, al lijkt de situatie ook wat anders te liggen. In deze uitgebreide analyse van Evan Boehs is de geschiedenis van xz-utils terug te lezen, en dan specifiek van een van de twee maintainers. Xz-utils werd onderhouden door Jia Tan, die zich JiaT75 noemt, en door Lasse Colin, die als Larhzu bekendstaat. Larhzu heeft beheer over de website van xz en schrijft daar kort over de situatie, waarin hij afstand lijkt te nemen van Jia Tan. "Xz-utils 5.6.0 en 5.6.1 bevatte een backdoor. Deze tarballs zijn gemaakt en ondertekend door Jia Tan", schrijft hij. Evan Boehs schrijft dat Jia Tan zijn GitHub-account in 2021 aanmaakte en als eerste commit al een push request deed naar de tool libarchive, wat terug te vinden is in zijn profiel.
Jia Tan werd in juni 2022 een maintainer van xz-utils, samen met Lasse Colin. Zij waren in de afgelopen twee jaar de enige personen die de tool bijhielden. Sindsdien heeft Jia Tan meerdere keren een aanpassing doorgevoerd aan xz-utils waarvan nu blijkt dat ze het systeem mogelijk onveilig hebben gemaakt. Op 23 februari en 9 maart voerde Jia Tan nog twee aanpassingen door die uiteindelijk zouden leiden tot de achterdeur.
Alhoewel, achterdeur? Kunnen we dat wel zo stellig zeggen? Een achterdeur impliceert namelijk een bewuste actie. Het zou in theorie mogelijk kunnen zijn dat iemand commits deed naar xz-utils onder Jia Tans naam. Maar recente acties van de ontwikkelaar maken dat onwaarschijnlijk. Zo zegt een ontwikkelaar van Fedora dat Jia Tan wekenlang in gesprek was met hem en andere Fedora-ontwikkelaars om de tool in het OS te krijgen 'vanwege de prachtige nieuwe features'. Bovendien lijkt het onwaarschijnlijk dat Jia Tan oprecht dacht dat de aanpassingen verbeteringen waren; daarvoor is de malware veel te gedetailleerd. Bovendien deed de malware aan stevige obfuscatie, waardoor iemand, waarschijnlijk Jia Tan, uiteindelijk probeerde de malware stil te houden.
Met welk doel dat gebeurde en of Jia Tan bijvoorbeeld als staatshacker werkte, is nog verre van bekend. Daar wordt veel over gespeculeerd, maar het is nu nog te vroeg er iets over te zeggen. Onderzoekers bestuderen de malware nog; verwacht daar in de komende weken meer informatie over.