Um ataque ao NPM que permite determinar a presença de pacotes em repositórios privados

Foi identificada uma falha no NPM que permite detectar a existência de pacotes em repositórios fechados. O problema é causado por diferentes tempos de resposta ao solicitar um pacote existente e inexistente de um terceiro que não tem acesso ao repositório. Se não houver acesso para nenhum pacote em repositórios privados, o servidor Registry.npmjs.org retorna um erro com o código “404”, mas se existir um pacote com o nome solicitado, o erro é emitido com um atraso perceptível. Um invasor pode usar esse recurso para determinar a presença de um pacote pesquisando nomes de pacotes usando dicionários.

Determinar nomes de pacotes em repositórios privados pode ser necessário para executar um ataque de mistura de dependências que manipula a interseção de nomes de dependências em repositórios públicos e internos. Sabendo quais pacotes NPM internos estão presentes nos repositórios corporativos, um invasor pode colocar pacotes com os mesmos nomes e números de versão mais recentes no repositório NPM público. Se durante a montagem as bibliotecas internas não estiverem explicitamente vinculadas ao seu repositório nas configurações, o gerenciador de pacotes npm considerará o repositório público de maior prioridade e fará o download do pacote preparado pelo invasor.

O GitHub foi notificado sobre o problema em março, mas se recusou a adicionar proteção contra o ataque, citando limitações arquitetônicas. Recomenda-se que empresas que utilizam repositórios privados verifiquem periodicamente o aparecimento de nomes sobrepostos no repositório público ou criem stubs em seu nome com nomes que repetem os nomes de pacotes em repositórios privados, para que os invasores não possam colocar seus pacotes com nomes sobrepostos.

Fonte: opennet.ru

Adicionar um comentário