npm v12 endurece os scripts por defeito segurança reforçada que poderia quebrar seus builds se você não autorizar cada script

Autor: Publicada 3 min de lectura 294 leituras

As imagens deste artigo foram geradas com inteligência artificial. Como publicamos

O GitHub e a equipe de npm decidiram endurecer o comportamento por defeito do instalador de pacotes: em npm v12 se Desactivar os programas de instalação A resolução de dependências será restringida a partir de repositórios Git ou URLs remotos a menos que o desenvolvedor o autorize explicitamente. A medida procura fechar uma das vias mais exploradas em ataques à cadeia de fornecimento: a execução automática de código durante "npm install" através dos hooks do ciclo de vida (preinstall, install, pós-install e prepare).

A mudança responde a um risco real e frequente: um pacote comprometido em qualquer ponto da cadeia transitória pode executar código na máquina do desenvolvedor ou num runner CI. Muitos projetos, bibliotecas e ferramentas dependem de scripts que correm automaticamente ao instalar dependências, e essa confiança por defeito é o que os atacantes usaram para inserir portas traseiras ou executar payloads maliciosos em ambientes de desenvolvimento e implantação.

npm v12 endurece os scripts por defeito segurança reforçada que poderia quebrar seus builds se você não autorizar cada script
Imagem gerada com IA.

As implicações práticas são duales. Por um lado, melhoria da segurança Ao forçar a aprovação explícita da execução de programas e da resolução de fontes não registadas; por outro, pode romper builds e fluxos de desenvolvimento que hoje dependem de compilações nativas automáticas (node-gyp), prepare scripts desde referências Git, ou pacotes instalados a partir de tarballs remotos. As equipes e projetos que usam dependências com compilação nativa ou referências diretas a repositórios terão que se adaptar.

O GitHub recomenda preparar-se já atualizando o npm 11.16.0 ou superior, executar uma instalação normal e rever as advertências que o npm mostra. A ferramenta oferece um fluxo de aprovação com npm approve-scripts -- allow-scripts-pending, que permite rever, aprovar os programas de confiança e comprometer as alterações ao package.json para que apenas os aprovados continuem a correr depois de subir para npm v12. É uma oportunidade para auditar conscientemente quais pacotes realmente precisam executar código localmente.

Como medidas práticas para reduzir o impacto e melhorar a segurança da sua cadeia de abastecimento, considera o seguinte: teste as alterações em um ramo isolado e no runners da CI antes de migrar; atualiza as imagens ou contentores da CI para incluir a nova versão do npm; evita dependências do Git ou remotas sem justificar e, se necessário, autoriçalas de forma explícita; prioriza o uso de lockfiles e versões fixadas; e trata com especial cuidado os pacotes que realizam compilação nativa (node-gyp), pois npm pode bloquear rebuilds implícitos.

npm v12 endurece os scripts por defeito segurança reforçada que poderia quebrar seus builds se você não autorizar cada script
Imagem gerada com IA.

Além disso, integra controles complementares: habilita a análise de dependências e alertas (por exemplo, Dependabot ou Snyk) para detectar mudanças suspeitas, obriga a verificação humana para mudanças de dependência em pull requests relevantes, habilita 2FA e políticas de publicação no registro npm para os mantenedores, e conserva evidência de procedência com SBOM e assinaturas quando possível. A documentação de boas práticas do GitHub sobre segurança da cadeia de abastecimento é um bom ponto de partida: https://docs.github.com/en/code-security/supply-chain-security.

Para entender exatamente quais programas e comportamentos serão afetados convém ler a documentação oficial do npm sobre programas e lifecycle hooks; isto ajuda a identificar na sua árvore de dependências onde são executados programas e quais você precisa aprovar explicitamente: https://docs.npmjs.com/cli/v12/using-npm/scripts. Use a janela anterior ao lançamento para auditar e reduzir a superfície de ataque: menos scripts confiáveis por defeito = menos risco de execução não autorizada.

Em resumo, npm v12 representa um avanço significativo na proteção da cadeia de fornecimento de JavaScript ao converter uma extensão de confiança tácita em uma permissão explícita. Os equipamentos que adotarem estas medidas com planejamento, testes e controles adicionais reduzirão sua exposição a ataques supply-chain e, ao mesmo tempo, evitarão interrupções inesperadas em seus processos de construção e implantação.

Cobertura

Relacionadas

Mas notícias do mesmo assunto.