Den første nye afhængighed i ti år

Den 20. august 2026 brugte en angriber, der havde kompromitteret en vedligeholderkonto på crates.io, det officielle register for Rust-pakker, denne adgang til at udgive forgiftede versioner af tre udbredte crates: arrayref, internment og append-only-vec. Arrayref alene findes i mere end 35 procent af alle Rust-miljøer og i omkring tre ud af fire miljøer, hvor Rust overhovedet forekommer, hvilket gør det til et af de mest udbredte små biblioteker i hele økosystemet, selvom det næsten ikke lægges mærke til.

Den ondsindede version arrayref 0.3.10 havde en detalje, der alene burde have været et advarselstegn: det var den første nye afhængighed, arrayref nogensinde havde tilføjet i hele sin titiårige historie. At et crate, der har udsendt opdateringer uden afhængigheder i et helt årti, pludselig får en, er præcis den slags ændring, en grundig gennemgang af afhængigheder burde flage, hvis nogen overhovedet gennemgik den.

Et build-script kørte, før nogen kode overhovedet gjorde

Hver forgiftet version tilføjede en afhængighed til et nyt crate ved navn proc-macro1, som også var ondsindet. Proc-macro1 indeholdt et build-script, et lille program, som Cargo, Rusts build-værktøj, kører automatisk som en del af at kompilere et projekt, før projektets egen kode overhovedet er færdigbygget eller kørt.

Netop den automatiske kørsel gjorde angrebet så lydløst: en udvikler eller en CI-pipeline behøvede ikke at køre den færdige binær, klikke på noget som helst eller importere en mistænkelig funktion for at blive kompromitteret. Det var nok blot at køre cargo build på et projekt, der afhang af det forgiftede crate, for at udløse build-scriptet og downloade angriberens payload.

Træk og skub: et trick lånt fra npm

Angriberen trak også de ældre, rene versioner af arrayref, version 0.3.5 til 0.3.9, tilbage fra registret. At trække en version tilbage sletter den ikke helt, men det får Cargo til at vise sin sædvanlige advarsel om, at et projekt bør overveje at opdatere til en version, der ikke er trukket tilbage.

Med hver ren version markeret som trukket tilbage, var den eneste tilbageblevne, ikke-tilbagetrukne udgivelse, som Cargo kunne anbefale, den ondsindede 0.3.10, hvilket skubbede udviklere mod den forgiftede version gennem registrets eget værktøj. Sikkerhedsforskere havde allerede set nøjagtigt dette mønster af træk og skub i tidligere npm-forsyningskædeangreb, så det, at det dukker op på crates.io, tyder på det samme social engineering-via-værktøj-spil, ikke en ny opfindelse.

Tre crates, tre korte tidsvinduer

Alle tre ondsindede versioner blev udgivet inden for et vindue på 22 minutter om morgenen den 20. august 2026, og alle tre blev fjernet inden for cirka 90 til 107 minutter efter, de gik live, så snart Rust Security Response Team havde låst kontoen og trukket pakkerne tilbage.

CrateOndsindet versionUdgivet (UTC)Fjernet (UTC)Minutter live
arrayref0.3.1007:1508:4186
internment0.8.707:3409:0490
append-only-vec0.1.907:3709:25107

Et vindue på under to timer lyder kort, men crates.io har ingen indbygget forsinkelse mellem udgivelsen af en ny version og det tidspunkt, hvor ethvert afhængigt projekt automatisk kan hente den ved næste build, så selv et kort vindue er nok til, at et build-script kan nå ethvert projekt, der tilfældigvis genopbygges i den periode.

Tyveri af loginoplysninger, en kill switch og et spor til Nordkorea

Wiz Research analyserede payloaden og fandt en bagdør, der sender signaler til en ekstern server via HTTPS, opremser gemte loginoplysninger fra Chrome, Brave og Edge, installerer platformsuafhængig persistens og kan udføre fire forskellige fjernkommandoer, herunder en kill switch og en kommando til at køre vilkårlige scripts.

Wiz fandt også, at bagdørens beacon-endpoint deler infrastruktur med Mastra-kampagnen, som Microsoft tilskrev Sapphire Sleet, en gruppe med forbindelse til Nordkorea, og med et tidligere angreb på npm-pakken axios, som Google Cloud Threat Intelligence og Mandiant hver for sig også knyttede til Nordkorea, hvilket antyder, at samme type aktør, der allerede havde kompromitteret npm, nu har vist samme evne mod crates.io. Opdagelsen tilskrives Nextron Systems GmbH, en tysk sikkerhedsvirksomhed; Rust Security Response Team låste kontoen og trak alle tre versioner tilbage, og der er indtil videre ikke dukket bekræftet bevis for reel udnyttelse op.

Rust løser hukommelsesfejl, ikke spørgsmålet om, hvem der styrer kontoen

EU's Cyber Resilience Act og NIS2 har længe skubbet producenter af sikkerhedskritiske og forbundne produkter mod hukommelsessikre sprog, og Rust har været en af de primære modtagere af den skubben. Denne hændelse er en påmindelse om, at en overgang til Rust af compliance-årsager løser et problem, hukommelsessikkerhedsfejl som buffer-overflows, uden at røre ved et helt andet: hvem der styrer den konto, der udgiver et projekts afhængigheder, og hvad et build-script må udføre, før projektets egen kode overhovedet er færdigkompileret.

Ejere, der har beordret en Rust-migrering af compliance-årsager, bør spørge deres udviklingsteams tre konkrete spørgsmål: bliver afhængighedsopdateringer gennemgået, før de merges, kan CI-pipelinen begrænse, hvad et build-script må gøre, og ville nogen overhovedet lægge mærke til, at en pakke, teamet har stolet på i årevis, blev trukket tilbage og genudgivet samme dag. Det er værd at bemærke, at selve opdagelsen kom fra Nextron Systems GmbH, en tysk virksomhed, hvilket modsiger enhver antagelse om, at denne form for forsyningskæderisiko kun rammer andre.