programmatūra · 5 min · 13.07.2026

npm 12 pēc noklusējuma vairs nepalaiž instalācijas skriptus

Ar npm 12, ko GitHub laiž klajā jūlijā, komanda npm install vairs automātiski nepalaiž atkarību preinstall, install un postinstall skriptus. Iestatījums allowScripts pēc noklusējuma ir izslēgts, un līdz ar to nedarbojas arī netiešie node-gyp būvējumi. Ja skripts jāpalaiž, tas jāatļauj tieši.

GitHub par gaidāmajām izmaiņām paziņoja 9. jūnijā. Tā ir lielākā drošības pārbūve npm 16 gadu vēsturē, un tā skar katru projektu, kas paļaujas uz to, ka atkarības instalācijas laikā kaut ko izpilda pašas.

Trīs noklusējumi, kas mainās

Izmaiņu ir trīs, un visas slēdz kādu koda izpildes ceļu.

Pirmkārt, allowScripts ir izslēgts. Dzīves cikla skripti un node-gyp būvējumi nepalaižas, kamēr paketi neapstiprini. Tas pats attiecas uz prepare skriptiem no git, file un link tipa atkarībām.

Otrkārt, --allow-git pēc noklusējuma ir none. Git atkarības — gan tiešās, gan pārmantotās — vairs neatrisinās bez tiešas atļaujas. GitHub to skaidro ar to, ka Git atkarības .npmrc fails varēja pārrakstīt, kuru Git izpildāmo failu npm izmanto. Karogs pieejams kopš npm 11.10.0.

Treškārt, --allow-remote arī ir none. Atkarības no attālām URL adresēm (https tarball faili) neatrisināsies bez atļaujas; šis karogs strādā kopš npm 11.15.0. Karogi --allow-file un --allow-directory paliek nemainīgi.

Kāpēc tieši instalācijas skripti

Iemesls ir tas, cik plaši šos skriptus izmanto uzbrucēji. npm install palaiž skriptus no katras pārmantotās atkarības, tāpēc pietiek ar vienu kompromitētu paketi kaut kur atkarību kokā, lai izpildītu patvaļīgu kodu — uz izstrādātāja mašīnas vai CI serverī.

GitHub instalācijas laika dzīves cikla skriptus nosauca par lielāko koda izpildes virsmu visā npm ekosistēmā.

2025. gadā tika publicētas gandrīz 455 000 ļaunprātīgu atvērtā koda pakešu, un kopējais bloķēto skaits pārsniedza 1,23 miljonus. Uzbrukumi neapstājās arī šogad. 11. jūlijā kompromitēts jscrambler laidiens ar slēptu preinstall āķi, kas palaida binārus failus Linux, macOS un Windows; pakete saņem ap 15 800 lejupielāžu nedēļā. Dažas dienas iepriekš uzbrucēji caur uzticama izstrādātāja kontu Injective blokķēdes SDK iepludināja aizmugures durvis, kas maskētas kā analītika un vāca maku atkopšanas frāzes.

Ko darīt pirms atjaunināšanas

GitHub iesaka sagatavoties, nevis gaidīt, kamēr CI konveijers pēkšņi salūzt. Soļi ir šādi.

  • Atjaunini uz npm 11.16.0 vai jaunāku versiju.
  • Palaid parasto instalāciju un izlasi brīdinājumus.
  • Palaid npm approve-scripts --allow-scripts-pending, lai redzētu, kurām paketēm ir skripti.
  • Apstiprini uzticamās ar npm approve-scripts, bloķē pārējās ar npm deny-scripts.
  • Iekļauj atjaunināto package.json versiju kontrolē.

Atļauju saraksts glabājas package.json, tāpēc visa komanda un CI izmanto vienu un to pašu apstiprināto kopu. Praksē lielākajai daļai projektu skriptu ir maz — tie parasti pieder dažām paketēm, kas būvē native moduļus.

Tokeni un publicēšana

Vienlaikus GitHub pakāpeniski atsakās no piekļuves marķieriem, kas apiet divfaktoru autentifikāciju. Augusta sākumā granulārie piekļuves marķieri (GAT), kas konfigurēti apiet 2FA, zaudēs jutīgās konta un pakešu pārvaldības iespējas. No 2027. gada janvāra ar šiem marķieriem vairs nevarēs publicēt tieši — publicēšanai būs vajadzīgs pakāpenisks apstiprinājums ar cilvēka 2FA. GitHub aicina komandas pāriet uz uzticamu publicēšanu caur OIDC, nevis paļauties uz ilgdzīvojošiem publicēšanas marķieriem.

Kas mainās AI aģentiem

Šīs izmaiņas atsevišķi skar automatizētus izstrādes rīkus. AI kodēšanas aģenti, piemēram, Claude Code un Cursor, palaiž instalācijas no rīku izsaukumiem un bieži piespraž versijas no apmācības datiem — vecas versijas, kas kopš tā laika ieguvušas CVE. Ja aģents automātiski palaiž instalāciju ar skriptiem, kompromitēta atkarība izpildās bez cilvēka acs. Ar izslēgtu allowScripts šāda izpilde prasa tiešu apstiprinājumu, kas nozīmē, ka nekontrolēta aģenta instalācija vairs pati par sevi nepalaiž svešu kodu.

Projektiem, kuru būvēšana balstās uz postinstall soļiem, jūlijs būs brīdis, kad kaut kas pārstās strādāt bez sagatavošanās. Karogs --allow-scripts-pending jau pieejams npm 11.16.0, tāpēc pāreju var izmēģināt jau tagad.

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 programmatūrasaistītie