FlawOpen

flawopen.com/Referencia/Dependency Confusion

Dependency Confusion: cómo se confunden los orígenes de paquetes

High Severity CWE-829: Inclusion of Functionality from Untrusted Control Sphere Cadena de suministro de software
ELI5 — El proveedor con un nombre parecido

Imagina que tu equipo pide un componente en un catálogo de proveedores, pero dos proveedores usan el mismo nombre de producto. Si las reglas no identifican al proveedor autorizado, la compilación puede recibir un componente inesperado. Dependency Confusion es este fallo de selección de origen: la compilación resuelve un paquete desde un registro o espacio de nombres en el que la organización no pretendía confiar.

Boundary: Nombre del paquete, espacio de nombres, configuración del registro y procedencia del lockfile
Failure: El resolvedor puede obtener desde un origen no previsto un paquete con el mismo nombre
Impact: Puede entrar código de terceros no revisado; los scripts de instalación pueden ejecutarse si están habilitados
Remediation: Política explícita de espacio de nombres y registro, lockfiles revisados y compilaciones con privilegios mínimos

Cómo ocurre Dependency Confusion

El comportamiento depende del gestor y su configuración. Un caso concreto es pip: su documentación advierte que combinar un --index-url privado con un --extra-index-url público puede permitir que se elija un paquete público con el mismo nombre. npm selecciona un registro según el scope del paquete o su configuración predeterminada; no compara universalmente las versiones privadas y públicas para elegir la mayor. La causa común es una política de origen ambigua. Si se instala el paquete y sus scripts están habilitados, se ejecutan con los permisos disponibles para esa tarea de compilación.

pip.conf y requirements.txt (orígenes ambiguos)Configuración arriesgada
[global]
index-url = https://packages.example.internal/simple
extra-index-url = https://pypi.org/simple

corp-auth-utils
.npmrc y package.json (enrutamiento explícito por scope)Ejemplo reforzado
@corp:registry=https://packages.example.internal/repository/npm/

{
  "dependencies": {
    "@corp/billing-engine": "1.2.0"
  }
}

Una ruta de fallo de Dependency Confusion

Controles de ingeniería defensiva

Explora temas de seguridad y análisis de incidentes relacionados:Directorio de seguridad →

Referencias

Véase también Exposición del socket de Docker: riesgos y defensas Inyección de scripts en GitHub Actions: entradas seguras Cosign GHSA-fx35-mq7g-6g98: bypass de bundle legado