Rust Supply Chain Attack plaatst build-time malware in kratten met 245 miljoen downloads

Het Rust Project heeft kwaadaardige versies van drie veelgebruikte Rust-kratten van kratten.io verwijderd nadat een gecompromitteerd onderhoudsaccount releases had gepubliceerd die een typosquatted-afhankelijkheid hadden toegevoegd waarvan het build-script tijdens de compilatie een externe payload had gedownload en uitgevoerd.

De betrokken releases zijn arrayref 0.3.10, internering 0.8.7 en append-only-vec 0.1.9, allemaal gepubliceerd vanuit hetzelfde eigenaarsaccount op 20 augustus 2026, en allemaal binnen 86 tot 107 minuten verwijderd.

Omdat de kwaadaardige code in het buildscript van de geïnjecteerde afhankelijkheid zat, was het bouwen van een project dat de code oploste voldoende om de payload uit te voeren, en hoefde er niets uit de kratten zelf te worden aangeroepen.

Ontwikkelaars wordt geadviseerd om te zoeken ~/.cargo/registry/cache voor de verwijderde kratbestanden en om arrayref vast te zetten op 0.3.9 of eerder, nadat het Rust Security Response Team de kwaadwillig verwijderde versies tijdens de reactie had verwijderd.

Er is geen gepatchte versie, er is geen CVE-identificatie toegewezen en de RustSec-adviezen voor alle drie de kratten bevatten geen bewijs dat er een kwaadaardige versie is gebruikt.

“Een nieuwe versie van de arrayref krat werd gepubliceerd met een directe afhankelijkheid van proc-macro1dat een kwaadaardig build-script zou uitvoeren. Deze gecompromitteerde versie werd gepubliceerd op 20-08-2026 en ongeveer 86 minuten later verwijderd, zonder bewijs van daadwerkelijk gebruik”, aldus RUSTSEC-2026-0260.

The Hacker News heeft contact opgenomen met het Rust Security Response Team voor de basis van die bevinding en voor het aantal downloads van de verwijderde versies, maar had op het moment van schrijven nog geen reactie ontvangen.

Het Rust Security Response Team zei dat het het rapport had ontvangen dat de proc-macro1 krat was kwaadaardig om 07:15 UTC op 20 augustus en verifieerde dat de krat een build-script bevatte dat een kwaadaardige lading downloadde, in een adviespost waarin het onderzoeksteam van Nextron Systems GmbH werd gecrediteerd voor het in eerste instantie ontdekken en rapporteren ervan.

“Wij geloven de auteur van niet arrayref om kwaadwillig te handelen, maar hun computer of inloggegevens zijn waarschijnlijk gecompromitteerd en we proberen contact met hen op te nemen”, aldus het Rust Security Response Team.

The Hacker News bevestigde op 21 augustus via de krates.io API dat de enige vermelde eigenaar van arrayref gebruiker 2402 is, David Roundy, geregistreerd in oktober 2009.

Hoe het account is gehackt, is niet bekendgemaakt.

Het Rust Security Response Team heeft de kwaadaardige versies vermeld die het heeft verwijderd, met de tijd waarop ze online waren:

  • [email protected]: gepubliceerd op 2026-08-20T07:15:00Z, verwijderd om 08:41:40Z. 86 minuten online.
  • [email protected]: gepubliceerd om 07:34:07Z, verwijderd om 09:04:11Z. 90 minuten online.
  • [email protected]: gepubliceerd om 07:37:49Z, verwijderd om 09:25:24Z. Online gedurende 107 minuten.
  • proc-macro1, proc-macro-en, aovine, arone, aronenaoEn tinymemberalle versies.

Elke gecompromitteerde release bevatte een enkele toegevoegde regel in het manifest, een afhankelijkheid van proc-macro1een typosquat van het alomtegenwoordige proc-macro2 krat. De bibliotheekbron van proc-macro1 is een origineel exemplaar van proc-macro2dus builds worden normaal voltooid.

Het buildscript stelt de payloadhost en het command-and-control (C2)-adres opnieuw samen uit base64-fragmenten tijdens het bouwen. Vervolgens wordt een aangepaste certificaatverificateur geïnstalleerd waarvan de drie verificatiemethoden onvoorwaardelijk succes opleveren, waardoor TLS-validatie wordt uitgeschakeld. Het selecteert een van de vier payloads per besturingssysteem en CPU-architectuur.

Op Unix en macOS schrijft het de bytes naar /tmp/rust-setupmarkeert het bestand als uitvoerbaar bestand en geeft het los met het C2-adres als eerste argument. Op Windows schrijft het een PowerShell-script naar %TEMP% en lanceert het verborgen via een VBScript-opstartprogramma onder wscript.exeverlaat vervolgens het onderliggende proces, een stap die in de bron wordt opgemerkt als ontsnappen aan het taakobject van Cargo, zodat de build er niet op wacht.

De levering was afhankelijk van het feit dat het eigenaarsaccount arrayref 0.3.5 tot en met 0.3.9 binnen dezelfde minuut als de kwaadwillige publicatie rukte, waardoor de gecompromitteerde release de enige versie was waar Cargo niet voor zou waarschuwen, volgens het rapport dat door de onderzoeker die erop had gedrukt bij de RustSec-adviesdatabase was ingediend.

“Levering: 0.3.5–0.3.9 worden allemaal onder het eigenaarsaccount gerukt, dus de vracht consider updating to a version that is not yanked waarschuwing is de lokroep. Dat is hoe ik erop kwam”, zei de verslaggever, GitHub-gebruiker Jhobern.

The Hacker News ontdekte op 21 augustus via de krates.io API dat arrayref 245.385.500 downloads aller tijden heeft en 53.905.601 in de 90 dagen eindigend op 20 augustus, en dat 403 verschillende kratten op kratten.io ervan afhankelijk zijn. We hebben ook elke hop van de afhankelijkheidsketen die in het rapport wordt genoemd, vergeleken met de krates.io-index op 21 augustus: winit vereist sctk-adwaita ^0.10.1waarvoor een kleine skia nodig is ^0.11waarvoor arrayref vereist is ^0.3.6.

Elke vereiste in die keten is een dakje-bereik op 0.3.x, en een dakje-bereik op 0.3.x accepteert 0.3.10. Uit dezelfde controle bleek dat blake3 arrayref als afhankelijkheid verklaarde via versie 1.8.6 en niet in 1.8.7, gepubliceerd om 09:09 UTC op 20 augustus, en dat blake2b_simd en blake2s_simd dezelfde afhankelijkheid lieten vallen in releases die die ochtend om 09:25 en 09:26 UTC werden gepubliceerd.

Het fase 2-implantaat bakens via HTTPS POST naar het pad /49890878blijft bestaan ​​via een Registry Run-sleutel op Windows, een LaunchAgent op macOS en een systemd-gebruikersservice op Linux, en ondersteunt vier opdrachten voor beëindiging, C2-herconfiguratie, persistentie-installatie en het downloaden en uitvoeren van verdere scripts, volgens Wiz, die zei dat het browsergegevens van Chrome, Brave en Edge steelt door SQLite-inlogdatabases te bevragen.

De analyse van de Nextron-onderzoeker zegt dat de geanalyseerde Windows-fase alleen vragen stelt over de origin_url En username_value kolommen en extraheert niet rechtstreeks password_valuemaar die analyse had alleen betrekking op de Windows-payload, waarbij de Linux- en macOS-payloads werden gehasht en niet werden geanalyseerd. Uit dezelfde analyse blijkt dat de krat mogelijk wordt geactiveerd door cargo build, cargo checkEn cargo test.

StepSecurity deelde de volgende indicatoren van compromissen (IoC’s) –

  • Netwerk: 23.254.165.112:9089 (payload-host), 23.254.165.112:443 (C2), hwsrv-798836.hostwindsdns.com
  • Bestanden: /tmp/rust-setup, %TEMP%rust-setup.ps1, %TEMP%rust-setup-launch.vbs
  • Binaire bestanden: rust-crate_0.1.0, _0.2.0, _0.3.0, _0.4.0
  • Rekeningen: dtolney (crates.io id 438608), imitator; droundylegitieme eigenaar, vermoedelijk gecompromitteerd
  • E-mail: [email protected]vervalste metadata van de auteur

Wiz zei dat de infrastructuur substantieel overlapt met recente Noord-Koreaanse aanvallen op de toeleveringsketen, waarbij hij het Mastra npm-compromis en het axios-compromis noemt.

Microsoft beoordeelt met groot vertrouwen dat de Mastra-activiteit te wijten is aan Sapphire Sleet, en Google Threat Intelligence Group (GTIG) schreef het axios-compromis toe aan een acteur die het nu volgt als MIDNIGHT NEPTUNE, voorheen bekend als UNC1069. Geen enkele leverancier heeft het krates.io-incident toegeschreven aan een genoemde acteur.

“Hoewel de kwaadaardige versies van axios binnen drie uur na hun release uit het npm-register werden verwijderd, wordt de reikwijdte van het compromis breed geschat, aangezien het pakket wekelijks meer dan 100 miljoen downloads heeft”, zeiden GTIG en Mandiant in een rapport van 30 juli waarin ze koelvensters aanbevelen voor nieuw gepubliceerde activa van derden.

Vracht heeft geen verzonden equivalent. Een pull-verzoek dat een stabiliseert global-min-publish-age instelling, die afhankelijkheden jonger dan een geconfigureerde leeftijd zou tegenhouden, ging de laatste commentaarperiode in op 18 augustus, twee dagen voor de aanval, en bleef open en niet-samengevoegd vanaf 21 augustus. GitHub heeft in juli een soortgelijke cooldown-standaard voor Dependabot verzonden.

In een geval uit september 2025 werden twee kwaadaardige kratten die een logbibliotheek nabootsen alleen tijdens runtime uitgevoerd, een onderscheid dat krats.io destijds maakte.

Thijs Van der Does