Skip to main content

Búsqueda y corrección de la primera vulnerabilidad de código

Obtenga información sobre los conceptos básicos de protección del código mediante la resolución de una code scanning alerta en un repositorio de demostración.

A medida que aprendes a codificar, es normal introducir accidentalmente vulnerabilidades en los proyectos. Si estos problemas de seguridad no se solucionan antes de compartir el trabajo, los atacantes pueden usarlos para manipular el código y acceder a datos confidenciales, por lo que es importante identificarlos y aplicarles revisiones lo antes posible.

Afortunadamente, hay herramientas como code scanning las que buscan, explican e incluso corrigen vulnerabilidades en los repositorios públicos. En este tutorial, aprenderá a mantener el trabajo seguro con code scanning.

Configuración del repositorio de demostración

Empecemos bifurcando un proyecto de demostración con una vulnerabilidad de seguridad. Este proyecto compila una página web sencilla, pero como no implementaremos el proyecto, no hay ningún riesgo de seguridad en este ejercicio.

  1. Vaya al repositorio de new2code/code-scanning-demo.
  2. En la parte superior derecha de la página, haga clic en Bifurcar.
  3. En la página que aparece, haz clic en Crear bifurcación.

Búsqueda de vulnerabilidades en el código

Ahora que hemos configurado el proyecto, vamos a activar code scanning para tu bifurcación y comprobar si hay vulnerabilidades en el código.

  1. De nuevo en GitHub, en la página principal del repositorio, haga clic en Security and quality.
  2. En la fila "Code scanning alertas", haga clic en Configurar code scanning.
  3. En la sección "Herramientas", junto a "CodeQL análisis", seleccione Configurar y, a continuación, haga clic en Predeterminado.
  4. En la ventana emergente que aparece, haga clic en Habilitar CodeQL. Esto desencadenará un GitHub Actions flujo de trabajo que examine el código para detectar vulnerabilidades.
  5. Para comprobar el estado del flujo de trabajo, en la barra de navegación, haga clic en Acciones.
  6. Una vez completado el flujo de trabajo, en la barra de navegación, haga clic en Security and quality.
  7. Para ver la code scanning alerta detectada por el flujo de trabajo, en el panel de navegación lateral, haga clic en Code scanning, y luego haga clic en Cross-site scripting reflejado.

Comprensión de una code scanning alerta

Ahora que code scanning ha identificado una vulnerabilidad en el código, vamos a desglosar la información proporcionada en la alerta.

Ubicación

La alerta muestra una pequeña vista previa de un archivo, centrada en las líneas de código que crean la vulnerabilidad. En nuestro caso, la vulnerabilidad se detecta en la línea 8 de nuestro archivo index.js, donde implementamos la entrada proporcionada por el usuario en nuestro sitio.

Si observamos con más detalle, podemos ver que el problema subyacente se produce en la línea 7, cuando asignamos greet a la entrada del usuario sin comprobar si hay código malintencionado. Para ver una vista paso a paso de la vulnerabilidad en nuestro código, en la llamada debajo de las líneas vulnerables, haz clic en Mostrar rutas.

Captura de pantalla de la ubicación de una alerta de code scanning. Un botón "Mostrar rutas" se resalta en naranja.

Descripción y recomendación

Debajo de la vista previa del archivo, code scanning se proporciona una descripción más detallada de la vulnerabilidad. Para ver la corrección recomendada, así como ejemplos del código vulnerable y fijo, haga clic en Mostrar más.

Captura de pantalla de los detalles de una alerta de code scanning. Una lista desplegable con la etiqueta "Mostrar más" está resaltada en naranja.

En nuestro caso, la recomendación es sanear la entrada del usuario antes de usarla. Esto significa que necesitamos comprobar la entrada de código malintencionado y luego limpiarla si es necesario.

Sugerencia

Si no comprende completamente la corrección recomendada, intente pedir chat de Copilot que se la expliquen.

Escala de tiempo

Por último, puedes ver la escala de tiempo de la alerta en la parte inferior de la página. Nuestra escala de tiempo contiene la confirmación en la que se detectó por primera vez la vulnerabilidad y se actualizará automáticamente cuando se corrija la vulnerabilidad.

Captura de pantalla de la escala de tiempo de una alerta de code scanning.

Corrección automática de una vulnerabilidad

Para proteger nuestro proyecto de forma rápida y sencilla, vamos a usar GitHub Copilot Corrección automática para code scanning.

  1. Debajo del título de la alerta, en el cuadro que le sugiere "Acelerar la corrección de esta alerta mediante Autofijo de Copilot para CodeQL", haga clic en Generar corrección.

  2. Después de que Copilot genere la sugerencia de corrección, describirá los cambios sugeridos, representará una vista previa de los cambios y destacará cualquier dependencia añadida. Tómese un momento para leer el Copilottrabajo.

  3. Para crear un pull request con corrección, haz clic en Confirmar nueva rama y, a continuación, haz clic en Confirmar cambio.

  4. Una vez creada la solicitud de incorporación de cambios de borrador, en la parte inferior de la página, haz clic en Listo para revisar para que se pueda combinar.

  5. Para aplicar la corrección, haz clic en Merge pull request y, a continuación, haz clic en Confirmar merge.

    Una vez que la solicitud de incorporación de cambios se haya fusionado y el code scanning flujo de trabajo se ejecute de nuevo, la alerta se cerrará automáticamente y la confirmación para corregir la vulnerabilidad se agregará a la cronología.

Nota:

En proyectos reales, siempre debe revisar los cambios que Copilot sugiere antes de integrarlos en su código.

Pasos siguientes

Ahora que ha probado code scanning en un repositorio de demostración, habilite en sus propios proyectos para encontrar y corregir rápidamente las vulnerabilidades actuales y futuras.

Ahora que has protegido el código que has escrito, sigue el siguiente paso para un código seguro comprobando la seguridad de las dependencias. Consulta Búsqueda y corrección de la primera vulnerabilidad de dependencia.