Edición de los controles de origen del paquete
En Amazon CodeCatalyst, las versiones de los paquetes se pueden añadir a un repositorio de paquetes publicándolas directamente, retirándolas de un repositorio ascendente o ingiriéndolas desde un repositorio público y externo mediante una puerta de enlace. Si permite que las versiones de un paquete se añadan mediante publicación directa e ingestión desde repositorios públicos, quedará en un estado de vulnerabilidad ante un ataque de sustitución de dependencias. Para obtener más información, consulte Ataques de sustitución de dependencias. Para protegerse de un ataque de sustitución de dependencias, configure los controles de origen de los paquetes de un repositorio para limitar la forma en que se pueden añadir las versiones de ese paquete al repositorio.
Debería valorar la posibilidad de configurar controles de orígenes de paquetes para que las nuevas versiones de diferentes paquetes vengan tanto de orígenes internos, como la publicación directa, como de externos, como los repositorios públicos. De forma predeterminada, los controles de origen de los paquetes se configurarán en función de cómo se añada la primera versión del paquete al repositorio.
Configuración de control de origen del paquete
Con los controles de origen de los paquetes, puede configurar cómo se pueden añadir las versiones de los paquetes a un repositorio. Las siguientes listas incluyen la configuración y los valores de control de origen de los paquetes disponibles.
Publicación
Esta configuración configura si las versiones de los paquetes se pueden publicar directamente en el repositorio mediante administradores de paquetes o herramientas similares.
ALLOW: las versiones de los paquetes se pueden publicar directamente.
BLOCK: las versiones de los paquetes no se pueden publicar directamente.
Repositorios ascendentes
Esta configuración configura si las versiones de los paquetes pueden ingerirse desde repositorios públicos externos o conservarse desde repositorios originales cuando lo solicite un administrador de paquetes.
ALLOW: cualquier versión del paquete se puede conservar de otros repositorios de CodeCatalyst configurados como repositorios ascendentes o se puede ingerir desde un origen público con una conexión externa.
BLOCK: las versiones de los paquetes no se pueden conservar de otros repositorios de CodeCatalyst configurados como repositorios ascendentes ni se pueden ingerir desde un origen público con una conexión externa.
Configuración de control de origen de paquetes predeterminada
Los controles de origen de los paquetes predeterminados se basarán en la forma en que se añada la primera versión de ese paquete al repositorio de paquetes.
Si un administrador de paquetes publica directamente la primera versión del paquete, la configuración será Publish: ALLOW y Upstream: BLOCK.
Si la primera versión del paquete proviene de una fuente pública, los ajustes serán Publish: ALLOW y Upstream: BLOCK.
Escenarios comunes de control de acceso a paquetes
Esta sección describe algunos escenarios comunes cuando se añade una versión de paquete a un repositorio de paquetes de CodeCatalyst. Los ajustes de control de origen del paquete se establecerán para los paquetes nuevos en función de cómo se añada la primera versión del paquete.
En los siguientes escenarios, un paquete interno se publica directamente desde un administrador de paquetes en el repositorio, como un paquete que usted mantenga. Un paquete externo es un paquete que existe en un repositorio público y que puede incorporarse al repositorio mediante una conexión ascendente a un repositorio de puerta de enlace.
Se publica una versión de paquete externo para un paquete interno existente
En este escenario, consideremos un paquete interno, packageA. Su equipo publica la primera versión del paquete packageA en un repositorio de paquetes de CodeCatalyst. Como esta es la primera versión del paquete, la configuración del control de origen del paquete se establece automáticamente en Publish: Allow and Upstream: Block. Cuando el paquete se publica en el repositorio, se publica un paquete con el mismo nombre en un repositorio público que está conectado a su repositorio de paquetes de CodeCatalyst. Podría tratarse de un intento de ataque de sustitución de dependencias contra el paquete interno o podría ser una coincidencia. En cualquier caso, los controles de origen de los paquetes están configurados para bloquear la ingesta de la nueva versión externa y protegerse así de un posible ataque.
En la siguiente imagen, repoA es el repositorio de paquetes de CodeCatalyst con una conexión ascendente al repositorio npm-public-registry-gateway
. Su repositorio contiene las versiones 1.1 y 2.1 de packageA, pero la versión 3.0 está publicada en el repositorio público. Normalmente, repoA ingiere la versión 3.0 después de que un administrador de paquetes solicite el paquete. Como la ingesta de paquetes está configurada como Block, la versión 3.0 no se ingiere en el repositorio de paquetes de CodeCatalyst y no está disponible para los administradores de paquetes conectados a él.
![Gráfico sencillo que muestra el bloqueo de una nueva versión de un paquete externo en un repositorio público.](images/packages/package-origin-controls-one.png)
Se publica una versión de paquete interno para un paquete externo existente
En este escenario, un paquete, packageB, existe externamente en un repositorio público que usted ha conectado a su repositorio. Cuando un administrador de paquetes conectado a su repositorio solicita el packageB, la versión del paquete se introduce en su repositorio desde el repositorio público. Como esta es la primera versión de paquete de packageB que se agrega a su repositorio, los ajustes de origen del paquete están configurados como Publish: BLOCK y Upstream: ALLOW. Más adelante, intenta publicar una versión con el mismo nombre de paquete en el repositorio. Quizá no conozca el paquete público y está intentando publicar un paquete no relacionado con el mismo nombre, quizá está intentando publicar una versión parcheada o quizá está intentando publicar directamente la versión exacta del paquete que ya existe externamente. CodeCatalyst rechazará la versión que intenta publicar, pero le permitirá anular explícitamente el rechazo y publicar la versión si es necesario.
En la siguiente imagen, repoA es el repositorio de paquetes de CodeCatalyst con una conexión ascendente al repositorio npm-public-registry-gateway
. Su repositorio de paquetes contiene la versión 3.0 que ingirió del repositorio público. Quiere publicar la versión 1.2 en el repositorio de paquetes. Normalmente, podría publicar la versión 1.2 en repoA, pero como la publicación está configurada en Block, la versión 1.2 no se puede publicar.
![Gráfico simple que muestra la publicación de paquetes bloqueada.](images/packages/package-origin-controls-two.png)
Publicar una versión parcheada de un paquete externo existente
En este escenario, un paquete, packageB, existe externamente en un repositorio público que usted ha conectado al repositorio de paquetes. Cuando un administrador de paquetes conectado a su repositorio solicita el packageB, la versión del paquete se introduce en su repositorio desde el repositorio público. Como esta es la primera versión de paquete de packageB que se agrega a su repositorio, los ajustes de origen del paquete están configurados como Publish: BLOCK y Upstream: ALLOW. Su equipo decide publicar las versiones de los paquetes parcheados de este paquete en el repositorio. Para poder publicar las versiones de los paquetes directamente, su equipo cambia la configuración del control de origen de los paquetes a Publish: ALLOW y Upstream: BLOCK. Las versiones de este paquete ahora se pueden publicar directamente en su repositorio e ingerir desde los repositorios públicos. Una vez que su equipo publique las versiones de los paquetes parcheados, cambiará la configuración de origen del paquete a Publish: BLOCK and Upstream: ALLOW.
Edición de los controles de origen del paquete
Los controles de origen de los paquetes se configuran automáticamente en función de cómo se añade la primera versión del paquete al repositorio de paquetes. Para obtener más información, consulte Configuración de control de origen de paquetes predeterminada. Para añadir o editar controles de origen de paquetes para un paquete en un repositorio de paquetes de CodeCatalyst, siga los pasos que se indican en el siguiente procedimiento.
Adición o edición de los controles de origen del paquete
-
En el panel de navegación, elija Packages (Paquetes).
-
Elija el repositorio de paquetes que contenga el paquete que desea editar.
-
En la tabla Paquetes, busque y seleccione el paquete que desee editar.
-
En la página de resumen del paquete, seleccione Controles de origen.
-
En Controles de origen, seleccione los controles de origen del paquete que desee configurar para este paquete. Los dos ajustes de control de origen del paquete (Publicar y Ascendente) deben configurarse al mismo tiempo.
-
Para permitir la publicación directa de las versiones de los paquetes, en Publicar, seleccione Permitir. Para bloquear la publicación de versiones de paquetes, seleccione Bloquear.
-
Para permitir la ingesta de paquetes de repositorios externos y la extracción de paquetes de repositorios anteriores, en Recursos ascendentes, seleccione Permitir. Para bloquear la ingestión y extracción de versiones de paquetes desde repositorios externos y ascendentes, seleccione Bloquear.
-
-
Seleccione Guardar.
Repositorios editoriales y originales
En CodeCatalyst no puede publicar versiones de paquetes que estén presentes en repositorios ascendentes o repositorios públicos accesibles. Por ejemplo, supongamos que desea publicar un paquete npm lodash@1.0
en un repositorio (myrepo
), y que myrepo
tiene un repositorio ascendente con una conexión externa a npmjs.com. Considere los siguientes escenarios.
Los ajustes de control de origen de los paquetes de
lodash
son Publish: ALLOW y Upstream: ALLOW. Silodash@1.0
está en el repositorio ascendente o en npmjs.com, CodeCatalyst rechaza cualquier intento de publicación enmyrepo
emitiendo un error de conflicto 409. Aún puede publicar una versión diferente, por ejemplolodash@1.1
.Los ajustes de control de origen de los paquetes de
lodash
son Publish: ALLOW y Upstream: BLOCK. Puede publicar en su repositorio cualquier versión delodash
que aún no exista, porque no se puede acceder a las versiones de los paquetes.Los ajustes de control de origen de los paquetes de
lodash
son Publish: BLOCK y Upstream: ALLOW. No puede publicar ninguna versión del paquete directamente en su repositorio.
Ataques de sustitución de dependencias
Los gestores de paquetes simplifican el proceso de empaquetar y compartir código reutilizable. Estos paquetes pueden ser paquetes privados desarrollados por una organización para usarlos en sus aplicaciones, o pueden ser públicos, generalmente paquetes de código abierto que se desarrollan fuera de una organización y se distribuyen en repositorios de paquetes públicos. Al solicitar paquetes, los desarrolladores confían en su administrador de paquetes para obtener nuevas versiones de sus dependencias. Los ataques de sustitución de dependencias, también conocidos como ataques de confusión de dependencias, aprovechan el hecho de que un administrador de paquetes normalmente no tiene forma de distinguir las versiones legítimas de un paquete de las versiones maliciosas.
Los ataques de sustitución de dependencias pertenecen a un subconjunto de ataques conocidos como ataques a la cadena de suministro de software. Un ataque a la cadena de suministro de software es un ataque que aprovecha las vulnerabilidades en cualquier punto de la cadena de suministro de software.
Un ataque de sustitución de dependencias puede dirigirse a cualquier persona que utilice tanto paquetes desarrollados internamente como paquetes extraídos de repositorios públicos. Los atacantes identifican los nombres de los paquetes internos y, a continuación, colocan estratégicamente el código malicioso con el mismo nombre en los repositorios de paquetes públicos. Normalmente, el código malicioso se publica en un paquete con un número de versión alto. Los administradores de paquetes obtienen el código malicioso de estas fuentes públicas porque creen que los paquetes maliciosos son las últimas versiones del paquete. Esto provoca una confusión o una sustitución entre el paquete deseado y el paquete malicioso, lo que hace que el código quede comprometido.
Para evitar los ataques de sustitución de dependencias, Amazon CodeCatalyst proporciona controles de origen de paquetes. Los controles de origen de los paquetes son ajustes que controlan cómo se pueden añadir los paquetes a tus repositorios. Los controles se configuran automáticamente cuando se agrega la primera versión de paquete de un paquete nuevo a un repositorio de CodeCatalyst. Los controles pueden garantizar que las versiones de los paquetes no puedan publicarse directamente en su repositorio ni ingerirse de fuentes públicas, lo que lo protege de los ataques de sustitución de dependencias. Para obtener más información sobre los controles de origen de los paquetes y cómo cambiarlos, consulte Edición de los controles de origen del paquete.