Desenvolvido por um um pesquisador de segurança, uma nova ferramenta verifica se pacotes NPM tem manifest confusion.
Na semana passada, um ex-gerente de engenharia do GitHub e NPM, Darcy Clarke, alertou sobre problemas de “confusão manifesta” que podem apresentar o risco de malware se esconder em dependências ou executar scripts durante a instalação.
Manifest confusion (Confusão manifesta) refere-se a um problema de segurança no NPM (Node Package Manager), um gerenciador de pacotes para a linguagem de programação JavaScript e padrão para o ambiente Node.js.
O problema está nas informações inconsistentes entre os dados do manifesto de um pacote exibidos no registro do NPM e os dados presentes no arquivo ‘package.json’ do pacote publicado.
Um agente mal-intencionado pode manipular os dados do manifesto de um novo pacote, eliminando determinados scripts ou dependências para que não apareçam no registro do NPM.
No entanto, esses scripts ou dependências ainda estariam presentes no arquivo package.json e seriam executados quando o pacote fosse instalado, sem que o usuário soubesse.
Esse problema potencialmente expõe os desenvolvedores a riscos, como envenenamento de cache, instalação de dependências desconhecidas, execução de scripts desconhecidos e possivelmente até ataques de downgrade.
Agora, um pesquisador de segurança e administrador de sistema desenvolveu uma ferramenta que pode ajudar os usuários a verificar incompatibilidades de manifesto em pacotes do registro de software NPM JavaScript.
Nova ferramenta verifica se pacotes NPM tem manifest confusion
Como o GitHub ainda não resolveu o problema e não está claro o que a plataforma planeja fazer, Clarke sugeriu que os mantenedores de pacotes removessem a dependência de dados manifestos e usassem um proxy de registro para realizar verificações de consistência de dados.
Até que uma solução seja implementada, o administrador de sistemas Felix Pankratz lançou uma ferramenta baseada em Python que pode ajudar os desenvolvedores de software a verificar se há inconsistências nos pacotes NPM.
Para usar a ferramenta, primeiro instale o gerenciador de pacotes PIP Python com “pip install -r requirements.txt
“.
Para inspecionar um único pacote, passe o nome do pacote para o script como o primeiro argumento. Por exemplo:
./npm-manifest-check.py darcyclarke-manifest-pkg
A saída destacará quaisquer incompatibilidades na versão, dependências, scripts e nome do pacote entre o manifesto e o arquivo package.json real.
Para um pacote sem incompatibilidades, a saída deve ser semelhante a esta:
./npm-manifest-check.py cor
Nenhuma incompatibilidade detectada para cores.
Para inspecionar vários pacotes, os desenvolvedores podem adicioná-los a um arquivo ‘packages. list’ (um pacote por linha) e use o script wrapper ‘check_packages.sh’ para verificá-los. A ferramenta relatará quaisquer incompatibilidades encontradas em cada um dos pacotes verificados.
Para entender todos os aspectos do uso da ferramenta do Pankratz, verifique o comando de ajuda com:
./npm-manifest-check.py -h
A confusão manifesta não é um problema generalizado ou crítico na comunidade NPM no momento, mas ignorá-la não é o caminho seguro, pois os agentes de ameaças podem começar a usá-la para ataques à cadeia de suprimentos.