Közel 800 rosszindulatú csomagot töltöttek fel az npm tárolóba egy új kampány részeként, amely platformfüggetlen kártevőt terjeszt, és Windows, Mac és Linux rendszereket céloz.
„Úgy tűnik, hogy ezek a csomagok AI-val generált, vagy véletlenszerűen előállított, elgépelésre építő csomagneveket használnak, de mindegyikük egy erős RAT-ot és adatszivárogtató kártevőt telepít” – mondta az OpenSourceMalware kutatója, Paul McCarty nyilatkozatában.
Más, npm-re épülő szoftver-ellátási lánc elleni támadásokkal ellentétben, amelyek a preinstall vagy postinstall lifecycle hookokat használják a rosszindulatú kód futtatásának elindításához, az újonnan azonosított csomagok egy README fájllal érkeznek, amely arra utasítja a fejlesztőket, hogy a beépített require() függvénnyel töltsék be őket. A require() modulok, helyi fájlok és harmadik féltől származó csomagok importálására szolgál.
A támadás egy WEL1DROPPER nevű letöltő futtatásához vezet, amely végrehajtáskor azonosítja a gazdarendszer operációs rendszerét és processzorarchitektúráját, majd letölti a megfelelő payloadot a három Cloudflare Workers egyikéről. A három Cloudflare Workers domain a következő:
- oob-worker.cf103-070.workers[.]dev
- oob-worker.cf102-baf.workers[.]dev
- oob-worker.cf99-9b3.workers[.]dev
Ha a HTTPS-alapú letöltések sikertelenek, a kártevő platformfüggő domainre vált, és DNS TXT rekordokat használ a következő lépcső letöltésére a „wel1[.]ru” domainről. Az egyes operációs rendszerekhez és CPU-architektúrákhoz tartozó payload domainek a következők:
- Linux x64 – sdk.dl.wel1[.]ru
- Linux ARM64 – ext.dl.wel1[.]ru
- macOS – pkg.dl.wel1[.]ru
- Windows – net.dl.wel1[.]ru
„A csomag először egy TXT rekordot kér le a c.<domain> címről” – magyarázta McCarty. „A választ úgy értelmezi, mint a payload darabjainak számát, 1 és 2000 közötti értéket fogad el. Ezután sorszámozott TXT rekordokat kér le. Az így kapott sztringeket összefűzi, majd Base64-dekódolással bináris bufferbe alakítja.”
Az utolsó fázisban a payload egy ideiglenes mappába kerül, majd Linuxon és macOS-en a „/bin/sh”, Windowson pedig a „cmd.exe” segítségével futtatják.
A kampányt Flooding Dropper néven szintén figyelő Sonatype szerint a végső fázis egy leválasztott (detached) folyamatként indul. A Windows-változat lépéseket tesz az Event Tracing for Windows (ETW) és az Antimalware Scan Interface (AMSI) működésének módosítására, hogy zavarja a megfigyelést, ellenőrzi a sandboxokat és a virtuális környezeteket, tartósságot alakít ki egy Registry Run kulccsal és egy ütemezett feladattal, majd letölt egy titkosított payloadot („/pkg/update_win.exe”), és lefuttatja.
A macOS-fertőzési lánc hasonlóan működik: ugyanazokat a lépéseket hajtja végre, hogy debuggereket és elemzési nyomokat keressen, mielőtt letöltene egy kompatibilis payloadot ("/pkg/beacon_mac.bin") egy távoli szerverről. Ha ez nem sikerül, a korábban említett DNS TXT-alapú terjesztést használja, tartósságot alakít ki egy LaunchAgent segítségével, majd leválasztott folyamatként elindítja a futtatható állományt.
A Linux-minta ezzel szemben egy UPX-sel csomagolt ELF bináris, amelyet úgy állítottak be, hogy kiegészítő payloadokat töltsön le egy Cloudflare Worker URL-ről ("oob-worker[.]cf99-9b3.workers[.]dev"), ami végül a Sliver, egy nyílt forráskódú command-and-control (C2) framework telepítéséhez vezet.
A csomagokban egy "lib/telemetry.js" nevű fájlt is találtak, amely egy hihetőnek tűnő telemetry SDK-t valósít meg, de ugyanazt a letöltő logikát is tartalmazza.
„A csomag belépési pontja nem importálja ezt a fájlt, és nem tartalmaz további, beégetett infrastruktúrát” – közölte az OpenSourceMalware. „A túlméretezett telemetry megvalósítás célja láthatóan az, hogy zajt keltsen, és egy gyors átnézés során a rosszindulatú viselkedés natív profilozási vagy analitikai funkciónak tűnjön.”
A macOS payloadban megjelenő domainek, például a "tcsbank[.]ru" és a "cloudpayments[.]ru", arra utalnak, hogy a kampány orosz pénzintézeteket és mobilfizetési szolgáltatásokat célozhat.
Feltételezik azt is, hogy ez egy dependency confusion kampány továbbfejlesztett változata, amelynek Moika a fedőneve, és amelyet idén áprilisban figyeltek meg. Akkor több mint 250 csomagot tettek közzé az npm tárolóban, hogy környezeti információkat lopjanak, és operációs rendszerre szabott második fázisú payloadot juttassanak célba.
A fejleményekkel párhuzamosan a Palo Alto Networks Unit 42 több olyan kampányt is dokumentált, amelyek az npm-et és a Python Package Index (PyPI) tárolót célozzák –
- 10 npm csomag egy csoportja, amelyek egy külső szerverről egy obfuszkált kriptovaluta-lopó kártevőt és egy remote access trójait töltenek le. „Telepítés után a csomagok egy 'getPlugin' függvényt exportálnak, amely felépíti azt az URL-t, ahonnan a payload letöltődik, mégpedig egy JSON objektumba ágyazott, obfuszkált IIFE (Immediately Invoked Function Expression) JavaScript kód alapján” – írta a Unit 42. „A payload egy kriptolopó modult és egy Remote-Access Trojan (RAT) kártevőt valósít meg, amely lehetővé teszi a támadó számára, hogy tetszőleges parancsokat futtasson a fertőzött gépen.”
- Egy sor rosszindulatú csomag az npm-en és a PyPI-n, amelyek több, egymástól független fenyegető szereplőhöz köthetők, és képesek felhőhozzáférési adatok kiszivárogtatására, EtherHiding blokklánc-alapú C2 dropper terítésére, Solana kriptotárca-kulcsok ellopására Telegramon keresztül, .env fájlokban tárolt titkok kiszivárogtatására, hamis CAPTCHA-val végrehajtott social engineering alapú távoli kódfuttatásra, valamint Discord tokenek és GitHub Actions CI/CD hitelesítési adatok ellopására.
Csomagoktól a Chrome-bővítményekig
Fenyegető szereplők Google Chrome-bővítményeket is használnak, amelyeket játékemulátorként, jelszókezelőként, produktivitási eszközként, CSS-inspektorként és markdown-konverterként hirdetnek, hogy a webböngészőt webes feltérképező proxyvá alakítsák. A feltérképezési parancsokat távoli forrásból kapják egy tartós WebSocket-kapcsolaton keresztül.
„Ezek a bővítmények egy azonos, kereskedelmi webes sávszélesség-megosztó SDK-t ágyaznak be, amely a felhasználó böngészőjét egy harmadik fél által üzemeltetett lakossági proxyhálózathoz csatlakoztatja webes scraping műveletekhez” – közölte a Unit 42 jelentése, hozzátéve, hogy az SDK rejtett iframe-et injektál az aktív böngészőfülekbe, a háttérben markdown formátumra alakítja az oldal tartalmát, majd elküldi egy távoli felhős backendnek.
A kiberbiztonsági cég megjegyezte, hogy néhány ilyen bővítmény a Chrome Web Store leírásában, illetve a SaaS weboldalán elérhető privacy szabályzatban feltünteti ezt a gyakorlatot. Telepítés után a harmadik féltől származó SDK megkéri a felhasználót, hogy járuljon hozzá a szolgáltatás használatához.
„Ha a felhasználó elutasítja, a proxy- és feltérképezési funkciók inaktívak maradnak, néhány bővítmény azonban úgy állítja be ezt a hozzájárulást, mintha az a szolgáltatás zavartalan működéséhez szükséges lenne” – tette hozzá a Unit 42. „Jó példa erre az InstaSkip (mdondgockboebafloibbhjofmoedmnnn), amely beágyazza ezt az SDK-t.”

