- Simtiem npm pakotņu tika apdraudētas ar pašreplicējošu tārpu ar nosaukumu Shai-Hulud, un GitHub noņēma vairāk nekā 500 inficētas versijas.
- Ļaunprogrammatūra zog slepenus datus (npm žetonus, GitHub PAT, mākoņa atslēgas) un atkārtoti publicē inficētās pakotnes, izmantojot upuru publicēšanas tiesības.
- Pierādījumi norāda uz uzbrukumiem Linux un macOS operētājsistēmām, TruffleHog ļaunprātīgu izmantošanu un GitHub Actions darbplūsmu, kas izfiltrē datus.
- Nekavējoties veicamās darbības: rotēt marķierus, auditēt atkarības un GitHub repozitorijus, ieviest MFA/2FA un meklēt IoC, tostarp bundle.js un webhook.site trafiku.
Kas sākās kā kārtējā piegādes ķēdes biedēšana JavaScript pasaulē, ir pāraugis lielā incidentā, kas ietekmē npm ekosistēmu. Ziņojumi no vairākiem avotiem apstiprina pašizplatošu ļaunprogrammatūras paveidu, izsekots kā Šai-Huluds, kas apdraud izstrādātāja akreditācijas datus, atklāj kodu un atkārtoti publicē inficētas pakotnes, lai turpinātu infekcijas izplatīšanos.
Lai gan skaitļi atšķiras atkarībā no avota, vienprātība ir skaidra: mēs strādājam ar simtiem saindētu izlaidumu, tostarp plaši izmantota bibliotēka, kas tiek lejupielādēta miljoniem reižu nedēļā. GitHub noņēma vairāk nekā 500 apdraudētas versijas, lai apturētu izplatību, un drošības komandas visā pasaulē mudina izstrādātājus mainīt akreditācijas datus un pārskatīt savus repozitorijus un plūsmas, lai atrastu ielaušanās pavedienus.
Kas notika un kāpēc tas ir svarīgi
Izmeklēšana liecina, ka operācija, visticamāk, sākās ar akreditācijas datu ieguve ēsmas viltošana npm, mudinot uzturētājus “atjaunināt” MFA iestatījumus. Ar piekļuvi rokās apdraudējuma izpildītājs izvietoja tārpu, kas darbojas pēc instalēšanas, meklē noslēpumus un atkārtoti publicē inficētas versijas ar upura identitāti, pārvēršot uzticamus uzturētājus par uzbrukuma pastiprinātājiem.
Šai-Huluds apvieno divas bīstamas idejas: automatizēta izplatīšana un noslēpumu zādzībaTas ļaunprātīgi izmanto nozagtus npm žetonus, lai publicētu jaunas pakotņu versijas, un izmanto GitHub žetonus un mākoņa atslēgas (AWS, GCP, Azure), lai pārvietotos horizontāli un izfiltrētu datus. Šis savienojums ievērojami palielina sprādziena rādiusu, ļaujot vienam kompromitam izplatīties starp neskaitāmiem lejupējiem lietotājiem.
Mērķi šķiet nobīdīti par labu Unix līdzīgām sistēmām. Analīze norāda, ka lielākā daļa ļaunprātīga loģika darbojas operētājsistēmās Linux un macOS, pamatojoties uz vides pārbaudēm, lai gan noslēpumu atklāšanas fāze (īpaši ar TruffleHog) var notikt plašākā mērogā. Šī uzmanība sašaurināja tārpa ietekmi, taču joprojām atstāja neaizsargātu plašu izstrādātāju datoru klāstu.
Tika ietekmētas gan vairāku ievērojamu organizāciju pakotnes, gan populāri kopienas moduļi. Vienā no skaļākajiem piemēriem @ctrl/tinycolor Pakotne, kas tiek lejupielādēta miljoniem reižu nedēļā, tika iesaistīta cīņā, parādot, cik dziļi infekcija varēja ierakties atkarību grafikā.
Kā darbojas tārps (tehnisks sadalījums)
Galvenā slodze tiek piegādāta kā apjomīgs JavaScript fails, ko parasti sauc par bundle.js (novērotajos paraugos vairāk nekā 3 MB). Tas tiek izpildīts, izmantojot package.json pievienotu pēcinstalēšanas āķi, kas nozīmē, ka ļaunprātīgais kods tiek izpildīts automātiski tūlīt pēc tam, kad lietotājs instalē pakotni no npm.
Bundle.js iekšpusē ir moduļi, kas paredzēti GitHub API mijiedarbība, mākoņa SDK (AWS/GCP), tīkla palīgrīkus un rutīnas TruffleHog palaišanai slepenas informācijas atklāšanai. Skripts inventarizē operētājsistēmu, atrod npm marķieri un pārbauda derīgu GitHub marķieri; ja tāds netiek atrasts, tas pamet operētājsistēmu — pretējā gadījumā tas sāk eksfiltrāciju un replikāciju.
Ievērojama īpatnība: dažās inficētajās pakotnēs bija arhīvs ar nosaukumu pakotne.tar ierastās nosaukumu piešķiršanas konvencijas vietā — brīdinājuma signāls, kas palīdzēja pētniekiem atzīmēt kompromitētus artefaktus. Analītiķi novēroja arī variantu, kas darbojās kā pirmsinstalēšanas āķis; viens no iepriekš minētajiem gadījumiem bija ngx-bootstrap 18.1.4, kas, iespējams, kalpoja par sākotnējo pladčas punktu izplatībā.
Kad ļaunprogrammatūra ir palaista, tā, izmantojot npm meklēšanas API, uzskaita izstrādātāja visbiežāk lejupielādētās pakotnes. izpako katru tarball, atmet bundle.js, ievada postinstall komandu, palielina versiju un atkārtoti publicē npm ar upura žetonu. Tas pārvērš izstrādātāja portfolio par tālāku infekciju līdzekli.
Noslēpumu eksfiltrācija un GitHub darbplūsmas
Lai iegūtu akreditācijas datus, Shai-Hulud skenē npm žetonus, GitHub personiskās piekļuves žetonus un mākoņa API atslēgas (AWS, GCP, Azure). Pēc tam upura kontā tas izveido publisku GitHub repozitoriju ar nosaukumu “Shai-Hulud”, izveidojot datu failu (piemēram, data.json) ar nozagtajiem noslēpumiem, faktiski atklājot tos pasaulei.
Paralēli pētnieki novēroja viltīgu GitHub Actions aspektu: tārpu izveido atzaru ar nosaukumu “shai-hulud” visās pieejamās krātuvēs un nosūta darbplūsmas failu (shai-hulud-workflow.yml). Aktivizēta nosūtījumos, darbplūsma apkopo slepenos datus un nosūta tos uzbrucēja infrastruktūrai, dažreiz pēc tam dubultā Base64 kodēšana lai pārsūtīšanas laikā padarītu saturu neskaidru.
Ir arī pierādījumi par migrācijas skriptu, kas klonē privātos/iekšējos repozitorijus no organizācijām, kurām upuris var piekļūt, atkārtoti izvietojot tos lietotāja kontā kā publiskus spoguļus. Šķiet, ka mērķis ir automatizēta pirmkoda zādzība no privātiem projektiem, palielinot spiedienu uz skartajām organizācijām.
Vairākos ziņojumos ir norādīti mākslīgā intelekta palīdzības artefakti bash skriptos (komentāri un pat emocijzīmes), kas liecina, ka uzbrucējs, iespējams, ir izmantojis LLM, lai paātrinātu attīstību ļaunprogrammatūras automatizācijas komponentu.
Darbības joma un ievērojamas paketes
GitHub tika noņemts koordinētu noņemšanas gadījumu laikā Vairāk nekā 500 apdraudētas versijas lai apturētu tārpa izplatīšanos. Lai gan precīzs kopskaits turpina mainīties, saraksts aptver daudzas ekosistēmas un organizācijas, un tas ietekmē izstrādātājus, kuri atjaunināja aktīvā loga laikā.
Starp bieži citētajām pakotnēm un vārdtelpām: @ctrl/tinycolor (miljoniem lejupielāžu nedēļā), vairāki @crowdstrike/* komponenti (piemēram, commitlint un lietotāja interfeisa bibliotēkas) un plašs kopienas moduļu klāsts, tostarp ngx-bootstrap, ng2 failu augšupielāde, ngx-toastrun citas lietas. CrowdStrike norādīja, ka tā pamatplatforma palika nemainīga un ka atslēgas tika ātri pagrieztas pēc ļaunprātīgu ierakstu atklāšanas publiskajā reģistrā.
- Ar vilni saistīti piemēri: @ctrl/tinycolor; @crowdstrike/commitlint; @crowdstrike/foundry-js; @crowdstrike/glide-core; ngx-bootstrap; ng2-file-upload; ngx-toastr; @nativescript-community/*; @teselagen/*; @things-factory/*; un citi.
- Pētnieki arī redzēja vairākas ļaunprātīgas versijas katrā pakotnē dažos gadījumos — iespējams, tāpēc, ka tārps izplatās caur vairākiem uzturētāju kontiem viena projekta ietvaros.
Platformas reakcija un drošības izmaiņas
GitHub tūlītējās darbības ietvēra zināmu sliktu pakotņu tīrīšana no npm un bloķējot augšupielādes, kas atbilst kompromisa rādītājiem (IoC). Uzņēmums ievieš arī stingrāku publicēšanas kontroli: obligātu 2FA lokālai publicēšanai, īsāka darbības laika granulārus žetonus (piemēram, septiņas dienas) un plašāku Uzticama izdevniecība lai mazinātu atkarību no ilgstoši saglabājamiem noslēpumiem.
Gaidāmās izmaiņas novecos no mantotajiem klasiskajiem žetoniem un uz TOTP balstītajiem 2FA publicēšanai. pēc noklusējuma neļauj publicēt žetonusun paplašināt uzticamas publicēšanas pakalpojumu sniedzējus. GitHub ir signalizējis par pakāpenisku ieviešanu ar dokumentāciju un migrācijas ceļvežiem, atzīstot, ka dažas darbplūsmas būs jāpielāgo.
Draudu izlūkošanas un incidentu reaģēšanas komandas visā nozarē (tostarp Unit 42, Kaspersky, Trend Micro un citas) ir izdotās vadlīnijas un konstatētie gadījumi vienlaikus kopīgojot IoC ar vienaudžiem un aliansēm, lai paātrinātu aizsardzības atjauninājumus.
Kā samazināt risku tieši tagad
Rīkojieties ātri, pieņemot, ka jebkurai izstrādātāja iekārtai, kas nesen instalēja npm pakotnes, varētu būt nopludināta slepenā informācija. Prioritāte ir satur akreditācijas datu ļaunprātīgu izmantošanu, apturēt noturību un likvidēt bojātas atkarības no būvēšanas ķēdēm.
- Nekavējoties nomainiet npm žetonus, GitHub PAT/SSH atslēgas un mākoņa akreditācijas datus (AWS/GCP/Azure); ņemiet vērā, ka visi izstrādātāju resursdatoros esošie noslēpumi ir apdraudēti.
- Veiciet atkarību auditu, izmantojot package-lock.json/yarn.lock; noņemiet vai piesprausiet zināmas kompromitētas versijas; atkārtoti instalējiet no tīriem avotiem.
- Ieviest MFA/2FA visā GitHub un npm platformā; ja iespējams, pāriet uz uzticamu publicēšanu, lai izslēgtu ilgmūžīgus tokenus no cikla.
- Pārbaudiet GitHub, vai tajā nav negaidītu publisku repozitoriju ar nosaukumu “Shai-Hulud”, nepazīstamu atzaru vai darbplūsmu, kā arī anomālu darbību izpildi.
- Nostiprināt CI/CD ar vismazāko privilēģiju RBAC, artefaktu parakstīšanu/verifikāciju un nepārtrauktu SCA skenēšanu; apstrādāt Atvērtā pirmkoda patēriņš kā pārvaldīts risks.
Draudu meklēšanas padomi (augsta signāla pārbaudes)
Meklējiet izejošos savienojumus uz tīmekļa vietne domēni, īpaši URI, kas novērots vairākās atskaitēs. Galapunktos meklējiet bundle.js pagaidu vai pakotņu direktorijos un GitHub darbību failā ar nosaukumu shai-hulud-workflow.yml.
- Tīkla telemetrija: DNS/URL žurnāli, kas satur webhook.site; atzīmējiet konkrēto ceļu bb8ca5f6‑4175‑45d2‑b042‑fc9ebb8170b7, ja tāds ir.
- Failu telemetrija: bundle.js izveide vai izpilde; shai-hulud-workflow.yml klātbūtne Linux/macOS izstrādātāju resursdatoros.
- Procesa telemetrija: TruffleHog izsaukšanas kur tas nav paredzēts (ņemiet vērā, ka dažās organizācijās var pastāvēt likumīga lietošana).
Kompromitācijas rādītāji (IoC)
Izmeklēšanā novērotās failu un virkņu norādes ietver bundle.js un shai-hulud-workflow.yml, un literālā virkne 'shai‑hulud' parādās filiālēs, repozitorijos un darbplūsmās.
- Faili: bundle.js; shai-hulud-workflow.yml
- Virknes: shai-hulud; package.tar
- Hashes (selected): 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09; b74caeaa75e077c99f7d44f46daaf9796a3be43ecf24f2a1fd381844669da777; dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c; 4b2399646573bb737c4969563303d8ee2e9ddbd1b271f1ca9e35ea78062538db; C96FBBE010DD4C5BFB801780856EC228; 78E701F42B76CCDE3F2678E548886860
- Tīkls: https://webhook.site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7 (novērotie varianti un apakšceļi)
Laika grafiks un notiekošā analīze
Ziņojumos sākotnējais atklājums tiek attiecināts uz 2025. gada septembra vidu, un maksimālā ierobežošanas darbība ap 16.–19. septembriKopš tā laika GitHub un vairāki pārdevēji ir atjauninājuši aizsardzības pasākumus, noteikšanas metodes un norādījumus. Sagaidāmi turpmāki retrospektīvi atklājumi, organizācijām pabeidzot incidentu pārskatīšanu un paplašinot skarto versiju sarakstus.
Daži pierādījumi liecina, ka incidents balstīts uz iepriekšējām slepenām noplūdēm, uzsverot, kā ilgi dzīvojoši žetoni un kešatmiņā saglabātie akreditācijas dati var izraisīt jaunus kompromitēšanas vilnus vairākus mēnešus vēlāk. Tam vajadzētu pastiprināt centienus saīsināt žetonu darbības laiku un ieviest publicēšanas modeļus, kas samazināt slepeno izplatību.
Ne katrā ziņojumā ir vienprātība par precīzām summām vai pirmās ķēdes pakotnēm, taču kopējā aina ir šāda: a pašreplicējošs npm tārps ka izstrādātāju uzticēšanās un automatizētās publicēšanas tiesības tika izmantotas kā ierocis, lai tās ātri paplašinātos — ātrāk, nekā daudzas komandas to spētu noteikt tikai ar manuālu pārskatīšanu.
Šis pasākums ilustrē, cik ātri mūsdienu būvēšanas kanāli var pārvērsties par ļaunprogrammatūras lielceļiem. autentifikācijas pastiprināšana, noņemot no ceļa ilgi dzīvojošus tokenus, nostiprinot CI/CD un agresīvi meklējot IoC, organizācijas var ierobežot atkarību jau šodien un padarīt nākamās paaudzes īstenošanu daudz grūtāku.
