Segurança

GitHub vai desativar scripts de instalação do npm por padrão para combater ataques à cadeia de suprimentos

GitHub anunciou o que classificou como 'mudanças significativas' (breaking changes) na versão 12 do npm (gerenciador de pacotes do Node.js), incluindo a desativação por padrão de scripts de instalação para combater ameaças à cadeia de suprimentos de software. A versão 12 está prevista para ser lançada no próximo mês.


Ravie Lakshmanan Quinta - 11 de Junho de 2026 às 16:13
The Hacker News

O GitHub anunciou o que classificou como 'mudanças significativas' (breaking changes) que virão na versão 12 do npm (gerenciador de pacotes do Node.js), uma das quais desativa scripts de instalação por padrão para combater ameaças à cadeia de suprimentos de software.

As mudanças têm como objetivo combater técnicas de ataque que se apropriam indevidamente do comando 'npm install' para acionar a execução de código malicioso por meio de ganchos de ciclo de vida (lifecycle hooks) do npm. O comando 'npm install' é usado para baixar e instalar todas as dependências necessárias de um projeto Node.js. A versão 12 está prevista para ser lançada no próximo mês.

Descrevendo os scripts de ciclo de vida executados no momento da instalação como a 'maior superfície de execução de código no ecossistema npm', o GitHub afirmou que o comando 'npm install' executa scripts de cada dependência transitiva, razão pela qual um único pacote comprometido em qualquer ponto da árvore de dependências pode rodar código arbitrário na máquina de um desenvolvedor ou em um executor de CI (Integração Contínua).

Ao bloquear esse tipo de comportamento, a ideia é exigir aprovação explícita do usuário antes que a execução de código seja iniciada automaticamente durante o 'npm install', em vez de ser confiável por padrão. 'Tornar a execução de scripts uma ação opt-in fecha esse caminho, mantendo-o a apenas um comando de distância para os pacotes em que você confia', disse o GitHub.

As mudanças estão listadas abaixo:

  • O npm install deixará de executar scripts de preinstall, install ou postinstall de dependências, a menos que sejam explicitamente permitidos no projeto.
  • O npm install deixará de resolver dependências do Git, sejam elas diretas ou transitivas, a menos que sejam explicitamente permitidas por meio de --allow-git.
  • O npm install deixará de resolver dependências a partir de URLs remotas, como tarballs https, a menos que sejam explicitamente permitidas por meio de --allow-remote.

'Isso inclui builds nativos com node-gyp (ou seja, um pacote com um arquivo binding.gyp e sem script de install explícito também será bloqueado, pois o npm executa um node-gyp rebuild implícito para ele)', afirmou a subsidiária pertencente à Microsoft sobre as mudanças no comportamento padrão de 'allowScripts'. 'Os scripts prepare de dependências git, file e link são bloqueados da mesma forma.'

Ao definir '--allow-git' como 'none' por padrão, a configuração elimina um caminho de execução de código no qual o arquivo de configuração .npmrc de uma dependência Git podia ser usado para substituir o executável do Git, mesmo com --ignore-scripts, um sinalizador que impede que pacotes especificados em um arquivo package.json executem automaticamente scripts de ciclo de vida embutidos durante o processo de instalação.

O GitHub recomenda que os desenvolvedores se preparem para essas mudanças atualizando para o npm 11.16.0 ou versão mais recente, executando a instalação normal e revisando os avisos exibidos.

'Use npm approve-scripts --allow-scripts-pending para ver quais pacotes têm scripts, aprove aqueles em que você confia e confirme o package.json atualizado', acrescentou. 'Depois disso, apenas os scripts que você aprovou continuarão sendo executados após a atualização. Tudo que você deixar sem aprovação será interrompido.'

No início deste ano, o npm também introduziu o 'min-release-age', uma configuração que instrui o npm a rejeitar qualquer versão de pacote publicada há menos de um número determinado de dias, como salvaguarda contra pacotes maliciosos recém-publicados.

GitHub npm segurança