GitHub reforça segurança do npm na v12: scripts de instalação desativados por padrão
Aprofundamento CEVIU
Aprofundamento
O npm v12 não é só uma atualização de segurança, é uma redefinição do modelo de confiança no ecossistema Node.js. A desativação padrão de preinstall, install e postinstall fecha a maior superfície de execução de código não auditado no ciclo de instalação, incluindo builds nativos acionados por binding.gyp. Isso ataca diretamente vetores usados em ataques recentes como o Miasma/Phantom Gyp e o Mini Shai-Hulud, que exploravam arquivos de build sem scripts explícitos no package.json. Também bloqueia resoluções via Git e URLs remotas por padrão, um movimento crítico após casos como o sequestro do Axios, onde um tarball HTTPS malicioso foi injetado via dependência transitiva.
A mudança exige que times de engenharia deixem de confiar em 'funciona porque sempre funcionou'. Agora, cada script autorizado precisa ser declarado com "scripts": {"allowScripts": ["@playwright/test", "electron"]} no package.json, ou via npm approve-scripts. O aviso prévio no npm 11.16+ permite auditar com --dry-run antes da migração, mas ignorar isso significa falhas silenciosas em CI/CD ao tentar instalar Puppeteer ou Electron sem permissão explícita.
O que mudou
A cobertura anterior de 12 de junho já antecipava a desativação dos scripts de instalação, mas a notícia atual revela o escopo completo: agora são três vetores bloqueados por padrão (scripts, Git, URLs remotas), não apenas os scripts. Também há novidades operacionais concretas, como a introdução de npm approve-scripts --allow-scripts-pending para geração de allowlists auditáveis, e a exigência de package.json como único local válido para declarar permissões (não mais .npmrc ou flags CLI). Isso consolida o que era rumour em política de execução explícita, com suporte técnico real na CLI.
Por que isso importa
Para equipes de DevOps, isso muda a forma como pipelines de CI/CD validam dependências. Um npm install que antes rodava sem erros agora pode falhar se um pacote de teste usar postinstall para baixar binários. Isso obriga revisão de todos os prepare e build em dependências transitivas, algo que ferramentas como npm ls --all --depth=5 + grep -i 'script' ajudam a mapear. Para SREs, reduz riscos de execução não intencional em ambientes de build, alinhando com práticas de zero-trust em infraestrutura como código. E para arquitetos de segurança, é o primeiro passo concreto para tornar o node_modules um diretório *leve*, não mais um ponto de entrada para RATs multiplataforma.
Linha do tempo
CEVIU analisa ataques pós-Axios e riscos de ranges de versão na cadeia de suprimentos
GitHub anuncia publicação staged com 2FA obrigatório para novas versões de pacotes npm
Lançamento dos controles de instalação em tempo real para consumidores e mantenedores
CEVIU antecipa desativação de scripts preinstall/install/postinstall no npm v12
GitHub detalha escopo completo da v12: bloqueio padrão de scripts, Git e URLs remotas
Perguntas frequentes
Meu projeto usa Puppeteer e Electron. Como faço para não quebrar o CI depois da atualização?
Adicione-os à allowlist no package.json: "scripts": {"allowScripts": ["puppeteer", "electron"]}. Depois, execute npm approve-scripts para gerar o arquivo .npm-scripts-allowlist e commitá-lo. Evite flags CLI, elas não são reconhecidas em ambientes de CI/CD isolados.
O que acontece com pacotes que dependem de <code>binding.gyp</code> mas não têm scripts no <code>package.json</code>?
Eles serão bloqueados mesmo assim. A v12 trata qualquer uso de node-gyp (incluindo builds implícitas acionadas por binding.gyp) como execução de script. Você precisa listar o pacote na allowlist, não basta ter um gypfile válido.
Posso continuar usando <code>npm install git+https://...</code>?
Não, por padrão. A flag --allow-git será none. Se for estritamente necessário, use npm install --allow-git=git+https://exemplo.com/repo.git ou declare no .npmrc com allow-git=git+https://exemplo.com. Mas lembre-se: isso expõe seu ambiente a código não auditado em tempo de instalação.
Essa mudança afeta apenas projetos open source ou também empresas privadas?
Afeta todos os projetos que usam npm v12, independentemente do tipo de repositório. Empresas com monorepos internos que usam dependências via Git ou tarballs HTTPS precisarão adaptar seus workflows de build e CI/CD, especialmente se usam lerna ou pnpm workspace com resolução dinâmica.
Fontes
- theregister.comfonte original
- Categoria
- CEVIU DevOps
- Publicado
- 15 de junho de 2026
- Editoria
- CEVIU DevOps
