Skip to main content

Procedimientos recomendados para proteger el código en la cadena de suministro

Instrucciones sobre cómo proteger el centro de la cadena de suministro, es decir, el código que escribes y el código del que dependes.

Acerca de esta guía

En esta guía se describen los cambios de mayor impacto que puede realizar para mejorar la seguridad del código. Cada sección detalla un cambio que puedes hacer a tus procesos para mejorar la seguridad. Los cambios de mayor impacto se enumeran primero.

¿Cuál es el riesgo?

Entre los principales riesgos del proceso de desarrollo se incluyen los siguientes:

  • Uso de dependencias con vulnerabilidades de seguridad que un atacante podría aprovechar.
  • Filtrado de credenciales de autenticación o un token que un atacante podría usar para acceder a los recursos.
  • Introducción de una vulnerabilidad en el código propio que un atacante podría aprovechar.

Estos riesgos abren los recursos y proyectos a los ataque y esos riesgos pasan directamente a cualquiera que use un paquete que cree. En las secciones siguientes se explica cómo puede protegerse a sí mismo y a los usuarios de estos riesgos.

Creación de un programa de administración de vulnerabilidades para dependencias

Puede proteger el código del que depende mediante la creación de un programa de administración de vulnerabilidades para las dependencias. De forma general, debe incluir procesos para asegurarse de que:

  1. Crea un inventario de las dependencias.

  2. Sabe cuándo hay una vulnerabilidad de seguridad en una dependencia.

  3. Aplica revisiones de dependencia en las solicitudes de incorporación de cambios.

  4. Evalúa el impacto de esa vulnerabilidad en el código y decide qué acción realizar.

Generación automática de inventario

Como primer paso, le interesa realizar un inventario completo de las dependencias. En el gráfico de dependencias de un repositorio se muestran las dependencias de los ecosistemas admitidos. Si realizas una comprobación en las dependencias o usas otros ecosistemas, deberás complementarlo con datos de herramientas de terceros o enumerando las dependencias manualmente. 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 obtener más información, vea «Exportación de una lista de materiales de software para el repositorio».

Detección automática de vulnerabilidades en dependencias

Dependabot puede ayudarle mediante la supervisión de las dependencias y la notificación cuando contienen una vulnerabilidad conocida. Incluso puede habilitar Dependabot para generar automáticamente solicitudes de incorporación de cambios que actualicen la dependencia a una versión segura. Para más información, consulta "Acerca de las alertas Dependabot" y "Sobre las actualizaciones de seguridad de Dependabot".

Detección automática de vulnerabilidades en solicitudes de incorporación de cambios

Acción de revisión de dependencias aplica una revisión de dependencia en las solicitudes de incorporación de cambios, lo que facilita la visualización de si una solicitud de incorporación de cambios presentará una versión vulnerable de una dependencia en el repositorio. Cuando se detecta una vulnerabilidad, Acción de revisión de dependencias puede bloquear la combinación de la solicitud de incorporación de cambios. Para más información, consulta "Acerca de la revisión de dependencias".

Evaluación de la exposición al riesgo de una dependencia vulnerable

Cuando descubra que usa una dependencia vulnerable, por ejemplo, una biblioteca o un marco, debe evaluar el nivel de exposición del proyecto y determinar qué acción realizar. Normalmente, las vulnerabilidades se notifican con una puntuación de gravedad para mostrar la gravedad de su impacto. La puntuación de gravedad es una guía útil, pero no puede indicarle el impacto completo de la vulnerabilidad en el código.

Para evaluar el impacto de una vulnerabilidad en el código, también debe tener en cuenta cómo usa la biblioteca y determinar cuánto riesgo supone realmente para el sistema. Es posible que la vulnerabilidad forme parte de una característica que no usa, y puede actualizar la biblioteca afectada y continuar con el ciclo de versión normal. O bien, es posible que el código esté muy expuesto al riesgo y tenga actualizar la biblioteca afectada y enviar una compilación actualizada inmediatamente. Esta decisión depende de cómo use la biblioteca en el sistema y es una decisión que solo usted debe tomar.

Protección de los tokens de comunicación

A menudo, el código necesita comunicarse con otros sistemas por una red y necesita secretos (como una contraseña o una clave de API) para autenticarse. El sistema necesita acceso a esos secretos para ejecutarse, pero se recomienda no incluirlos en el código fuente. Esto es especialmente importante para los repositorios a los que muchas personas pueden tener acceso y crítico para los repositorios públicos.

Detección automática de secretos confirmados en un repositorio

Nota: Alertas de examen de secretos para asociados se ejecuta de forma automática en repositorios públicos y paquetes npm públicos para notificar a los proveedores de servicio sobre secretos filtrados en GitHub.com.

Alertas de examen de secretos para usuarios están disponibles de forma gratuita en todos los repositorios públicos. Las organizaciones que usan GitHub Enterprise Cloud con una licencia de GitHub Advanced Security también pueden habilitar alertas de examen de secretos para usuarios en sus repositorios privados e internos. Para más información, consulta "Acerca del examen de secretos" y "Acerca de GitHub Advanced Security".

GitHub se asocia con muchos proveedores para detectar automáticamente cuándo se confirman o almacenan los secretos en tus repositorios y paquetes npn públicos de los que dependes, y lo notifica al proveedor para que pueda tomar las medidas adecuadas para asegurarse de que tu cuenta sigue siendo segura. Para obtener más información, vea «Acerca del examen de secretos».

Puedes habilitar y configurar un examen adicional que te enviará alertas en caso de ocurra una filtración accidental de datos en GitHub si tienes:

  • repositorios públicos en GitHub.com.
  • una organización que usa GitHub Enterprise Cloud con una licencia de GitHub Advanced Security. Secret scanning también analizará tus repositorios privados.

Almacenamiento seguro de secretos que se usan en GitHub

Además del código, es probable que tenga que usar secretos en otros lugares. Por ejemplo, para permitir que los flujos de trabajo de GitHub Actions, Dependabot o el entorno de desarrollo de GitHub Codespaces se comuniquen con otros sistemas. Para más información sobre cómo almacenar y usar secretos de forma segura, consulta "Uso de secretos en Acciones de GitHub", "Configuración del acceso a registros privados para Dependabot" y "Administrar secretos para sus codespaces".

Mantener los patrones de programación vulnerables fuera del repositorio

Nota: Code scanning está disponible para todos los repositorios públicos en GitHub.com. Code scanning también está disponible para los repositorios privados que pertenecen a las organizaciones que usan GitHub Enterprise Cloud y que tienen una licencia de GitHub Advanced Security. Para obtener más información, vea «Acerca de GitHub Advanced Security».

Creación de un proceso de revisión de solicitudes de incorporación de cambios

Para mejorar la calidad y la seguridad del código, asegúrese de que todas las solicitudes de incorporación de cambios se revisen y prueben antes de combinarlas. GitHub tiene muchas características que puede usar para controlar el proceso de revisión y combinación. Para empezar, consulta "Acerca de las ramas protegidas".

Examen del código en busca de patrones vulnerables

A menudo, es difícil que los revisores detecten patrones de código no seguros sin ayuda. Además de examinar el código en busca de secretos, puede comprobar si hay patrones asociados a vulnerabilidades de seguridad. Por ejemplo, una función que no es segura para memoria o no puede aplicar escape a la entrada de usuario que podría dar lugar a una vulnerabilidad de inyección. GitHub ofrece varias maneras diferentes de abordar cómo y cuándo se examina el código. Para empezar, consulta "Acerca del examen de código".

Pasos siguientes