Em resposta a uma onda recente de ataques à cadeia de suprimentos mirando o ecossistema NPM, o GitHub anunciou que scripts de dependências não serão mais executados por padrão.
Vários incidentes graves ocorridos nos últimos meses, principalmente associados ao TeamPCP e ao verme auto-replicante Shai-Hulud, têm abusado da execução automática e padrão de scripts de dependências durante o npm install para infectar milhares de desenvolvedores com malware.
Para proteger melhor os usuários, a partir da versão 12 do NPM, que deve chegar em julho, a execução de scripts será bloqueada por padrão, anunciou o GitHub.
“npm install não executará mais scripts preinstall, install ou postinstall de dependências, a menos que sejam explicitamente permitidos em seu projeto”, explica a plataforma de compartilhamento de código.
Impacto em builds nativos e dependências
A mudança também afetará builds nativos do node-gyp, como pacotes que possuem um binding.gyp e nenhum script de instalação explícito, bem como scripts prepare de dependências git, arquivo e link. Os recentes ataques Shai-Hulud Miasma dependiam de um arquivo binding.gyp weaponizado.
Para verificar como a próxima mudança afetará seus projetos, desenvolvedores podem executar npm approve-scripts –allow-scripts-pending e permitir os pacotes nos quais confiam e bloquear o restante, para obter uma lista de permissão que é escrita no package.json.
Uma vez que o JSON seja commitado, desenvolvedores usando NPM versão 11.16.0 ou superior receberão avisos se sua rotina de instalação executar scripts.
Dependências Git e URLs remotas
Além disso, o GitHub explica que dependências Git (diretas ou transitivas) não serão mais resolvidas no npm install, a menos que explicitamente permitidas.
“Isso fecha um caminho de execução de código onde o .npmrc de uma dependência Git poderia sobrescrever o executável Git, mesmo com –ignore-scripts”, observa a plataforma.
Da mesma forma, dependências de URLs remotas não serão mais resolvidas na versão 12 do NPM. Isso inclui tarballs HTTPS (diretas ou transitivas), mas desenvolvedores podem permiti-las através da flag –allow-remote, disponível desde a versão 11.15.0.
Orientações para desenvolvedores
“Atualize para NPM 11.16.0 ou posterior, execute sua instalação normal e revise os avisos. Use npm approve-scripts –allow-scripts-pending para ver quais pacotes têm scripts, aprove os que você confia e faça commit do package.json atualizado. Depois disso, apenas os scripts que você aprovou continuarão a ser executados quando você atualizar”, orienta o GitHub.