Dependency Confusion
Confusión de Dependencias
Descripción
La confusión de dependencias o ataque de sustitución es una nueva técnica de ataque que puede conducir a la ejecución remota de código. El ataque normalmente afecta a los entornos de compilación, los pipelines CI/CD y las estaciones de trabajo de los desarrolladores.
En la mayoría de los lenguajes de programación, los sistemas de gestión de paquetes externos están disponibles para obtener dependencias de terceros.
Los gestores de paquetes suelen ofrecer la posibilidad de desplegar repositorios privados para alojar paquetes de uso exclusivamente interno.
Durante el proceso de compilación, el gestor de paquetes no prioriza los repositorios privados, sino los que tienen la versión más alta. Este comportamiento puede ser aprovechado por un atacante creando un paquete malicioso en el repositorio público y utilizando una versión lo suficientemente alta para garantizar que el paquete malicioso sea el que se utiliza durante el tiempo de compilación.
Recomendación
Al gestionar las dependencias del proyecto, es esencial aprovechar los paquetes con ámbito (scoped packages) para una mejor organización y seguridad. En el caso de NPM, siga estos pasos para crear un paquete con ámbito, configurar un registro con ámbito, evitar la toma de control del ámbito y definir las dependencias de manera efectiva:
1. Crear un Scoped Package:
Si aún no lo ha hecho, cree un paquete con ámbito para su proyecto. Puede hacerlo siguiendo las instrucciones:
- En la página "Sign In" de npm, introduzca los detalles de su cuenta y haga clic en Sign In.
- En la esquina superior derecha de la página, haga clic en su foto de perfil y, a continuación, haga clic en Add an Organization.
- En la página de creación de la organización, en el campo Name, escriba un nombre para su organización. El nombre de su organización también será el ámbito de su organización.
- Debajo del campo Name, elija el plan de pago "Unlimited private packages" o el plan gratuito "Unlimited public packages" y haga clic en Buy o Create.
- (Opcional) En la página de invitación de la organización, escriba el nombre de usuario de npm o la dirección de correo electrónico de una persona a la que le gustaría añadir a su organización como miembro y seleccione un equipo al que invitarla, luego haga clic en Invite.
- Haga clic en Continue.
2. Configurar Scoped Registry:
Configure su registro con ámbito añadiendo la siguiente línea a su archivo .npmrc:
@[ORG]:registry = https://reg.[ORG].internal/
3. Prevenir Scope Takeover:
Asegúrese de que el ámbito que pretende utilizar (@ORG) esté protegido y no pueda ser tomado por un atacante. Esto incluye verificar la propiedad y mantener el control sobre la organización o la cuenta de usuario asociada.
4. Definir dependencias:
Defina las dependencias dentro de su archivo package.json, asegurándose de utilizar el ámbito definido anteriormente. Por ejemplo:
{
"name": "@org/dep1",
"version": "1.2.3",
"description": "Scoped dependency 1",
"dependencies": {
"@ostorlab/dep2": "1.2.3"
}
}
Siguiendo estos pasos prácticos, puede utilizar eficazmente los paquetes con ámbito, garantizar la configuración del registro y mitigar el riesgo de toma de control del ámbito por entidades no autorizadas.
Enlaces
- Microsoft warns enterprises of new 'dependency confusion' attack technique
- Dependency Confusion: How I Hacked Into Apple, Microsoft and Dozens of Other Companies
- Avoiding npm substitution attacks
Estándares
- OWASP_MASVS_L1:
- MSTG_CODE_5
- OWASP_MASVS_L2:
- MSTG_CODE_5
- PCI_STANDARDS:
- REQ_2_2
- REQ_6_2
- REQ_6_3
- REQ_11_3
- OWASP_MASVS_v2_1:
- MASVS_CODE_3
- SOC2_CONTROLS:
- CC_2_1
- CC_4_1
- CC_4_2
- CC_6_6
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5
- CC_8_1
- CC_9_1