Šta se desilo?

Istraživači kompanije Checkmarx otkrili su NPM supply-chain kampanju koja koristi drugačiji pristup za pokretanje zlonamernog koda. Umesto u uobičajenim preinstall ili postinstall skriptama, malver je sakriven direktno u kodu biblioteke i aktivira se tokom njenog normalnog korišćenja.

Glavni zlonamerni paket, indexed-btree, napravljen je tako da imitira legitimnu biblioteku sorted-btree. Paket nije imao zlonamerni install hook, pa samo njegovo instaliranje nije pokretalo malver.

Zlonamerna funkcionalnost nalazila se unutar BTree.prototype.set() metode. Kada se ispune određeni uslovi tokom rada aplikacije, pokreće se dodatni obfuskovani loader i započinje sledeća faza napada.

Checkmarx navodi da je indexed-btree dostizao skoro dva miliona preuzimanja nedeljno. Veliki broj preuzimanja, međutim, ne znači da je isti broj uređaja kompromitovan, jer preuzimanja mogu poticati iz automatizovanih build procesa, CI/CD sistema i ponovljenih instalacija.

Koga pogađa?

Riziku su izloženi developeri i organizacije koje su koristile zlonamerne NPM pakete u razvojnim, CI/CD ili produkcionim okruženjima.

Poseban rizik postoji tamo gde Node.js procesi imaju pristup API ključevima, cloud kredencijalima, tokenima, source code repozitorijumima ili drugim tajnama dostupnim kroz razvojno okruženje.

Pored indexed-btree paketa, Checkmarx je sa istom kampanjom povezao više dodatnih paketa koji su naknadno uklonjeni sa NPM platforme.

Kako se zaštititi?

  • Proverite package.json i lock fajlove zbog prisustva indexed-btree i drugih paketa povezanih sa kampanjom.
  • Uklonite identifikovane zlonamerne pakete i proverite direktne i tranzitivne zavisnosti koje ih uvode u projekat.
  • Ako je zlonamerni paket mogao biti izvršen, tretirajte razvojno okruženje kao potencijalno kompromitovano.
  • Rotirajte API ključeve, tokene, lozinke i druge tajne sa drugog, pouzdanog sistema.
  • Proverite CI/CD okruženja, build servere i cloud kredencijale kojima je kompromitovani proces mogao da pristupi.
  • Nemojte se oslanjati samo na proveru install skripti - analizirajte i ponašanje zavisnosti tokom izvršavanja aplikacije.
  • Koristite zaključane verzije zavisnosti i pregledajte neočekivane izmene u package-lock.json, yarn.lock ili pnpm-lock.yaml fajlovima.

Tehnički detalji

Za razliku od velikog broja ranijih NPM malware kampanja, indexed-btree ne koristi preinstall ili postinstall lifecycle skripte.

Zlonamerni loader ubačen je direktno u BTree.prototype.set() metodu. Kada metoda dobije ključ sa vrednošću 100 i pronađe fajl extended/sharedLoad.min.js, Node.js pokreće obfuskovani loader kao odvojeni proces.

Prva faza prikuplja informacije o kompromitovanom sistemu, uključujući arhitekturu operativnog sistema, hostname, CPU, memoriju i vreme rada sistema. Prikupljeni podaci mogu biti poslati preko Slack i Telegram infrastrukture.

Malver koristi i pametni ugovor na Ethereum Sepolia test mreži kao deo komandno-kontrolne infrastrukture. Umesto oslanjanja na samo jedan klasični C2 domen, pametni ugovor može da pruža informacije potrebne za pronalaženje sledeće faze infrastrukture.

Za zaštitu druge faze napada koristi se X25519 razmena ključeva. Malver generiše sopstveni par ključeva, preuzima javni ključ napadača iz pametnog ugovora i iz zajedničke tajne izvodi AES ključ kojim se dešifruje sledeći payload.

Kod sadrži i funkcije za uklanjanje zlonamernih fajlova i brisanje trigger koda iz originalne biblioteke, čime se otežava naknadna forenzička analiza.

Povezani zlonamerni paketi

  • indexed-btree
  • ordered-kv-index
  • btree-leaderboard
  • priority-slot-queue
  • btree-range-store
  • btree-core
  • btree-time-index
  • btree-lru-cache
  • neighbor-key-map
  • sliding-score-window

Zašto je važno?

Rizik zavisi od prisustva i izvršavanja zlonamerne zavisnosti. Jedna kompromitovana zavisnost može omogućiti napadaču pristup ne samo računaru developera, već i source code repozitorijumima, CI/CD sistemima, cloud okruženjima i tajnama koje se koriste tokom razvoja i deployment procesa.

Ova kampanja pokazuje i da veliki broj preuzimanja, profesionalno napravljen GitHub repozitorijum i naizgled normalna istorija commit-a nisu dovoljan dokaz da je open-source paket bezbedan.

Preporuka Sajber Radara

Proverite NPM zavisnosti u svojim projektima i odmah uklonite pakete povezane sa ovom kampanjom. Ako je zlonamerni kod mogao biti izvršen, izolujte pogođeno okruženje i rotirajte sve tajne kojima je proces mogao da pristupi.

Zaštita softverskog lanca snabdevanja ne sme da se završi proverom instalacionih skripti. Organizacije treba da kontrolišu poreklo zavisnosti, zaključavaju njihove verzije i prate šta biblioteke rade i tokom stvarnog izvršavanja aplikacije.