Vienas pikšķerēšanas vēstules dēļ 2025. gada 8. septembrī uzbrucēji pārņēma 18 populāras npm pakotnes, tostarp chalk un debug, kuras kopā lejupielādē vairāk nekā 2 miljardus reižu nedēļā. Nedēļu vēlāk ekosistēmā parādījās Shai-Hulud — pirmais pašizplatošais tārps npm vēsturē, kas līdz novembrim bija inficējis gandrīz 800 pakotņu un publicējis vairāk nekā 25 000 repozitoriju ar nozagtiem izstrādātāju noslēpumiem.
Secinājums ir neērts, bet vienkāršs: mūsdienu programmatūra balstās uz uzticēšanos svešiniekiem, un tieši šo uzticēšanos uzbrucēji tagad izmanto kā ieroci. Labā ziņa — npm, GitHub un Eiropas regulatori 2026. gadā beidzot reaģē ar konkrētām izmaiņām, un izstrādātājam ir praktiski soļi, ko spert jau šodien.
viena e-pasta attālumā no 2 miljardiem lejupielāžu
Septembra uzbrukums sākās ar viltotu e-pastu no domēna npmjs.help, kas bija reģistrēts tikai trīs dienas iepriekš. Vēstule aicināja “atjaunināt” divu faktoru autentifikācijas iestatījumus, un pieredzējis uzturētājs viltus lapā ievadīja gan paroli, gan derīgu 2FA kodu. Ar to pietika: uzbrucēji publicēja ļaunprātīgas versijas pakotnēm, kuras tieši vai netieši izmanto liela daļa JavaScript projektu visā pasaulē — arī Latvijas e-veikalos un valsts iestāžu portālos, kas būvēti uz tām pašām atkarībām.
Iesētais kods pārlūkā klusi pārtvēra kriptovalūtu darījumus un pārrakstīja maku adreses par labu uzbrucējiem, lietotājam neko nemanot. Par laimi, drošības pētnieki anomāliju pamanīja, un ļaunprātīgās versijas reģistrā dzīvoja tikai aptuveni divas stundas. Tomēr precedents bija radīts: pietiek ar vienu cilvēku un vienu vēstuli, lai apdraudētu praktiski visu tīmekļa izstrādes ekosistēmu.
Shai-Hulud: tārps, kas vairojas pats
15. septembrī sākās kas nopietnāks. Shai-Hulud — nosaukts pēc smilšu tārpiem no “Kāpas” — inficētā pakotnē palaiž instalācijas skriptu, ar atvērtā koda rīku TruffleHog skenē upura vidi un savāc npm marķierus, GitHub, AWS un GCP atslēgas, publicē tās publiskā GitHub repozitorijā un tad ar nozagto npm marķieri pats izplata inficētas versijas visām upura uzturētajām pakotnēm. Katrs inficētais izstrādātājs automātiski kļūst par nākamo izplatītāju — klasisks tārps, tikai pakotņu reģistrā.
ASV kiberdrošības aģentūra CISA 23. septembrī izdeva oficiālu brīdinājumu; pirmais vilnis skāra vairāk nekā 500 pakotņu. Novembrī sekoja “Shai-Hulud 2.0”: pēc Wiz un Unit 42 datiem tika inficētas vismaz 796 pakotnes 1092 versijās, bet nozagto noslēpumu repozitoriju skaits pārsniedza 25 000, aptverot aptuveni 350 lietotāju kontus. Otrā versija kodu izpildīja jau preinstall fāzē — tātad ne tikai izstrādātāju datoros, bet arī CI/CD konveijeros, kur atslēgu ir visvairāk.
xz mācība: uzbrucējs var būt arī uzturētājs
Ja npm uzbrukumi balstās kontu zādzībā, tad 2024. gada XZ Utils incidents (CVE-2024-3094) parādīja vēl tumšāku scenāriju. Persona ar pseidonīmu Jia Tan gandrīz divus gadus godprātīgi palīdzēja pārslogotajam projekta uzturētājam, izpelnījās uzticību, ieguva uzturētāja tiesības un tad kompresijas bibliotēkā iebūvēja aizmugurējās durvis, kas mērķēja uz SSH serveriem praktiski katrā Linux distribucijā. Katastrofu novērsa nejaušība: Microsoft inženieris Andress Freinds pamanīja, ka SSH pieteikšanās aizņem par aptuveni pussekundi ilgāk nekā ierasts, un sāka rakt dziļāk.
“XZ Utils aizmugurējās durvis, iespējams, nav izolēts gadījums,” pēc incidenta kopīgā paziņojumā brīdināja OpenSSF un OpenJS fondi, atklājot, ka līdzīgi sociālās inženierijas mēģinājumi vērsti arī pret populāriem JavaScript projektiem.
Mācība nav “neuzticies nevienam” — bez uzticēšanās atvērtais kods nepastāvētu. Mācība ir tāda, ka uzticēšanās jāpapildina ar pārbaudi: parakstītām publikācijām, izcelsmes pierādījumiem un procesiem, kur viens nozagts konts nevar sagraut visu ķēdi.
kas mainās 2026. gadā: npm, GitHub un ES noteikumi
GitHub, kam pieder npm reģistrs, pēc rudens uzbrukumiem sāka lielāko drošības pārbūvi reģistra vēsturē. Jau 2025. gada 29. septembrī tika saīsināts publicēšanas marķieru derīguma termiņš un sākta klasisko marķieru izņemšana no aprites. 2026. gada maijā visām pakotnēm kļuva pieejama pakāpeniskā publicēšana (staged publishing): jauna versija nekļūst publiski lejupielādējama, kamēr cilvēks to nav apstiprinājis ar 2FA. Uzturētājiem CI/CD vidēs tiek ieteikta uzticamā publicēšana (trusted publishing) ar īslaicīgiem OIDC marķieriem — bez ilgtermiņa atslēgām, ko nozagt. Savukārt šī gada jūlijā GitHub paziņoja, ka npm 12 pēc noklusējuma atslēdz pakotņu instalācijas skriptus — tieši to mehānismu, ar kuru izplatījās Shai-Hulud. No 2027. gada janvāra arī 2FA apiešanas marķieri zaudēs tiesības publicēt tieši.
Eiropa pa to laiku nosaka termiņus. ES Kiberizturības akts (CRA) no 2026. gada 11. septembra — tātad jau pēc diviem mēnešiem — prasīs ražotājiem un atvērtā koda pārvaldniekiem ziņot par aktīvi izmantotām ievainojamībām 24 stundu laikā, bet pilnās prasības stāsies spēkā 2027. gada 11. decembrī. Tas attiecas arī uz Latvijas uzņēmumiem, kas pārdod digitālus produktus ES tirgū: piegādes ķēdes higiēna vairs nav laba prakse, bet juridisks pienākums.
ko izstrādātājam darīt jau šodien
Neviens no rudens uzbrukumiem neprasīja nulles dienas ievainojamību — visi izmantoja procesus, kurus var nostiprināt bez maksas:
- Atslēdz instalācijas skriptus.
npm config set ignore-scripts truevai pāreja uz npm 12 / pnpm, kas to dara pēc noklusējuma. Tas apstādina Shai-Hulud tipa tārpus jau pie sliekšņa. - Lieto lockfile un
npm ci— būvē tikai no fiksētām, pārbaudītām versijām, nevis no “jaunākā, kas pieejams”. - Nogaidi ar atjauninājumiem. Abus septembra uzbrukumus atklāja dažu stundu vai dienu laikā; nogaidīšanas periods (piemēram, pnpm
minimumReleaseAgeiestatījums) ļauj kopienai atrast indi, pirms tā nonāk tavā projektā. - Pāriet uz pikšķerēšanai izturīgu 2FA. Septembra uzbrukumā nozaga arī derīgu TOTP kodu — piekļuves atslēgas (passkeys) vai FIDO2 aparatūras atslēgas šādu scenāriju izslēdz.
- Ja uzturi pakotnes — ieslēdz trusted publishing un izdzēs ilgtermiņa marķierus no CI vides mainīgajiem.
- Pēc incidenta rotē visus noslēpumus — npm un GitHub marķierus, mākoņu atslēgas — un pārbaudi, vai tavā GitHub kontā nav parādījušies sveši repozitoriji.
Atvērtais kods šajā krīzē nav vainīgais — tieši caurspīdīguma dēļ mēs vispār zinām, kas notika, līdz pat minūtei precīziem laika zīmogiem. Vainīga ir pieņēmumu kultūra, ka uzticība ir bezmaksas un mūžīga. 2025. gads šo pieņēmumu nogalināja; 2026. gads rāda, kā uzticību būvēt no jauna — ar parakstiem, termiņiem un veselīgu piesardzību.
Avoti
- Unit 42: “Shai-Hulud” Worm Compromises npm Ecosystem — detalizēta tārpa tehniskā analīze un skarto pakotņu apjoms.
- CISA: Widespread Supply Chain Compromise Impacting npm Ecosystem — ASV kiberdrošības aģentūras oficiālais brīdinājums par pirmo vilni.
- Aikido: npm debug and chalk packages compromised — pirmā publiskā trauksme par 8. septembra uzbrukumu ar pilnu laika līniju.
- Wiz: Sha1-Hulud 2.0 Supply Chain Attack — otrā viļņa mērogi: 25 000+ repozitoriju un aptuveni 350 skartie konti.
- Eiropas Komisija: Cyber Resilience Act — ES Kiberizturības akta prasības un ieviešanas termiņi.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.