npm v12 Fortalece Cadeia de Suprimentos Contra Ataques de 'npm install'
O GitHub está implementando aprimoramentos significativos de segurança com o npm v12 no próximo mês, abordando diretamente a crescente ameaça de ataques à cadeia de suprimentos. A atualização alterará fundamentalmente a forma como o comando 'npm install' opera, exigindo aprovação explícita para execução de código e fontes de dependência fora do registro que antes eram confiáveis por padrão. Esta medida visa reduzir drasticamente os vetores de ataque comumente explorados por atores maliciosos.

O **GitHub** anunciou uma grande reformulação de segurança para o **npm v12**, prevista para lançamento no próximo mês. Essas mudanças são projetadas especificamente para combater ataques à cadeia de suprimentos que exploram comportamentos acionados pelo onipresente comando `'npm install'`.
`'npm install'` é o comando responsável por baixar e instalar as dependências de um projeto e executar quaisquer scripts de instalação associados. Desenvolvedores o utilizam frequentemente após clonar projetos, puxar atualizações ou durante processos de build de CI/CD. Atacantes têm visado este comando há muito tempo devido ao seu potencial de execução automática de código durante a instalação de pacotes.
O princípio central por trás desta atualização é uma mudança de confiança implícita para aprovação explícita para execução de código e fontes de dependência fora do registro durante as operações de `npm install`.
O **GitHub** detalhou as seguintes mudanças principais em seu anúncio:
1. **Restrições de Execução de Script**: A partir do **npm v12**, os scripts `preinstall`, `install` e `postinstall` de dependências não serão mais executados automaticamente, a menos que explicitamente aprovados. Essa restrição também se estende a compilações de módulos nativos iniciadas via **node-gyp** e scripts `prepare` de dependências Git, de arquivos locais e vinculadas.
2. **Resolução de Dependências Git**: O `npm install` deixará de buscar automaticamente dependências de repositórios Git, sejam diretas ou transitivas, sem permissão explícita. O **GitHub** observa que isso fecha um caminho crítico de execução de código onde o arquivo `.npmrc` de uma dependência Git poderia ser manipulado para alterar o executável Git utilizado, mesmo que os scripts de instalação estivessem desativados.
3. **Resolução de Dependências de URL Remoto**: Dependências instaladas de URLs remotas, como tarballs HTTPS, não serão mais resolvidas automaticamente. Isso se aplica a dependências diretas e transitivas.
Espera-se que essas modificações mitiguem significativamente os riscos da cadeia de suprimentos, eliminando a execução automática de scripts de instalação de dependências, a resolução automática de dependências baseadas em Git e a resolução automática de dependências de URL remoto.
Tais novos padrões teriam prevenido vários ataques recentes à cadeia de suprimentos, incluindo campanhas maliciosas de scripts `preinstall`/`postinstall` visando **eslint-config-prettier**, pacotes **Picasso da Toptal** e inúmeros pacotes **npm** de roubo de dados. Eles também teriam combatido o abuso de dependências Git conforme documentado nos ataques **Shai-Hulud**.
Projetos que dependem legitimamente de qualquer um desses comportamentos precisarão optar explicitamente antes de atualizar para o **npm v12**.
O **GitHub** aconselha os desenvolvedores a se prepararem atualizando para o **npm 11.16.0** ou mais recente. Esta versão exibirá avisos para todas as ações que serão impactadas pelo **v12**, permitindo que os desenvolvedores identifiquem e resolvam dependências ou fluxos de trabalho que exijam aprovação explícita antes de fazer a atualização completa.
Uma vez atualizado para o **npm v12**, apenas scripts e fontes de dependência explicitamente aprovados funcionarão automaticamente.
Uma [discussão na comunidade](https://github.com/orgs/community/discussions/198547) foi iniciada para que os desenvolvedores forneçam feedback e sugestões sobre essas mudanças futuras.