Skip to main content

Acerca de la seguridad de la cadena de suministro

GitHub le ayuda a proteger la cadena de suministro, desde comprender las dependencias de su entorno a conocer las vulnerabilidades de dichas dependencias y aplicarles revisiones.

Acerca de la seguridad de la cadena de suministro en GitHub

Al desarrollar un proyecto de software, es probable que use otro software para compilar y ejecutar la aplicación, como bibliotecas de código abierto, marcos u otras herramientas. Estos recursos se conocen colectivamente como "dependencias", ya que el proyecto depende de ellos para funcionar correctamente. El proyecto podría basarse en cientos de estas dependencias, formando lo que se conoce como "cadena de suministro".

La cadena de suministro puede suponer un problema de seguridad. Si una de las dependencias tiene una vulnerabilidad de seguridad conocida o un error, los actores malintencionados podrían aprovechar esta vulnerabilidad para, por ejemplo, insertar código malintencionado ("malware"), robar datos confidenciales o provocar algún otro tipo de interrupción en el proyecto. Este tipo de amenaza se denomina "ataque de cadena de suministro". Tener dependencias vulnerables en la cadena de suministro pone en peligro la seguridad de su propio proyecto y también pone en riesgo a los usuarios.

Una de las cosas más importantes que puede hacer para proteger su cadena de suministro consiste en revisar sus dependencias vulnerables y reemplazar cualquier malware.

Las dependencias se agregan directamente a la cadena de suministro cuando se especifican en un archivo de manifiesto o en un archivo de bloqueo. Las dependencias también se pueden incluir de forma transitiva, es decir, incluso si no especifica una dependencia concreta, pero se usa en una dependencia propia, también dependerá de esa dependencia.

GitHub ofrece distintas características que le ayudan a comprender las dependencias del entorno, conocer las vulnerabilidades de dichas dependencias y aplicarles revisiones.

Las características de la cadena de suministro en GitHub son las siguientes: * Gráfico de dependencias * Revisión de dependencias * Dependabot alerts * Dependabot updates * Dependabot security updates * Dependabot version updates

El gráfico de dependencias es fundamental para la seguridad de la cadena de suministro. En el gráfico de dependencias se identifican todas las dependencias ascendentes y las dependencias descendentes públicas de un repositorio o paquete. El gráfico de dependencias del repositorio realiza un seguimiento y muestra sus dependencias y algunas de sus propiedades, como la información de vulnerabilidad.

Las siguientes características de la cadena de suministro en GitHub dependen de la información proporcionada por el gráfico de dependencias.

  • La revisión de dependencias usa el gráfico de dependencias para identificar los cambios de dependencias y ayudarle a comprender el impacto en la seguridad de estos cambios al revisar solicitudes de incorporación de cambios.
  • Dependabot realiza referencias cruzadas entre los datos de dependencia proporcionados por el gráfico de dependencias y la lista de advertencias publicadas en GitHub Advisory Database, examina las dependencias y genera Dependabot alerts cuando se detecta una posible vulnerabilidad.
  • Las Dependabot security updates usan el gráfico de dependencias y Dependabot alerts para ayudarle a actualizar las dependencias con vulnerabilidades conocidas en el repositorio.

Dependabot version updates no usan el gráfico de dependencias y en su lugar se basan en el control de versiones semántico de las dependencias. Dependabot version updates ayudan a mantener actualizadas las dependencias, incluso cuando no tienen ninguna vulnerabilidad.

Para obtener guías de procedimientos recomendados sobre la seguridad de la cadena de suministro de un extremo a otro, incluida la protección de cuentas personales, código y procesos de compilación, consulte Protección de la cadena de suministro de un extremo a otro.

Introducción a las características

¿Cuál es el gráfico de dependencias?

Para generar el gráfico de dependencias, GitHub examina las dependencias explícitas de un repositorio declaradas en el manifiesto y los archivos de bloqueo. Cuando se habilita, el gráfico de dependencias analiza automáticamente todos los archivos de manifiesto de paquete conocidos del repositorio y los usa para construir un gráfico con versiones y nombres de dependencia conocidos.

  • El gráfico de dependencias incluye información sobre las dependencias directas y las transitivas.
  • El gráfico de dependencias se actualiza automáticamente al insertar una confirmación en GitHub que cambia o agrega un archivo de manifiesto o de bloqueo admitido a la rama predeterminada y cuando alguien inserta un cambio en el repositorio de una de las dependencias.
  • El gráfico de dependencias también puede incluir la información que proporciones a medida que se compila el proyecto mediante GitHub Actions. Algunos ecosistemas de paquetes extraen la mayoría de sus dependencias transitivas en tiempo de compilación, por lo que enviar información de dependencia a medida que se está produciendo la compilación proporciona una vista más completa de la cadena de suministro.
  • Para ver el gráfico de dependencias, abre la página principal del repositorio en GitHub y ve a la pestaña Insights.
  • Si tienes al menos acceso de lectura al repositorio, puedes exportar el gráfico de dependencias del repositorio como una la lista de materiales de software (SBOM) compatible con SPDX, a través de la interfaz de usuario de GitHub o la API REST de GitHub. Para más información, consulta Exportación de una lista de materiales de software para el repositorio.

Puede usar API de envío de dependencias para enviar dependencias desde el administrador de paquetes o el ecosistema de su elección, aunque ese ecosistema no sea compatible con el gráfico de dependencias para el análisis de archivos de manifiesto o de bloqueo. Las dependencias enviadas a un proyecto mediante la API de envío de dependencias mostrarán qué detector se ha usado para su envío y cuándo se han enviado. Para obtener más información sobre API de envío de dependencias, consulte Uso de la Dependency submission API.

Para más información sobre el gráfico de dependencias, consulta Sobre el gráfico de dependencias.

¿Qué es la revisión de dependencias?

La revisión de dependencias ayuda a los revisores y colaboradores a comprender los cambios de dependencia y su impacto en la seguridad en cada solicitud de incorporación de cambios.

  • La revisión de dependencias indica qué dependencias se han agregado, quitado o actualizado en una solicitud de incorporación de cambios. Puede usar las fechas de lanzamiento, la popularidad de las dependencias y la información de vulnerabilidad para ayudarle a decidir si quiere aceptar el cambio.
  • Puede ver la revisión de dependencias de una solicitud de incorporación de cambios si muestra la diferencia enriquecida en la pestaña Archivos cambiados.

Para más información sobre la revisión de dependencias, consulta Acerca de la revisión de dependencias.

¿Qué es Dependabot?

Dependabot mantiene actualizadas las dependencias informándote de las vulnerabilidades de seguridad de las dependencias y abriendo automáticamente solicitudes de incorporación de cambios para actualizar las dependencias. Las solicitudes de incorporación de cambios de Dependabot tendrán como objetivo la siguiente versión segura disponible cuando una alerta de Dependabot, o a la última versión cuando se publique una versión.

El término "Dependabot" abarca las características siguientes:

  • Dependabot alerts: notificación mostrada en la pestaña Seguridad y en el gráfico de dependencias del repositorio. La alerta incluye un enlace al archivo afectado en el proyecto e información acerca de la versión arreglada.
  • Dependabot updates:
    • Dependabot security updates: actualizaciones desencadenadas para actualizar las dependencias a una versión segura cuando se desencadena una alerta.
    • Dependabot version updates: actualizaciones programadas para mantener actualizadas las dependencias con la versión más reciente.

Las Dependabot security updates y las Dependabot version updates requieren que GitHub Actions se ejecute en GitHub Enterprise Server. Las Dependabot alerts no necesitan GitHub Actions. Para más información, consulta Habilitación de Dependabot para la empresa.

Dependabot security updates puede corregir dependencias vulnerables en GitHub Actions. Cuando se habilitan las actualizaciones de seguridad, Dependabot generará automáticamente una solicitud de cambios para actualizar los datos vulnerables GitHub Actions usados en los flujos de trabajo a la versión con revisión mínima. Para más información, consulta Sobre las actualizaciones de seguridad de Dependabot.

¿Qué son las alertas de Dependabot?

Dependabot alerts resalta los repositorios afectados por una vulnerabilidad recién detectada en función del gráfico de dependencias y GitHub Advisory Database, que contiene las versiones en listas de vulnerabilidades conocidas.

  • Dependabot realiza un examen para detectar las dependencias no seguras y envía Dependabot alerts cuando:
    • Se sincronizan nuevos datos de aviso con su instancia cada hora desde GitHub.com.
    • Cambia el gráfico de dependencias del repositorio.
  • Las Dependabot alerts se muestran en la pestaña Seguridad y en el gráfico de dependencias del repositorio. La alerta incluye un enlace al archivo afectado en el proyecto e información acerca de la versión arreglada.

Para más información, consulta Acerca de las alertas Dependabot.

¿Qué son las actualizaciones de Dependabot?

Hay dos tipos de Dependabot updates: actualizaciones de seguridad y de versión de Dependabot. En los dos casos Dependabot genera solicitudes de incorporación de cambios automáticas para actualizar las dependencias, pero hay varias diferencias.

Dependabot security updates:

  • Desencadenada por una alerta de Dependabot
  • Actualizan las dependencias a la versión mínima que resuelve una vulnerabilidad conocida
  • Compatible con ecosistemas admitidos en el gráfico de dependencias
  • No requiere un archivo de configuración, pero puedes usar uno para invalidar el comportamiento predeterminado.

Dependabot version updates:

  • Requiere un archivo de configuración
  • Se ejecutan según una programación que configure
  • Actualizan las dependencias a la versión más reciente que coincida con la configuración
  • Compatible con un grupo diferente de ecosistemas

Para obtener más información sobre Dependabot updates, consulte Sobre las actualizaciones de seguridad de Dependabot y Acerca de las actualizaciones a la versión del Dependabot.

¿Qué son las versiones inmutables?

Los repositorios pueden habilitar versiones inmutables para evitar que los recursos y la etiqueta git asociada de una versión se cambien después de la publicación. Esto reduce el riesgo de ataques de cadena de suministro al impedir que los atacantes inserten vulnerabilidades en versiones que consume. También significa que los proyectos que dependen de versiones específicas son menos probables que se interrumpan.

La creación de una versión inmutable genera automáticamente una atestación para la versión. Puede usar esta atestación para verificar que el lanzamiento y sus artefactos coinciden con la información publicada.

¿Qué son las atestaciones de artefactos?

Los proveedores de software pueden generar atestaciones para el software creado con GitHub Actions. Las atestaciones son declaraciones firmadas criptográficamente que establecen la procedencia de la compilación (el código fuente y la ejecución del flujo de trabajo utilizados para construirla) o la lista de materiales de software asociada (SBOM, Software Bill of Materials).

Puede aumentar la seguridad de la cadena de suministro comprobando las atestaciones de las dependencias. Aunque las atestaciones no garantizan la seguridad, proporcionan información sobre dónde y cómo se creó el software, por lo que puede estar más seguro de que las dependencias no se han alterado. Puede restringir las implementaciones mediante una herramienta como el controlador de admisiones de Kubernetes para evitar que se implementen compilaciones no atestiguadas.

Cuando utilizas GitHub Actions para generar pruebas de verificación para las propias compilaciones de la organización, los artefactos generados se cargan automáticamente en el linked artifacts page. Esta plataforma permite ver los registros de almacenamiento e implementación de todos los artefactos vinculados, por lo que puede encontrar el código fuente y la ejecución de flujo de trabajo que se usan para crear un artefacto o filtrar alertas de seguridad basadas en el contexto de implementación.

Disponibilidad de funcionalidades

  •         **Gráfico de dependencias y Dependabot alerts:** no están habilitados de forma predeterminada. El propietario de la empresa configura las dos características en un nivel empresarial. Para más información, consulta [AUTOTITLE](/admin/code-security/managing-supply-chain-security-for-your-enterprise/enabling-the-dependency-graph-for-your-enterprise) y [AUTOTITLE](/admin/configuration/configuring-github-connect/enabling-dependabot-for-your-enterprise).
    
  •         **Revisión de dependencias**: disponible cuando se habilita el gráfico de dependencias para su instancia y GitHub Code Security or GitHub Advanced Security se ha habilitado para la organización o el repositorio. Para más información, consulta [AUTOTITLE](/get-started/learning-about-github/about-github-advanced-security).
    
  •         **Dependabot security updates:** no está habilitado de forma predeterminada. Puedes habilitar las Dependabot security updates para cualquier repositorio que utilice Dependabot alerts y la gráfica de dependencias. Para obtener información sobre cómo habilitar las actualizaciones de seguridad, consulte [AUTOTITLE](/code-security/dependabot/dependabot-security-updates/configuring-dependabot-security-updates).
    
  •         **Dependabot version updates:** no está habilitado de forma predeterminada. Las personas con permisos de escritura en un repositorio pueden habilitar las Dependabot version updates. Para obtener información sobre cómo habilitar las actualizaciones de versión, consulte [AUTOTITLE](/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates).