Confusión de Dependencias
Los paquetes internos privados sin prefijo de scope pueden ser hijackeados publicando un paquete público con el mismo nombre pero mayor versión.
Cómo Funciona
npm resuelve nombres de paquetes sin scope buscando primero en el registro público si no eres explícito. Si tu empresa tiene un paquete privado llamado 'internal-utils' en versión 1.0.0, un atacante publica 'internal-utils' v9.9.9 en el registro público y npm instala el público — con el código del atacante adentro.
// MAL: nombre de paquete privado sin scope es vulnerable a ataques de confusión
{
"dependencies": {
"internal-utils": "1.0.0",
"company-auth": "2.1.0"
}
}// BIEN: siempre usa scope para paquetes privados
{
"dependencies": {
"@miempresa/internal-utils": "1.0.0",
"@miempresa/company-auth": "2.1.0"
}
}Ejemplo Real
En 2021, el investigador de seguridad Alex Birsan publicó un paper demostrando ataques de confusión de dependencias contra Apple, Microsoft, PayPal, Uber y otras 33 empresas. Microsoft le pagó $40,000 en bug bounties por la divulgación.
Cómo Prevenirlo
- Siempre pon scope a los paquetes privados con el nombre de tu organización (@tuempresa/nombre-paquete)
- Configura tu cliente npm para resolver siempre paquetes con scope desde tu registro privado
- Agrega el scope de tu organización a tu .npmrc para prevenir el fallback al registro público
- Audita los archivos package.json en busca de nombres de paquetes internos sin scope
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Typosquatting de Paquetes
highInstalar un paquete con un nombre que difiere por un caracter de una librería popular puede instalar malware en vez del paquete real.
Paquetes Abandonados
mediumLas dependencias que no han sido actualizadas en 2+ años no recibirán parches de seguridad cuando se descubran nuevas vulnerabilidades.
Scripts de Instalación Maliciosos
highLos scripts postinstall de npm se ejecutan automáticamente con los permisos de tu sistema durante npm install, convirtiéndolos en un vector común de malware.
Lockfile Faltante
mediumSin un lockfile, npm install resuelve la versión compatible más reciente de cada dependencia — lo que puede introducir un paquete comprometido en tu próximo deploy.