drošība · 5 min · 19.07.2026

OX Security atrod ļaunkodu npm organizācijā @asyncapi — četras pakotnes ar 2 miljoniem lejupielāžu nedēļā

14. jūlijā drošības uzņēmums OX Security atklāja, ka npm organizācija @asyncapi ir pārņemta un četrās tās pakotnēs iepludināts ļaunkods. Kopā šīs pakotnes lejupielādē vairāk nekā 2 miljonus reižu nedēļā. Katrs izstrādātājs, kurš pēdējās dienās tās atjaunināja, var būt inficējis savu darba mašīnu un līdzi arī CI/CD konveijeru.

AsyncAPI ir specifikācija un rīku kopa notikumu virzītu API aprakstīšanai. Tās ģeneratoru izmanto simtiem komandu, lai no YAML failiem izveidotu kodu un dokumentāciju. Uzbrucēji ievietoja kodu tieši šajā ķēdē — vietā, kur to izpilda automātiski, būvēšanas laikā.

Kuras versijas ir saindētas

Ļaunkods nonāca šajās konkrētajās versijās:

  • @asyncapi/generator 3.3.1
  • @asyncapi/generator-components 0.7.1
  • @asyncapi/generator-helpers 1.1.1
  • @asyncapi/specs 6.11.2 un 6.11.2-alpha.1

Pēc Security Affairs ziņotā, uzbrucēji pakotnes publicēja caur diviem atsevišķiem zaru kompromitējumiem divās GitHub krātuvēs. Ja tavs package-lock.json vai pnpm-lock.yaml norāda uz kādu no šīm versijām, mašīnu jāuzskata par kompromitētu. Vecākas versijas ir tīras.

Ko dara ļaunkods

OX Security komanda saskaitīja 91 973 koda rindas, kas ievietotas galvenajos JavaScript failos. Tas ir apzināts gājiens. Kods sēž pašā moduļa ķermenī, nevis post-install skriptā, tāpēc npm v12 ieviestais post-install skriptu ierobežojums to neaptur. Ielāde nostrādā, tiklīdz projekts importē pakotni.

Pēc OX Security klasifikācijas ielāde apvieno trīs lomas: informācijas zaglis, kriptovalūtu zaglis un attālinātas piekļuves trojas zirgs (RAT). Tā meklē marķierus un noslēpumus izstrādātāja mašīnā un būves vidē.

Izplatīšanās notiek pati no sevis. Ja mašīnā atrodas derīgi npm, PyPI vai Cargo marķieri, ļaunkods mēģina publicēties upura uzturētajās pakotnēs. Inficēts izstrādātājs kļūst par nākamo avotu. Vadību un noturību ļaunkods balsta uz decentralizētiem tīkliem: ielādi tas glabā IPFS, bet rezerves vadības kanālam izmanto BitTorrent sāknēšanas mezglus — router.bittorrent.com, router.utorrent.com un dht.transmissionbt.com. Kodā iestrādāta arī Ethereum adrese 0x12c37A86a0Ed0beBe5d1d6a43E42f07860eAc710, kuras nolūks pagaidām nav skaidrs.

Ja pēdējās dienās atjaunināji @asyncapi pakotnes, atsauc visus npm, PyPI un Cargo marķierus skartajā mašīnā, nomaini noslēpumus un pārbaudi, vai neviena tava pakotne nav publicēta bez tavas ziņas.

Daļa no plašāka jūlija viļņa

AsyncAPI gadījums nav vienīgais šonedēļ. GBHackers ziņo par 17 npm un 4 PyPI pakotnēm, kas uzdodas par maksājumu SDK — nosaukumi paysafe-checkout, neteller, skrill un līdzīgi. Tās pārmeklē vides mainīgos, kuros ir KEY, SECRET, TOKEN, PASS, AUTH vai API, un nosūta atrastos AWS, GitHub un npm marķierus uz slēptu serveri. Šo kampaņu atklāja aptuveni sešu minūšu laikā pēc publicēšanas, taču mērķis bija skaidrs: nozagt CI/CD noslēpumus.

Tajā pašā laikā SecurityWeek apraksta jaunu Shai-Hulud tārpa vilni, kas skāris vairāk nekā 100 npm un PyPI pakotņu. Shai-Hulud strādā pēc tā paša principa kā ļaunkods AsyncAPI pakotnēs: nozag marķierus un ar tiem publicē sevi tālāk. Orca Security saskaitīja jau vairāk nekā 160 skartu pakotņu, tostarp TanStack ekosistēmā.

Kopīgais pavediens ir marķieri. Uzbrucēji vairs nemēģina uzlauzt serverus tieši — viņi paļaujas uz to, ka izstrādātāja mašīnā vai būves konveijerā stāv derīgs npm vai GitHub marķieris, un ar to pietiek, lai saindētu nākamo pakotni.

Ko darīt tagad

Praktiskie soļi, ja izmanto npm vai PyPI:

  1. Pārbaudi lock failus visos projektos un meklē augšā uzskaitītās AsyncAPI versijas. Piespraud tīras versijas un pārbūvē.
  2. Atsauc npm, PyPI un Cargo marķierus katrā mašīnā, kas pēdējā nedēļā instalēja vai atjaunināja pakotnes no skartajām organizācijām.
  3. Nomaini AWS atslēgas, GitHub un CI/CD noslēpumus, kas atrodas vides mainīgajos.
  4. Uzraugi izejošo tīkla trafiku: negaidīti savienojumi ar IPFS vārtejām vai BitTorrent mezgliem no būves servera ir tiešs signāls.
  5. Audituj savas publicētās pakotnes un GitHub commit vēsturi — meklē laidienus, ko neveici pats.

npm v12 post-install ierobežojums šoreiz nepalīdzēja, jo kods sēdēja pašā modulī, nevis instalācijas skriptā. Vienīgā droša pieeja paliek zināt, kuras versijas ir tīras, un neatjaunināt pakotnes akli tieši pirms laidiena.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no drošībasaistītie