GitHub schakelt npm uit. Installeer scripts standaard om aanvallen op de supply chain te stoppen

GitHub heeft aangekondigd dat er “brekende veranderingen” komen voor npm versie 12, waarvan er één standaard de installatiescripts uitschakelt om bedreigingen voor de softwaretoeleveringsketen te bestrijden.

De wijzigingen zijn bedoeld om aanvalstechnieken te bestrijden die misbruik maken van de opdracht ‘npm install’ om de uitvoering van kwaadaardige code te activeren met behulp van npm lifecycle hooks. “Npm install” wordt gebruikt om alle benodigde afhankelijkheden voor een Node.js-project te downloaden en te installeren. Versie 12 staat gepland voor volgende maand.

GitHub beschrijft levenscyclusscripts tijdens de installatie als het ‘grootste code-uitvoeringsoppervlak in het npm-ecosysteem’ en zegt dat het commando ‘npm install’ scripts uitvoert vanuit elke transitieve afhankelijkheid, waardoor een enkel gecompromitteerd pakket waar dan ook in de afhankelijkheidsboom willekeurige code kan uitvoeren op een ontwikkelaarsmachine of CI-runner.

Door dergelijk gedrag te blokkeren, is het idee om expliciete goedkeuring van de gebruiker te vereisen voordat de uitvoering van de code automatisch wordt gestart tijdens “npm install”, in plaats van dat deze standaard wordt vertrouwd. “Door scriptuitvoering opt-in te maken, wordt dat pad gesloten terwijl het één commando verwijderd blijft voor de pakketten die je vertrouwt”, aldus GitHub.

De wijzigingen staan ​​hieronder vermeld –

  • npm install voert niet langer preinstall-, install- of postinstall-scripts uit vanuit afhankelijkheden, tenzij deze expliciet zijn toegestaan ​​in het project.
  • npm install zal niet langer Git-afhankelijkheden oplossen, zowel direct als transitief, tenzij expliciet toegestaan ​​via –allow-git.
  • npm install lost niet langer de afhankelijkheden van externe URL’s op, zoals https-tarballs, tenzij expliciet toegestaan ​​via –allow-remote.

“Dit omvat native node-gyp-builds (dat wil zeggen, een pakket met een binding.gyp en geen expliciet installatiescript wordt nog steeds geblokkeerd, omdat npm er een impliciete node-gyp-rebuild voor uitvoert)”, zei de dochteronderneming van Microsoft over wijzigingen in het standaard “allowScripts” -gedrag. “scripts voorbereiden vanuit git, bestands- en linkafhankelijkheden worden op dezelfde manier geblokkeerd.”

Door “–allow-git” standaard in te stellen op “none”, sluit de instelling een code-uitvoeringspad af waar het gebruikte .npmrc-configuratiebestand van een Git-afhankelijkheid het uitvoerbare bestand van Git zou kunnen overschrijven, zelfs met –ignore-scripts, een vlag die verhindert dat pakketten die zijn gespecificeerd in een package.json-bestand automatisch ingebouwde levenscyclusscripts uitvoeren tijdens het installatieproces.

GitHub raadt ontwikkelaars aan zich op deze veranderingen voor te bereiden door te upgraden naar npm 11.16.0 of nieuwer, de normale installatie uit te voeren en de weergegeven waarschuwingen te bekijken.

“Gebruik npm Approved-scripts –allow-scripts-pending om te zien welke pakketten scripts hebben, keur de pakketten goed die u vertrouwt en commit de bijgewerkte package.json”, voegde het eraan toe. “Daarna blijven alleen de door u goedgekeurde scripts actief zodra u de upgrade uitvoert. Alles wat u niet goedkeurt, stopt.”

Eerder dit jaar introduceerde npm ook ‘min-release-age’, een instelling die npm vertelt om elke pakketversie die minder dan een bepaald aantal dagen is gepubliceerd te weigeren als beveiliging tegen nieuw gepubliceerde kwaadaardige pakketten.

Thijs Van der Does