Un ataque a NPM que permite determinar a presenza de paquetes en repositorios privados

Identificouse un fallo en NPM que permite detectar a existencia de paquetes en repositorios pechados. O problema é causado por diferentes tempos de resposta cando se solicita un paquete existente ou inexistente a un terceiro que non ten acceso ao repositorio. Se non hai acceso a ningún paquete nos repositorios privados, o servidor registry.npmjs.org devolve un erro co código "404", pero se existe un paquete co nome solicitado, o erro emítese cun atraso notable. Un atacante pode usar esta función para determinar a presenza dun paquete buscando os nomes dos paquetes mediante dicionarios.

Determinar os nomes de paquetes en repositorios privados pode ser necesario para realizar un ataque de mestura de dependencias que manipule a intersección de nomes de dependencias en repositorios públicos e internos. Sabendo que paquetes internos de NPM están presentes nos repositorios corporativos, un atacante pode colocar paquetes cos mesmos nomes e números de versión máis recentes no repositorio público de NPM. Se durante a montaxe as bibliotecas internas non están ligadas explícitamente ao seu repositorio na configuración, o xestor de paquetes npm considerará que o repositorio público é unha prioridade superior e descargará o paquete preparado polo atacante.

GitHub foi notificado do problema en marzo, pero non quixo engadir protección contra o ataque, citando limitacións arquitectónicas. Recoméndase ás empresas que utilicen repositorios privados comprobar periodicamente a aparición de nomes superpostos no repositorio público ou crear stubs no seu nome con nomes que repiten os nomes dos paquetes en repositorios privados, para que os atacantes non poidan colocar os seus paquetes con nomes superpostos.

Fonte: opennet.ru

Engadir un comentario