highCWE-830A06:2021

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.

Código Vulnerable
// 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"
  }
}
Código Seguro
// 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

Node.jsPython

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas