Skip to main content
Frecuentemente publicamos actualizaciones de nuestra documentación. Es posible que la traducción de esta página esté en curso. Para conocer la información más actual, visita la documentación en inglés. Si existe un problema con las traducciones en esta página, por favor infórmanos.

Mejores prácticas para asegurar el código en tu cadena de suministro

Orientación sobre cómo proteger el centro de tu cadena de suministro; el código que escribes y del cuál dependes.

Acerca de esta guía

Esta guía describe los cambios de más alto impacto que puedes hacer para mejorar la seguridad de tu código. Cada sección detalla un cambio que puedes hacer a tus procesos para mejorar la seguridad. Los cambios de más alto impacto se listan primero.

¿Cuál es el riesgo?

Los riesgos clave en el proceso de desarrollo incluyen:

  • Utilizar dependencias con las vulnerabilidades de seguridad que podría aprovechar una tacante.
  • Filtrar credenciales de autenticación o un token que pudiera utilizar un atacante para acceder a tus recursos.
  • Introducir una vulnerabilidad a tu propio código que pueda aprovechar un atacante.

Estos riesgos abren la posibilidad de que tus recursos y proyectos sufran un ataque y dichos riesgos se pasan directamente a cualquiera que utilice un paquete que crees. Las siguientes secciones explican cómo puedes proteger a tus usuarios y a ti mismo de estos riesgos.

Crear un programa de administración de vulnerabilidades para las dependencias

Puedes asegurar el código del que dependes si creas un programa de administración de vulnerabilidades para las dependencias. En un nivel alto, este debería incluir los procesos para garantizar que:

  1. Crees un inventario de tus dependencias.

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

  3. Evalúes el impacto de dicha vulnerabilidad en tu código y decidas qué acción llevar a cabo.

Generación automática de inventario

Como primer paso, necesitas realizar un inventario completo de tus dependencias. La gráfica de dependencias de un repositorio te muestra las dependencias de los ecosistemas compatibles. Si ingresas tus dependencias o utilizas otros ecosistemas, necesitarás suplementar esto con los datos de las herramientas de terceros o listando las dependencias manualmente. Para obtener más información, consulta la sección "Acerca de la gráfica de dependencias".

Detección automática de las vulnerabilidades en las dependencias

Dependabot puede ayudarte monitoreando tus dependencias y notificándote cuando contengan una vulnerabilidad conocida. Incluso puedes habilitar el Dependabot para que levante automáticamente solicitudes de cambios que actualicen la dependencia a una versión segura. Para obtener más información, consulta las secciones "Acerca de las Las alertas del dependabot" y "Acerca de las actualizaciones de seguridad del Dependabot".

Valoración de la exposición a riesgos de una dependencia vulnerable

Cuando descubres que estás utilizando una dependencia vulnerable, por ejemplo, una librería o marco de trabajo, debes valorar el nivel de exposición de tu proyecto y determinar la acción a tomar. Las vulnerabilidades a menudo se reportan con una calificación de gravedad para mostrarte qué tan grave pudo haber sido el impacto. Esta calificación de gravedad es una guía útil, pero no puede decirte el impacto total de la vulnerabilidad en tu código.

Para valorar el impacto de una vulnerabilidad en tu código, también necesitas considerar cómo utilizas la librería y determinar cuánto riesgo real representa para tu sistema. Tal vez, la vulnerabilidad es parte de una característica que no utilizas y puedes actualizar la librería afectada y seguir con tu ciclo de lanzamiento normal. O tal vez tu código se expuso fuertemente a los riesgos y necesitas actualizar la librería afectada y enviar una actualización de compilación de inmediato. Esta decisión dependen de cómo utilizas la librería en tu sistema y es una decisión sobre la cuál solo tú tendrás conocimiento para realizar.

Asegurar tus tokens de comunicación

A menudo, el código necesita comunicarse con otros sistemas a través de una red y requiere secretos (como una contrasella o llave de API) para autenticarse. Tu sistema necesita acceso a estos secretos para ejecutarse, pero es la mejor práctica el no incluirlos en tu código fuente. Esto es especialmente importante en el caso de los repositorios públicos, pero también para los repositorios privados a los cuales tienen acceso muchas personas.

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

Nota: Escaneo de secretos para patrones asociados se ejecuta automáticamente en todos los repositorios públicos. Si tienes una licencia de GitHub Advanced Security, puedes habilitar y configurar el

  • escaneo de secretos para la seguridad avanzada para cualquier repositorio que le pertenezca a una organización. Para obtener más información, consulta la sección "Productos de GitHub".

GitHub se asocia con muchos proveedores para detectar automáticamente cuándo se confirman los secretos o cuando se almacenan en tus repositorios públicos y notifica al proveedor para que puedan tomar acciones adecuadas para garantizar que tu cuenta sigue estando segura. Para obtener más información, consulta la sección "Acerca del escaneo de secretos para los patrones asociados".

Si tu organización utiliza la GitHub Advanced Security, puedes habilitar el >- escaneo de secretos para la seguridad avanzada en cualquier repositorio que le pertenezca a la organización. También puedes definir patrones personalizados para detectar secretos adicionales a nivel de repositorio, organización o empresa. Para obtener más información, consulta la sección "Acerca del >- escaneo de secretos para la seguridad avanzada".

Almacenamiento seguro de los secretos que utilizas en GitHub Enterprise Cloud

Además de tu código, probablemente necesitarás utilizar secretos en otros lugares. Por ejemplo, para permitir que los flujos de trabajo de GitHub Actions, el Dependabot o tu ambiente de desarrollo de Codespaces se comuniquen con otros sistemas. Para obtener más información sobre cómo almacenar y utilizar secretos de forma segura, consulta las secciones "Secretos cifrados en las acciones", "Administrar los secretos cifrados para el Dependabot" y "Administrar los secretos cifrados para tus codespaces".

Mantener los patrones de código vulnerable fuera de tu repositorio

Nota: El Escaneo de código se encuentra disponible para todos los repositorios públicos y ara los privados que pertenezcan a las organizaciones con la GitHub Advanced Security habilitada. Para obtener más información, consulta la sección "Acerca de GitHub Advanced Security".

Crear un proceso de revisión de solicitudes de cambio

Puedes mejorar la calidad y seguridad de tu código si te aseguras de que todas las solicitudes de cambio se revisen y prueben antes de que se fusionen. GitHub tiene muchas características que puedes utilizar para controlar el proceso de revisión y fusión. Para iniciar, consulta la sección "Acerca de las ramas protegidas".

Escanear tu código en busca de patrones vulnerables

A menudo, es difícil que los revisores identifiquen los patrones de código inseguro si no cuentan con ayuda para ello. Adicionalmente a escanear tu código en busca de secretos, puedes verificar si existen patrones asociados con vulnerabilidades de seguridad. Por ejemplo, una función que no sea segura para la memoria o que falle en escapar la entrada del usuario y pudiera dar como resultado una vulnerabilidad de inyección. GitHub ofrece varias formas diferentes de tratar tanto cómo como cuándo escanear tu código. Para iniciar, consulta la sección "Acerca del escaneo de código".

Pasos siguientes