„Shai-Hulud“ kirminas užkrečia npm paketus: išsamus tiekimo grandinės incidento tyrimas

Paskutiniai pakeitimai: 09/25/2025
Autorius: C SourceTrail
  • Šimtai npm paketų buvo pažeisti save replikuojančio kirmino, pavadinto „Shai-Hulud“, o „GitHub“ pašalino daugiau nei 500 užkrėstų versijų.
  • Kenkėjiška programa vagia paslaptis (npm žetonus, „GitHub“ PAT, debesies raktus) ir pakartotinai publikuoja užkrėstus paketus, naudodama aukų publikavimo teises.
  • Įrodymai rodo „Linux“ ir „macOS“ taikymus, „TruffleHog“ piktnaudžiavimą ir „GitHub Actions“ darbo eigą, kuri išfiltruoja duomenis.
  • Neatidėliotini veiksmai: keisti žetonus, tikrinti priklausomybes ir „GitHub“ saugyklas, užtikrinti MFA/2FA įgyvendinimą ir ieškoti IoC, įskaitant bundle.js ir webhook.site srautą.

Shai-Hulud npm kirminų ataka

Tai, kas prasidėjo kaip dar viena tiekimo grandinės panika „JavaScript“ pasaulyje, išaugo į didelį incidentą, paveikusį npm ekosistemą. Įvairių šaltinių ataskaitos patvirtina savaime plintančią kenkėjiškų programų atmainą, sekta kaip Shai-Hulud, kuris pažeidžia kūrėjo prisijungimo duomenis, atskleidžia kodą ir pakartotinai publikuoja užkrėstus paketus, kad infekcija tęstųsi.

Nors skaičiai skiriasi priklausomai nuo šaltinio, sutarimas aiškus: susiduriame su šimtai užnuodytų išleidimų, įskaitant plačiai naudojamą biblioteką, atsisiunčiamą milijonus kartų per savaitę. „GitHub“ pašalino daugiau nei 500 pažeistų versijų, kad sustabdytų plitimą, o saugumo komandos visame pasaulyje ragina kūrėjus keisti prisijungimo duomenis ir peržiūrėti savo saugyklas bei srautus, ieškodamos įsilaužimo užuominų.

Kas atsitiko ir kodėl tai svarbu

Tyrimai rodo, kad operacija greičiausiai prasidėjo nuo įgaliojimų rinkimas, masalų klastojimas, npm, ragindamas prižiūrėtojus „atnaujinti“ MFA nustatymus. Turėdamas prieigą, grėsmės veikėjas įdiegė kirminą, kuris paleidžiamas po įdiegimo, ieško paslapčių ir pakartotinai publikuoja užkrėstus kūrinius naudodamas aukos tapatybę, paversdamas patikimus prižiūrėtojus atakos stiprintuvais.

Shai-Hulud sujungia dvi pavojingas idėjas: automatizuotas platinimas ir paslapčių vagystėJis piktnaudžiauja pavogtais npm žetonais, kad publikuotų naujas paketų versijas, ir naudoja „GitHub“ žetonus bei debesies raktus (AWS, GCP, Azure), kad galėtų judėti horizontaliai ir išfiltruoti duomenis. Šis derinys padidina sprogimo spindulį, leisdamas vienam kompromitui paveikti daugybę tolesnių vartotojų.

Tikslai, regis, yra labiau linkę į „Unix“ tipo sistemas. Analizė rodo, kad dauguma kenkėjiška logika vykdoma „Linux“ ir „macOS“ sistemose, remiantis aplinkos patikrinimais, nors paslapčių atskleidimo etapas (ypač naudojant „TruffleHog“) gali vykti plačiau. Toks dėmesys sumažino kirmino veikimo aprėptį, tačiau vis tiek paliko neapsaugotą platų kūrėjų kompiuterių spektrą.

Buvo paveikti kelių žinomų organizacijų paketai ir populiarūs bendruomenės moduliai. Vienas iš žinomų pavyzdžių – @ctrl/tinycolor Paketas, atsisiunčiamas milijonus kartų per savaitę, buvo įtrauktas į ginčą, parodydamas, kaip giliai infekcija gali įsiskverbti į priklausomybių grafiką.

npm paketų kompromiso iliustracija

Kaip veikia kirminas (techninis suskirstymas)

Pagrindinė apkrova pateikiama kaip didelis „JavaScript“ failas, paprastai vadinamas bundle.js (stebėtuose pavyzdžiuose daugiau nei 3 MB). Jis vykdomas per prie package.json pridėtą poįdiegimo kabliuką, o tai reiškia, kad kenkėjiškas kodas paleidžiamas automatiškai iškart po to, kai vartotojas įdiegia paketą iš npm.

„bundle.js“ viduje yra moduliai, skirti „GitHub“ API sąveika, debesijos SDK (AWS/GCP), tinklo pagalbininkus ir procedūras, skirtas paleisti „TruffleHog“ slaptam aptikimui. Scenarijus inventorizuoja OS, suranda npm prieigos raktą ir patikrina, ar yra galiojantis „GitHub“ prieigos raktas; jei jo neranda, scenarijus atsisako, kitu atveju pradedamas eksfiltravimas ir replikavimas.

Pastebima yda: kai kuriuose užkrėstuose paketuose buvo archyvas, pavadintas paketas.tar vietoj įprastos pavadinimų suteikimo konvencijos, pranešimo funkcija, kuri padėjo tyrėjams pažymėti pažeistus artefaktus. Analitikai taip pat pastebėjo variantą, kuris veikė kaip išankstinio diegimo kabliukas; vienas iš ankstyvų paminėtų atvejų buvo ngx-bootstrap 18.1.4, kuris galėjo būti pradinis plitimo plitimo taškas.

Paleidus kenkėjišką programą, ji per „npm“ paieškos API išvardija kūrėjo dažniausiai atsisiųstus paketus. išpakuoja kiekvieną tarball, pašalina „bundle.js“, įterpia „postinstall“ komandą, padidina versijos našumą ir iš naujo publikuoja „npm“ sistemoje su aukos prieigos raktu. Tai paverčia kūrėjo portfelį tolesnių užkrėtimų priemone.

Paslapčių išgavimas ir „GitHub“ darbo eigos

Kredencialų rinkimui „Shai-Hulud“ nuskaito npm žetonus, „GitHub“ asmeninės prieigos žetonus ir debesies API raktai (AWS, GCP, Azure). Tada aukos paskyroje sukuriama vieša „GitHub“ saugykla pavadinimu „Shai-Hulud“, įkeliant duomenų failą (pvz., data.json) su pavogtomis paslaptimis – faktiškai jas atskleidžiant pasauliui.

Tuo pačiu metu tyrėjai pastebėjo gudrų „GitHub Actions“ aspektą: kirminą sukuria šaką pavadinimu „shai-hulud“ per prieinamas saugyklas ir perduoda darbo eigos failą (shai-hulud-workflow.yml). Suaktyvinama siunčiant duomenis, darbo eiga renka paslaptis ir siunčia jas užpuoliko infrastruktūrai, kartais po to dviguba Base64 koduotė užmaskuoti turinį perdavimo metu.

Taip pat yra įrodymų apie migracijos scenarijų, kuris klonuoja privačius/vidinius saugyklų iš organizacijų, prie kurių auka gali prisijungti, perkeliant juos į vartotojo paskyrą kaip viešuosius veidrodžius. Atrodo, kad tikslas – automatizuota šaltinio kodo vagystė iš privačių projektų, didinant spaudimą paveiktoms organizacijoms.

Keliose ataskaitose nurodomi dirbtinio intelekto pagalbos artefaktai „bash“ scenarijuose (komentarai ir net jaustukai), o tai rodo, kad užpuolikas galėjo naudoti LLM, siekiant paspartinti plėtrą kenkėjiškos programos automatizavimo komponentų.

Taikymo sritis ir svarbūs paketai

„GitHub“ pašalintas koordinuotų pašalinimų metu 500+ pažeistų versijų kad sustabdytų kirmino plitimą. Nors tikslus bendras skaičius toliau kinta, sąrašas apima daugybę ekosistemų ir organizacijų, o tai daro įtaką kūrėjams, kurie atnaujino aktyvaus laikotarpio metu.

Tarp dažnai cituojamų paketų ir vardų erdvių: @ctrl/tinycolor (milijonai atsisiuntimų per savaitę), daugkartinis @crowdstrike/* komponentai (pvz., „commitlint“ ir vartotojo sąsajos bibliotekos) ir platus bendruomenės modulių asortimentas, įskaitant ngx-bootstrap, ng2 failo įkėlimas, ngx-toastrir kita. „CrowdStrike“ nurodė, kad jos pagrindinė platforma liko nepakitusi ir kad raktai buvo greitai pakeisti aptikus kenkėjiškus įrašus viešajame registre.

  • Su banga susiję pavyzdžiai: @ctrl/tinycolor; @crowdstrike/commitlint; @crowdstrike/foundry-js; @crowdstrike/glide-core; ngx-bootstrap; ng2-file-upload; ngx-toastr; @nativescript-community/*; @teselagen/*; @things-factory/*; ir kiti.
  • Tyrėjai taip pat matė kelios kenkėjiškos versijos viename pakete kai kuriais atvejais – greičiausiai dėl to, kad kirminas plinta per kelias to paties projekto prižiūrėtojų paskyras.

Platformos atsakas ir saugumo pakeitimai

„GitHub“ neatidėliotini veiksmai apėmė išvalomi žinomi blogi paketai iš npm ir blokuoja įkėlimus, atitinkančius kompromiso rodiklius (IoC). Bendrovė taip pat diegia griežtesnes leidybos kontrolės priemones: privalomą 2FA vietiniam leidybai, trumpesnio gyvavimo granuliarinius žetonus (pvz., septynias dienas) ir platesnį diegimą Patikimas leidinys sumažinti priklausomybę nuo ilgai gyvuojančių paslapčių.

Dėl būsimų pakeitimų nebebus galima naudoti senesnių klasikinių žetonų ir TOTP pagrįsto 2FA publikavimui. numatytoji reikšmė neleidžia skelbti žetonųir išplėsti patikimo leidybos paslaugų teikėjus. „GitHub“ pranešė apie laipsnišką diegimą su dokumentacija ir perkėlimo vadovais, pripažindama, kad kai kuriuos darbo eigą reikės koreguoti.

Grėsmių žvalgybos ir incidentų reagavimo komandos visoje pramonėje (įskaitant „Unit 42“, „Kaspersky“, „Trend Micro“ ir kitas) išleistos gairės ir nustatyti atvejai kartu dalijantis IoC su kolegomis ir aljansais, siekiant paspartinti apsaugos atnaujinimus.

Kaip sumažinti riziką dabar

Greitai veikite manydami, kad bet kuris kūrėjo kompiuteris, neseniai įdiegęs npm paketus, galėjo nutekinti paslaptis. Prioritetas yra yra piktnaudžiavimas prisijungimo duomenimis, sustabdyti atkaklumą ir pašalinti užterštas priklausomybes iš kūrimo grandinių.

  • Nedelsdami keiskite npm žetonus, „GitHub“ PAT/SSH raktus ir debesies prisijungimo duomenis (AWS/GCP/„Azure“); laikykite visas kūrėjų serveriuose esančias paslaptis pažeistas.
  • Patikrinkite priklausomybes per package-lock.json/yarn.lock; pašalinkite arba prisekite nuo žinomų pažeistų versijų; iš naujo įdiekite iš švarių šaltinių.
  • Užtikrinti MFA/2FA taikymą „GitHub“ ir „npm“ platformose; kur įmanoma, pereiti prie patikimo leidybos (Trusted Publishing), kad būtų pašalinti ilgai gyvuojantys žetonai (tokenai).
  • Patikrinkite „GitHub“, ar nėra netikėtų viešų saugyklų pavadinimu „Shai-Hulud“, nepažįstamų šakų ar darbo eigų ir anomalių veiksmų vykdymo atvejų.
  • Sustiprinti CI/CD su mažiausiai privilegijų turinčiu RBAC, artefaktų pasirašymu/tikrinimu ir nuolatiniu SCA nuskaitymu; apdoroti Atvirojo kodo naudojimas kaip valdoma rizika.

Grėsmių paieškos patarimai (stipraus signalo patikrinimai)

Ieškokite išeinančių ryšių su webhook.site domenai, ypač URI, pastebėtas keliose ataskaitose. Galiniuose taškuose ieškokite bundle.js laikinuosiuose arba paketiniuose kataloguose ir „GitHub Actions“ faile, pavadintame shai-hulud-workflow.yml.

  • Tinklo telemetrija: DNS/URL žurnalai, kuriuose yra webhook.site; jei matomas, pažymėkite konkretų kelią bb8ca5f6‑4175‑45d2‑b042‑fc9ebb8170b7.
  • Failų telemetrija: „bundle.js“ kūrimas arba vykdymas; „shai-hulud-workflow.yml“ buvimas „Linux“ / „macOS“ kūrėjų pagrindiniuose kompiuteriuose.
  • Proceso telemetrija: „TruffleHog“ iškvietimai kur nesitikima (atkreipkite dėmesį, kad kai kuriose organizacijose gali egzistuoti teisėtas naudojimas).

Kompromiso rodikliai (IoC)

Tyrimų metu pastebėti failų ir eilučių užuominos apima bundle.js bei shai-hulud-workflow.yml, o šakose, saugyklose ir darbo eigose rodoma pažodinė eilutė „shai‑hulud“.

  • Failai: bundle.js; shai-hulud-workflow.yml
  • Eilutės: shai-hulud; paketas.tar
  • Hashes (selected): 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09; b74caeaa75e077c99f7d44f46daaf9796a3be43ecf24f2a1fd381844669da777; dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c; 4b2399646573bb737c4969563303d8ee2e9ddbd1b271f1ca9e35ea78062538db; C96FBBE010DD4C5BFB801780856EC228; 78E701F42B76CCDE3F2678E548886860
  • Tinklas: https://webhook.site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7 (stebimi variantai ir poskyriai)

Chronologija ir nuolatinė analizė

Pranešama, kad pirmasis atradimas įvyko 2025 m. rugsėjo viduryje. Didžiausi izoliavimo veiksmai rugsėjo 16–19 d.„GitHub“ ir keli tiekėjai nuo to laiko atnaujino apsaugos priemones, aptikimo mechanizmus ir gaires. Tikėkitės tolesnių retrospektyvių išvadų, organizacijoms baigus incidentų peržiūras ir išplėtus paveiktų versijų sąrašus.

Kai kurie įrodymai rodo, kad įvykis paremta ankstesniais slaptais nutekėjimais, pabrėžiant, kaip ilgai gyvuojantys žetonai ir talpykloje saugomi prisijungimo duomenys gali paskatinti naujas įsilaužimo bangas po kelių mėnesių. Tai turėtų sustiprinti pastangas sutrumpinti žetonų gyvavimo laiką ir taikyti leidybos modelius, kurie sumažinti slaptą plitimą.

Ne kiekvienoje ataskaitoje sutampa tikslios sumos ar pirmojo grandinės paketai, tačiau bendras vaizdas yra toks: a save replikuojantis npm kirminas kad kūrėjų pasitikėjimas ir automatizuotos leidybos teisės tapo ginklu, siekiant greitai plėstis – greičiau, nei daugelis komandų galėtų aptikti vien rankinės peržiūros metu.

Šis renginys iliustruoja, kaip greitai šiuolaikiniai kūrimo kanalai gali virsti kenkėjiškų programų greitkeliais. griežtinant autentifikavimą, pašalindamos ilgai gyvuojančius žetonus iš kelio, sustiprindamos CI/CD ir agresyviai ieškodamos IoC, organizacijos gali šiandien suvaldyti pažeidžiamumą ir gerokai apsunkinti kitos bangos įgyvendinimą.

Susijusios naujienos: