Ellátási lánc-támadás a Rustnál: build idejű malware 245 millió letöltésű crate-ekben

enlightened Ez az oldal a közösségért készül. heart Kövess minket máshol is:  Linux Mint Magyar Közösség a Mastodon-on  Telegram csatorna – csak hírek  Beszélgessünk a Telegram – Linux csevegő csoport  Hírek olvasása RSS segítségével  Linux Mint Hivatalos Magyar Közösség a Facebook-on      Linux Mint Baráti Kör a Facebook-on
wink Ha hasznosnak találod, és szeretnéd, hogy folytatódjon, támogasd a munkát Ko-fi vagy Paypal segítségével. laugh

kami911 képe

A Rust projekt törölte három, széles körben használt Rust crate rosszindulatú verzióit a crates.io-ról, miután egy feltört karbantartói fiókból olyan kiadásokat publikáltak, amelyek egy elgépelésre építő, új függőséget adtak hozzá. Ennek a build scriptje fordítás közben egy távoli payloadot töltött le és futtatott.

Az érintett kiadások az arrayref 0.3.10, az internment 0.8.7 és az append-only-vec 0.1.9. Mindet ugyanarról a tulajdonosi fiókról adták ki 2026. augusztus 20-án, és 86–107 percen belül eltávolították őket.

Mivel a rosszindulatú kód a beinjektált függőség build scriptjében volt, már az is elég volt a payload futtatásához, ha valaki lefordított egy olyan projektet, amely ezt a függőséget feloldotta. A crate-ek saját kódjából semmit sem kellett meghívni.

A fejlesztőknek azt javasolják, hogy keressenek rá a törölt crate fájlokra a ~/.cargo/registry/cache könyvtárban, és rögzítsék az arrayref verzióját 0.3.9-re vagy korábbira, miután a Rust Security Response Team a válaszlépések során visszavonta a rosszindulatúan „unyankelt” verziók visszavonását.

Nincs javított verzió, nem adtak ki CVE azonosítót, és a RustSec figyelmeztetések mindhárom crate esetében úgy rögzítik, hogy nincs bizonyíték a rosszindulatú verziók tényleges használatára.

„Az arrayref crate egy új verziója jelent meg, amely közvetlen függőségként vette fel a proc-macro1-et, ami egy rosszindulatú build scriptet futtatott. Ezt a kompromittált verziót 2026-08-20-án publikálták, majd körülbelül 86 perccel később eltávolították, és nincs bizonyíték tényleges használatra” – áll a RUSTSEC-2026-0260 leírásában.

A Hacker News megkereste a Rust Security Response Teamet, hogy megtudja, mire alapozzák ezt a megállapítást, illetve hogy mennyi volt a törölt verziók letöltésszáma, de a cikk írásakor még nem kaptak választ.

A Rust Security Response Team közölte, hogy 2026. augusztus 20-án 07:15 UTC-kor kapta meg a jelentést arról, hogy a proc-macro1 crate rosszindulatú. Ekkor ellenőrizték, hogy a crate valóban egy olyan build scriptet tartalmaz, amely rosszindulatú payloadot tölt le, és egy figyelmeztető bejegyzésben elismerték a Nextron Systems GmbH kutatócsapatának, hogy ők fedezték fel és jelentették az esetet.

„Nem gondoljuk, hogy az arrayref szerzője szándékosan járt volna el rosszindulatúan, de valószínű, hogy a gépét vagy a hitelesítő adatait feltörték, és próbáljuk felvenni vele a kapcsolatot” – írta a Rust Security Response Team.

A Hacker News a crates.io API-n keresztül 2026. augusztus 21-én megerősítette, hogy az arrayref egyetlen bejegyzett tulajdonosa a 2402-es felhasználó, David Roundy, aki 2009 októberében regisztrált.

Nem hozták nyilvánosságra, hogyan törték fel a fiókot.

A Rust Security Response Team felsorolta a törölt rosszindulatú verziókat, azzal együtt, mennyi ideig voltak elérhetők:

  • arrayref@0.3.10: publikálva 2026-08-20T07:15:00Z, törölve 08:41:40Z. 86 percig volt online.
  • internment@0.8.7: publikálva 07:34:07Z, törölve 09:04:11Z. 90 percig volt online.
  • append-only-vec@0.1.9: publikálva 07:37:49Z, törölve 09:25:24Z. 107 percig volt online.
  • proc-macro1, proc-macro-en, aovine, arone, aronenao és tinymember, bármelyik verzió.

Minden érintett kiadás manifestjébe egyetlen plusz sort tettek: egy függőséget a proc-macro1 crate-re, ami a széles körben használt proc-macro2 elgépelésére épít. A proc-macro1 library forrása ténylegesen a proc-macro2 másolata, ezért a buildek gond nélkül lefutottak.

A build script build időben base64 darabokból rakja össze a payload hostot és a command-and-control (C2) címet. Ezután egy egyedi tanúsítvány-ellenőrzőt telepít, amelynek mindhárom ellenőrző metódusa feltétel nélkül sikerrel tér vissza, vagyis kikapcsolja a TLS ellenőrzést. Négy payload közül választ az operációs rendszer és a CPU architektúra alapján.

Unixon és macOS-en a bájtokat a /tmp/Rust-setup fájlba írja, végrehajthatóvá teszi, majd leválasztva elindítja, a C2 címet adva első argumentumként. Windowson egy PowerShell scriptet ír a %TEMP% könyvtárba, amit egy VBScript indítóval, rejtve futtat a wscript.exe alatt, majd elengedi a gyerekfolyamatot; a forráskódban ezt úgy kommentálták, hogy így lép ki a Cargo job objektumából, ezért a build nem vár rá.

A terjesztés azon alapult, hogy a tulajdonosi fiók ugyanabban a percben visszavonta az arrayref 0.3.5–0.3.9 verzióit, amikor a rosszindulatú kiadást publikálta. Így a fertőzött verzió maradt az egyetlen, amelyre a Cargo nem figyelmeztetett volna, ahogy arra a RustSec advisory adatbázisba beküldött jelentés is rámutatott.

„Terjesztés: a 0.3.5–0.3.9 verziókat mind visszavonták a tulajdonosi fiókkal, így a cargo consider updating to a version that is not yanked figyelmeztetése a csali. Így futottam bele” – írta a jelentést beküldő, GitHub felhasználó jhobern.

A The Hacker News augusztus 21-én a crates.io API-n keresztül megállapította, hogy az arrayrefet összesen 245 385 500 alkalommal töltötték le, ebből 53 905 601 letöltés az augusztus 20-ig tartó utolsó 90 napra esik, és hogy 403 különböző crate függ tőle a crates.io-n. Ugyanezen a napon a jelentésben szereplő teljes függőségi láncot is ellenőriztük a crates.io indexe alapján: a winit a sctk-adwaita ^0.10.1 verziót igényli, a sctk-adwaita a tiny-skia ^0.11-et, a tiny-skia pedig az arrayref ^0.3.6-ot.

A lánc minden eleménél kalapgondolat (caret) tartományt adtak meg a 0.3.x verziókra, és egy 0.3.x tartomány elfogadja a 0.3.10-et is. Ugyanez az ellenőrzés mutatta ki, hogy a blake3 1.8.6-os verzióig még függött az arrayreftől, az 1.8.7-ben viszont már nem, ezt a kiadást augusztus 20-án 09:09 UTC-kor publikálták. A blake2b_simd és a blake2s_simd ugyanígy elhagyta ezt a függőséget a 09:25-kor és 09:26-kor megjelent kiadásokban.

A Wiz szerint a második szakaszú kártevő HTTPS POST kérésekkel kommunikál a /49890878 útvonalon, Windows alatt egy Registry Run kulccsal, macOS-en LaunchAgentként, Linuxon pedig systemd user service-ként marad tartósan jelen. Négy parancsot támogat: a folyamat leállítását, a C2 újrakonfigurálását, a tartós jelenlét telepítését, valamint további scriptek letöltését és futtatását. A Wiz azt is közölte, hogy a kártevő a Chrome, a Brave és az Edge böngészőkből lop hitelesítő adatokat az SQLite alapú login adatbázisok lekérdezésével.

A Nextron elemzése szerint a vizsgált Windowsos komponens csak az origin_url és username_value oszlopokat kérdezi le, és közvetlenül nem olvassa ki a password_value mezőt. Ez az elemzés azonban kizárólag a Windows payloadra terjedt ki, a Linux és macOS payloadokat csak hash alapján azonosították, de nem vizsgálták. Ugyanez az elemzés megjegyzi, hogy a crate a cargo build, cargo check és cargo test parancsokkal is aktiválódhat.

A StepSecurity az alábbi kompromittáltsági indikátorokat (IoC) tette közzé:

  • Hálózat: 23.254.165.112:9089 (payload host), 23.254.165.112:443 (C2), hwsrv-798836.hostwindsdns.com
  • Fájlok: /tmp/Rust-setup, %TEMP%\Rust-setup.ps1, %TEMP%\Rust-setup-launch.vbs
  • Binárisok: Rust-crate_0.1.0, _0.2.0, _0.3.0, _0.4.0
  • Fiókok: dtolney (crates.io id 438608), megszemélyező; droundy, a valódi tulajdonos, feltehetően feltört fiókkal
  • E-mail: rchaitm@gmail.com, hamisított szerzői metaadat

A Wiz szerint az infrastruktúra jelentős átfedést mutat az utóbbi időszak észak-koreai ellátási lánc-támadásaival, köztük a Mastra npm kompromittálásával és az axios elleni támadással.

A Microsoft nagy bizonyossággal a Sapphire Sleet csoporthoz köti a Mastra incidensét, míg a Google Threat Intelligence Group (GTIG) az axios kompromittálását egy olyan szereplőnek tulajdonítja, amelyet most MIDNIGHT NEPTUNE néven követ, korábban UNC1069-ként ismerték. A crates.io incidensét eddig egyetlen gyártó sem kapcsolta név szerint ismert szereplőhöz.

„Bár az axios rosszindulatú verzióit a megjelenésük után három órán belül eltávolították az npm registryből, a kompromittálás mértéke várhatóan így is jelentős, mivel a csomagot hetente több mint 100 milliószor töltik le” – írták a GTIG és a Mandiant egy július 30-i jelentésben, amelyben azt javasolják, hogy a frissen megjelent, harmadik féltől származó komponenseknél vezessenek be „lehűlési időszakot”.

A Cargo jelenleg nem kínál hasonló funkciót. Egy pull request, amely a global-min-publish-age beállítás stabilizálását célozza – ez visszatartaná a megadott korúnál fiatalabb függőségeket –, augusztus 18-án, két nappal a támadás előtt lépett a végső hozzászólási szakaszába, és augusztus 21-én még nyitott és be nem olvasztott állapotban volt. GitHub júliusban hasonló, alapértelmezett „lehűlési időszakot” vezetett be a Dependabot számára.

2025 szeptemberében két rosszindulatú crate egy naplózó könyvtárat megszemélyesítve csak futásidőben hajtott végre kódot, erre a különbségre a crates.io akkoriban külön is felhívta a figyelmet.