No NPM, foi identificada uma falha que permite determinar a existência de pacotes em repositórios privados. O problema é causado por diferentes tempos de resposta ao consultar um pacote existente e um inexistente por um usuário externo que não tem acesso ao repositório. Na ausência de acesso a qualquer pacote em repositórios privados, o servidor registry.npmjs.org retorna um erro com código '404', mas no caso da existência de um pacote com o nome solicitado, o erro é retornado com um atraso significativo. Um atacante pode usar essa peculiaridade para determinar a presença de um pacote ao tentar nomes de pacotes a partir de dicionários.
A identificação de nomes de pacotes em repositórios privados pode ser necessária para realizar um ataque por meio do 'dependency confusion', manipulando a interseção de nomes de dependências em repositórios públicos e internos. Sabendo quais pacotes NPM internos estão presentes em repositórios corporativos, um atacante pode publicar pacotes com os mesmos nomes e versões mais recentes em um repositório público NPM. Se, durante a construção, as bibliotecas internas não forem explicitamente vinculadas em suas configurações ao seu repositório, o gerenciador de pacotes npm considerará o repositório público como de maior prioridade e irá baixar o pacote preparado pelo atacante.
O GitHub foi notificado sobre o problema em março, mas se recusou a implementar proteção contra o ataque, citando limitações arquitetônicas. As empresas que utilizam repositórios privados são aconselhadas a monitorar periodicamente a emergência de nomes sobrepostos em repositórios públicos ou a criar, em seu nome, 'stubs' com nomes que repetem os nomes de pacotes em repositórios privados, para que os invasores não possam publicar seus pacotes com nomes sobrepostos.
Fonte: opennet.ru
