La vulnerabilidad conocida como «confusión de dependencias» es un tipo de riesgo que afecta a proyectos y aplicaciones que utilizan sistemas de administración de paquetes. Esta vulnerabilidad surge cuando el sistema no cuenta con mecanismos adecuados para evitar la confusión entre las dependencias internas y externas.
Funcionamiento del ataque
El ataque se basa en la publicación de un paquete con el mismo nombre que una dependencia interna utilizada por el proyecto, pero lo hace en un repositorio público. Cuando el sistema de administración de paquetes busca e instala las dependencias, puede descargarse y instalarse inadvertidamente el paquete malicioso en lugar del paquete legítimo.
Administradores de paquetes afectados
Se ha confirmado que los siguientes sistemas de administración de paquetes están afectados:
- MNP
- RubyGems
- PyPi
- JFrog
- NuGet
Ejemplo práctico en Python/PyPi
En un caso específico, se ha demostrado que la vulnerabilidad puede afectar a proyectos que utilizan el sistema PyPi. Por ejemplo, un archivo requirements.txt típico puede incluir dependencias como:
defusedxml
banditbeautifulsoup4
flask
flask-auth-company-name
Esta configuración es vulnerable a la confusión de dependencias porque flask-auth-company-name es una dependencia local que no se espera que exista en el repositorio remoto.
Mecanismo del ataque
El atacante puede cargar un paquete malicioso con ese nombre, asegurándose de que tenga un número de versión más alto que el del paquete local. La próxima vez que se ejecute el proceso de compilación, el paquete malicioso se descargará del repositorio y se usará en lugar del paquete legítimo.
Este tipo de ataque puede considerarse una variante de ataque a la cadena de suministro.