GitHub Fortalece o npm Contra Ataques à Cadeia de Suprimentos com Bloqueio Padrão de Scripts
Em uma medida significativa para fortalecer a segurança da cadeia de suprimentos de software, o **GitHub** está implementando 'mudanças disruptivas' no **npm** versão 12, com lançamento previsto para o próximo mês. A atualização desabilitará a execução automática de scripts de instalação por padrão, abordando diretamente um vetor de ataque crítico abusado por pacotes maliciosos.
A segurança da cadeia de suprimentos de software tornou-se uma preocupação primordial para profissionais de segurança de TI, com o gerenciador de pacotes do **npm** sendo um alvo frequente. O **GitHub**, guardião do **npm**, está tomando medidas decisivas para mitigar esses riscos, introduzindo 'mudanças disruptivas' na próxima versão 12 do **npm**.

### Desabilitando Scripts de Instalação por Padrão
A essência da atualização reside em desativar os scripts de instalação por padrão. Essa mudança combate diretamente técnicas de ataque que utilizam o comando `npm install` para acionar a execução de código malicioso através dos hooks de ciclo de vida do **npm**. O **GitHub** identificou os scripts de ciclo de vida no momento da instalação como a "maior superfície de execução de código no ecossistema **npm**".
Atualmente, `npm install` executa scripts de cada dependência transitiva, o que significa que um único pacote comprometido em qualquer lugar na árvore de dependências pode executar código arbitrário na máquina de um desenvolvedor ou no runner de CI. Ao bloquear esses comportamentos, o **npm** agora exigirá aprovação explícita do usuário antes que a execução do código seja iniciada automaticamente durante a instalação.
### Principais Mudanças no npm v12
As próximas mudanças são abrangentes e visam vários vetores de ataque comuns:
* `npm install` não executará mais scripts `preinstall`, `install` ou `postinstall` de dependências, a menos que sejam explicitamente permitidos no projeto.
* `npm install` não resolverá mais dependências **Git**, sejam diretas ou transitivas, a menos que explicitamente permitido via `--allow-git`.
* `npm install` não resolverá mais dependências de URLs remotas, como tarballs `https`, a menos que explicitamente permitido via `--allow-remote`.
Isso também se estende a compilações nativas `node-gyp`, onde um pacote com um `binding.gyp` mas sem um script de instalação explícito ainda será bloqueado, pois o **npm** executa implicitamente um `node-gyp rebuild` para ele. Da mesma forma, scripts `prepare` de dependências **Git**, de arquivo e de link serão bloqueados.
### Mitigando Exploits de Dependências Git
Ao definir `--allow-git` como `none` por padrão, o **GitHub** fecha um caminho crucial de execução de código onde um arquivo de configuração `.npmrc` de uma dependência **Git** poderia substituir o executável **Git**. Essa vulnerabilidade existia mesmo com o flag `--ignore-scripts`, que foi projetado para impedir que pacotes executassem automaticamente scripts de ciclo de vida integrados durante a instalação.
### Preparação do Desenvolvedor e Melhores Práticas
O **GitHub** recomenda que os desenvolvedores se preparem para essas mudanças atualizando para o **npm** 11.16.0 ou mais recente. Após a atualização, os desenvolvedores devem executar uma instalação normal e revisar quaisquer avisos exibidos. O fluxo de trabalho recomendado é usar `npm approve-scripts --allow-scripts-pending` para identificar pacotes com scripts, aprovar os confiáveis e, em seguida, confirmar o `package.json` atualizado.
Apenas scripts explicitamente aprovados continuarão a ser executados após a atualização, enquanto scripts não aprovados serão bloqueados. Essa mudança de confiança implícita para aprovação explícita aumenta significativamente a postura de segurança do ecossistema **npm**.
No início deste ano, o **npm** também introduziu `min-release-age`, uma configuração projetada para rejeitar qualquer versão de pacote publicada menos de um número especificado de dias. Isso atua como uma salvaguarda adicional contra pacotes maliciosos recém-publicados, fortalecendo ainda mais a cadeia de suprimentos de software.