Skip to main content

Acerca de la revisión de dependencias

La revisión de dependencias te permite detectar las dependencias no seguras antes de que las introduzcas en tu entorno y te proporciona información sobre la licencia, los elementos dependientes y la antigüedad de las dependencias.

¿Quién puede utilizar esta característica?

La revisión de dependencias está disponible para los siguientes tipos de repositorio:

Acerca de la revisión de dependencias

La revisión de dependencias te permite entender los cambios a las dependencias y el impacto de seguridad de estos cambios en cada solicitud de cambios. Proporciona una visualización fácil de entender para los cambios de dependencia con un diferencial importante en la pestaña "Archivos cambiados" de una solicitud de incorporación de cambios. La revisión de dependencias te informa sobre:

  • Qué dependencias se agregaron, eliminaron o actualizaron junto con las fechas de lanzamiento
  • Cuántos proyectos utilizan estos componentes
  • Datos de las vulnerabilidades para estas dependencias

Para una solicitud de cambios que contiene cambios en los manifiestos de paquete o archivos de bloqueo, puedes mostrar una revisión de dependencias para ver qué ha cambiado. La revisión de dependencias incluye detalles de los cambios a las dependencias indirectas en los archivos de bloqueo, y te dice si cualquiera de las dependencias que se agregaron o actualizaron contienen vulnerabilidades conocidas.

Nota:

"Acción de revisión de dependencias" hace referencia a la acción específica que puede informar sobre las diferencias en una solicitud de incorporación de cambios dentro del contexto de GitHub Actions y agregar mecanismos de cumplimiento al flujo de trabajo de GitHub Actions. Para obtener más información, consulte Acción de revisión de dependencias más adelante en este artículo.

Algunas veces puede que solo quieras actualizar la versión de una dependencia en un manifiesto y generar una solicitud de cambios. Sin embargo, si la versión actualizada de esta dependencia directa también tiene dependencias actualizadas, tu solicitud de cambios podría tener más cambios de lo que esperas. La revisión de dependencias para cada archivo de bloqueo y de manifiesto proporciona un aforma sencilla para ver lo que ha cambiado y te deja saber si cualquiera de las versiones nuevas de las dependencias contienen vulnerabilidades conocidas.

Cuando verificas las revisiones de dependencias en una solicitud de cambios y cambias cualquier dependencia que se marque como vulnerable, puedes evitar que las vulnerabilidades se agreguen a tu proyecto. Para obtener más información sobre cómo funciona la revisión de dependencias, consulte Revisar los cambios en las dependencias en un pull request.

Las Dependabot alerts encontrarán vulnerabilidades que ya se encuentran en tus dependencias, pero es mucho mejor evitar introducir problemas potenciales que arreglarlos posteriormente. Para obtener más información sobre Dependabot alerts, consulte Acerca de las alertas Dependabot.

La revisión de dependencias es compatible con los mismos lenguajes de programación y ecosistemas de administración de paquetes que la gráfica de dependencias. Para más información, consulta Ecosistemas de paquetes que soportan el gráfico de dependencias.

Para obtener más información sobre las características de la cadena de suministro disponibles en GitHub, consulta Acerca de la seguridad de la cadena de suministro.

Habilitar la revisión de dependencias

La característica de revisión de dependencias se encuentra disponible cuando habilitas la gráfica de dependencias. Para obtener más información, consulta Habilitación del gráfico de dependencias para la empresa".

Acerca de la Acción de revisión de dependencias

La "Acción de revisión de dependencias" hace referencia a la acción específica que puede informar sobre las diferencias en una solicitud de cambios dentro del contexto de GitHub Actions. Vea dependency-review-action. Puedes usar Acción de revisión de dependencias en el repositorio para aplicar revisiones de dependencias en las solicitudes de incorporación de cambios. La acción analiza las versiones vulnerables de las dependencias introducidas por los cambios de versión del paquete en las solicitudes de incorporación de cambios y le advierte sobre las vulnerabilidades de seguridad asociadas. Esto proporciona una mejor visibilidad de los cambios en una solicitud de incorporación de cambios y ayuda a evitar que se agreguen vulnerabilidades al repositorio.

Captura de pantalla de una ejecución de flujo de trabajo que usa la acción Revisión de dependencias.

De forma predeterminada, se producirá un error en la comprobación de Acción de revisión de dependencias si detecta paquetes vulnerables. Una comprobación con errores impide combinar una solicitud de incorporación de cambios si el propietario del repositorio requiere que se supere la comprobación de revisión de dependencias. Para más información, consulta Acerca de las ramas protegidas.

La acción está disponible para todos los repositorios que tienen habilitado GitHub Code Security or GitHub Advanced Security.

Los propietarios de la organización pueden implementar la revisión de dependencias a escala aplicando el uso de las variables de Acción de revisión de dependencias en los repositorios de la organización. Esto implica el uso de conjuntos de reglas de repositorio para los que establecerá las variables de Acción de revisión de dependencias como un flujo de trabajo necesario, lo que significa que las solicitudes de incorporación de cambios solo se pueden combinar una vez que el flujo de trabajo pasa todas las comprobaciones necesarias. Para más información, consulta Aplicación de la revisión de dependencias en una organización.

Los propietarios de la empresa y los usuarios con acceso de administrador a un repositorio pueden agregar Acción de revisión de dependencias a su empresa y repositorio, respectivamente.

La acción usa la API de REST Dependency Review para obtener la diferencia de los cambios de dependencia entre el commit base y el principal. Puede usar API de revisión de dependencias para obtener la diferencia de los cambios de dependencia, incluidos los datos de vulnerabilidad, entre dos confirmaciones de un repositorio. Para más información, consulta Puntos de conexión de la API de REST para la revisión de dependencias. La acción también tiene en cuenta las dependencias enviadas mediante API de envío de dependencias. Para obtener más información sobre la API de envío de dependencias, consulta Uso de la Dependency submission API.

Puedes configurar Acción de revisión de dependencias para que se adapte mejor a sus necesidades. Por ejemplo, puedes especificar el nivel de gravedad que hará que se produzca un error en la acción. Para más información, consulta Configuración de la acción de revisión de dependencias.

Procedimientos recomendados para usar la API de revisión de dependencias y API de envío de dependencias juntas

La API de revisión de dependencias y las Acción de revisión de dependencias funcionan comparando los cambios de dependencia en una solicitud de cambios con el estado de las dependencias en la confirmación principal de la rama de destino.

Si el repositorio solo depende de dependencias definidas estáticamente en uno de los ecosistemas admitidos GitHub, la API de revisión de dependencias y las Acción de revisión de dependencias funcionan de forma coherente.

Sin embargo, es posible que prefieras que las dependencias se examinen durante una compilación y, luego se carguen en la API de envío de dependencias. En este caso, hay algunos procedimientos recomendados que debes seguir para garantizar que no esté introduciendo una condición de carrera al ejecutar los procesos para la API de revisión de dependencias y la API de envío de dependencias, ya que podría provocar que falten datos.

Los procedimientos recomendados que debes llevar a cabo dependerán de si usas GitHub Actions para acceder a la API de envío de dependencias y a la API de revisión de dependencias, o si usas acceso directo a la API.

Uso de Acciones de GitHub para acceder a la API de envío de dependencias y a la API de revisión de dependencias

Si usas GitHub Actions para acceder a la API de envío de dependencias o a la API de revisión de dependencias:

  • Asegúrese de ejecutar todas las acciones de envío de dependencias en el mismo flujo de trabajo de GitHub Actions que Acción de revisión de dependencias. Esto le proporcionará control sobre el orden de ejecución y garantizará que la revisión de dependencias siempre funcione.
  • Si decides ejecutar las Acción de revisión de dependencias por separado, deberás:
    • Establece retry-on-snapshot-warnings en true.
    • Establecer retry-on-snapshot-warnings-timeout para que supere ligeramente el tiempo de ejecución típico (en segundos) de la acción de envío de dependencias de ejecución más larga.

Uso del acceso directo a la API de envío de dependencias y a la API de revisión de dependencias

Si no usas GitHub Actions, y el código se basa en el acceso directo a la API de envío de dependencias y a la API de revisión de dependencias:

  • Asegúrate de ejecutar primero el código que llama a la API de envío de dependencias y, después, ejecuta el código que llama a la API de revisión de dependencias.
  • Si decides ejecutar el código para la API de envío de dependencias y la API de revisión de dependencias en paralelo, debes implementar una lógica de reintento y tener en cuenta lo siguiente:
    • Cuando falten instantáneas en cualquiera de los lados de la comparación, verá una explicación para eso en el encabezado x-github-dependency-graph-snapshot-warnings (como una cadena codificada en base64). Por lo tanto, si el encabezado no está vacío, debe considerar la posibilidad de volver a intentarlo.
    • Implementación de una lógica de reintento con reintentos de retroceso exponencial.
    • Implemente un número razonable de reintentos para compensar el entorno de ejecución típico del código de envío de dependencia.

Lectura adicional

  •         [AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/customizing-your-dependency-review-action-configuration)