recentemente, o github publicou um aviso técnico, confirmando oficialmente que o npm v12 introduzirá uma série de mudanças importantes na política de segurança — essas atualizações não são simples iterações de funcionalidades, mas sim medidas proativas de defesa contra riscos na cadeia de suprimentos. os desenvolvedores devem avaliar imediatamente como seus projetos existentes dependem de scripts automatizados e de dependências remotas, realizando as adaptações necessárias com antecedência; caso contrário, após a ativação completa do v12, os processos de build serão interrompidos, as dependências deixarão de ser instaladas e até mesmo pipelines de ci/cd poderão falhar, enquanto ambientes de desenvolvimento local podem ficar paralisados.
a revisão central dos mecanismos de segurança no npm v12 concentra-se em três pontos-chave de controle:
1. desativação padrão da execução de scripts (allow-scripts = false)
o comando `npm install` deixará de executar automaticamente quaisquer scripts de ciclo de vida, incluindo `preinstall`, `install`, `postinstall`, bem como fluxos de compilação implícitos do `node-gyp` — mesmo que exista apenas um arquivo `binding.gyp`, ele será bloqueado. o script `prepare` também está sujeito a essa restrição. quaisquer scripts que precisem ser executados deverão ser explicitamente autorizados: primeiro identificando pacotes pendentes de revisão com `npm approve-scripts --allow-scripts-pending`, depois adicionando-os à lista branca individualmente via `npm approve-scripts
kg>` ou colocando-os na lista negra com `npm deny-scripts
kg>`. os registros de autorização serão armazenados permanentemente no campo `scripts-allowlist` do `package.json`, sendo altamente recomendável incluir essas entradas em commits gerenciados por controle de versão.
2. bloqueio padrão de dependências git (--allow-git = none)
todas as dependências obtidas por protocolos git — como `git+ssh://` ou `git+https://` — sejam declaradas diretamente ou transitivamente, deixarão de ser resolvidas. para habilitar, é necessário adicionar explicitamente a flag `--allow-git`, com suporte a configurações granulares, como `--allow-git=github.com`.
3. desativação padrão do acesso a recursos remotos (--allow-remote = none)
tarballs http(s) e pacotes hospedados remotamente em cdns ou repositórios privados — como `https://example.com/pkg.tgz` — passam a ser totalmente proibidos. para permitir esse tipo de acesso, os desenvolvedores devem especificar explicitamente `--allow-remote` e ainda podem restringir o acesso definindo uma lista branca de domínios.
essa transformação aborda diretamente o cenário de ameaças cada vez mais grave enfrentado pela cadeia de suprimentos do ecossistema npm. recentemente, o grupo sandworm lançou um worm batizado de “sandworm”, que já infectou milhares de pacotes públicos ao explorar o roubo de credenciais para realizar movimentação lateral entre repositórios, apresentando forte capacidade de furtividade e propagação rápida. o modelo de “negação por padrão, autorização explícita” introduzido no v12 devolve essencialmente o controle sobre a execução aos desenvolvedores: mesmo que um pacote não autorizado seja comprometido, seus scripts maliciosos de `preinstall` não poderão ser acionados automaticamente, rompendo fundamentalmente a cadeia de injeção de payloads e aumentando significativamente a resiliência geral do ecossistema frente a ataques.