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

Se ha identificado una falla en NPM que permite detectar la existencia de paquetes en repositorios cerrados. El problema se debe a diferentes tiempos de respuesta al solicitar un paquete existente y no existente de un tercero que no tiene acceso al repositorio. Si no hay acceso a ningún paquete en repositorios privados, el servidor registra.npmjs.org devuelve un error con el código "404", pero si existe un paquete con el nombre solicitado, el error se emite con un retraso notable. Un atacante puede utilizar esta función para determinar la presencia de un paquete buscando nombres de paquetes mediante diccionarios.

Puede ser necesario determinar los nombres de los paquetes en repositorios privados para realizar un ataque de mezcla de dependencias que manipule la intersección de nombres de dependencias en repositorios públicos e internos. Al saber qué paquetes internos de NPM están presentes en los repositorios corporativos, un atacante puede colocar paquetes con los mismos nombres y números de versión más nuevos en el repositorio público de NPM. Si durante el ensamblaje las bibliotecas internas no están vinculadas explícitamente a su repositorio en la configuración, el administrador de paquetes npm considerará que el repositorio público tiene mayor prioridad y descargará el paquete preparado por el atacante.

GitHub fue notificado del problema en marzo, pero se negó a agregar protección contra el ataque, citando limitaciones arquitectónicas. Se recomienda a las empresas que utilizan repositorios privados comprobar periódicamente la aparición de nombres superpuestos en el repositorio público o crear resguardos en su nombre con nombres que repitan los nombres de los paquetes en los repositorios privados, para que los atacantes no puedan colocar sus paquetes con nombres superpuestos.

Fuente: opennet.ru

Añadir un comentario