Información sobre los resultados de CodeQL

Completado

En unidades anteriores, creaste una base de datos y examinaste el archivo extraído de tu código. Ahora puede ver los resultados y determinar si hay vulnerabilidades de seguridad para solucionar.

Los resultados de la consulta interpretados se muestran automáticamente en el código fuente de la extensión CodeQL para Visual Studio Code. Los resultados de salida que genera la CLI de CodeQL pueden tener muchos formatos para su uso con varias herramientas.

Puede controlar cómo se muestran los resultados de análisis en el código fuente modificando una instrucción de select en una consulta. Puede hacer que los resultados sean claros y fáciles para que otros usuarios comprendan al desarrollar la consulta. Al escribir sus propias consultas en la consola de consultas o en la extensión CodeQL para Visual Studio Code, no hay restricciones en lo que se puede seleccionar.

Si desea usar una consulta para crear alertas en el análisis de código de GitHub o generar resultados de análisis válidos mediante la CLI de CodeQL, debe hacer que la instrucción select informe los resultados en el formato requerido.

Flujos de trabajo de remediación con Copilot Autofix

Después de que CodeQL identifique un problema, el paso más importante es resolverlo. GitHub integra la detección con corrección al permitirle pasar directamente de una alerta a una corrección propuesta.

Corregir alertas con Copilot Autofix

Al abrir una alerta codeQL en la pestaña Seguridad, GitHub muestra detalles sobre el problema, incluido el código afectado, la gravedad y cómo se introdujo el problema.

Para las alertas compatibles, también verás Copilot Autofix.

Copilot Autofix analiza la alerta y genera una corrección propuesta. Esto incluye lo siguiente:

  • Cambio de código que resuelve el problema
  • Explicación de por qué se produce el problema
  • Instrucciones sobre cómo la corrección soluciona el problema

En lugar de escribir manualmente una corrección desde cero, se empieza a partir de un cambio sugerido.

Un flujo de trabajo típico tiene este aspecto:

  1. CodeQL se ejecuta en el flujo de trabajo y crea una alerta.
  2. Abra la alerta y revise el código afectado.
  3. Copilot Autofix genera una corrección sugerida.
  4. Revise la explicación y los cambios propuestos.
  5. Aplica la corrección, que crea una pull request.
  6. La pull request pasa comprobaciones y se revisa antes de fusionarse.

Este flujo de trabajo conecta la detección directamente a la corrección sin salir de la interfaz GitHub.

Copilot Autofix no aplica cambios automáticamente. Usted es responsable de revisar y aprobar la corrección. Esto garantiza que:

  • La corrección se alinea con el código base.
  • Puede ajustar la implementación si es necesario.
  • Los cambios pasan por el proceso de revisión existente.

Autofix es más eficaz para:

  • Patrones de vulnerabilidad comunes, como riesgos de inyección o uso de API no segura.
  • Problemas que se pueden resolver con un cambio de código claro y localizado.

Para problemas más complejos, Autofix puede ofrecer orientación, pero puede que sea necesario modificar la corrección o implementar una solución personalizada.

Correcciones sugeridas en alertas

Incluso cuando Autofix no está disponible, algunas alertas incluyen soluciones sugeridas.

Estas sugerencias:

  • Resalte la parte del código que debe cambiar.
  • Proporcione instrucciones sobre cómo resolver el problema.

Puede usar estas sugerencias como punto de partida al escribir la corrección.

Corrección de dependencias con Dependabot

No todas las vulnerabilidades proceden del código. Algunos se introducen a través de dependencias.

Dependabot ayuda a solucionar estos problemas automáticamente:

  • Detección de dependencias vulnerables.
  • Creación de solicitudes de incorporación de cambios con versiones actualizadas.
  • Permitiéndole revisar y fusionar correcciones.

Estas pull requests siguen el mismo flujo de trabajo que Autofix:

  1. Se propone un cambio.
  2. Se ejecutan comprobaciones.
  3. La actualización se revisa y se integra.

Esto hace que la corrección de dependencias sea coherente con la forma en que se corrigen los problemas de código de la aplicación.

Automatización de flujos de trabajo de corrección

Puede usar Acciones de GitHub para automatizar cómo se controlan las correcciones.

Por ejemplo, los flujos de trabajo pueden:

  • Ejecución de pruebas en solicitudes de incorporación de cambios de Autofix o Dependabot.
  • Aplicar etiquetas en función de la gravedad.
  • Requerir aprobaciones para cambios de alto riesgo.
  • Combinar automáticamente las actualizaciones de bajo riesgo.

Estos flujos de trabajo garantizan que la corrección sea:

  • Coherente en todo el equipo.
  • Validado antes de la combinación.
  • Integrado en el proceso de desarrollo.

De detección a resolución

En un flujo de trabajo completo:

  1. CodeQL detecta una vulnerabilidad.
  2. Copilot Autofix sugiere una corrección.
  3. Se crea una solicitud de incorporación de cambios.
  4. Acciones de GitHub validan el cambio.
  5. La corrección se revisa y se integra.

Al combinar el análisis de CodeQL con Copilot Autofix, Dependabot y la automatización de flujos de trabajo, creas un sistema que no solo encuentra problemas, sino que también ayuda a resolverlos de forma eficaz.

Tomar medidas ante las alertas de análisis de código

Puede configurar el examen de código para comprobar el código en un repositorio. Puede usar el análisis de CodeQL predeterminado, un análisis que no es de Microsoft u otros tipos de análisis. Las alertas resultantes se muestran junto entre sí en el repositorio.

El análisis de CodeQL predeterminado de GitHub puede incluir más propiedades para las alertas que los resultados de las herramientas que no son de Microsoft o de consultas personalizadas. En un flujo de trabajo predeterminado, el análisis del código se realiza periódicamente en la rama predeterminada y durante las solicitudes de incorporación de cambios.

Cada alerta incluye la siguiente información:

  • Problema con el código y el nombre de la herramienta que lo identificó.
  • Línea de código que desencadenó la alerta.
  • Propiedades de la alerta, como la gravedad.
  • La gravedad de la seguridad.
  • Punto en el que se introdujo el problema.
  • La naturaleza del problema.

La información también incluye cómo corregir el problema cuando el análisis de CodeQL identifica una alerta. Además, el análisis de código a través de CodeQL puede detectar problemas de flujo de datos en el código.

Captura de pantalla de las alertas de análisis de CodeQL en GHAS.

Además de corregir manualmente las vulnerabilidades, puede automatizar la corrección de dependencias mediante las actualizaciones de seguridad de Dependabot.

Cuando Dependabot detecta una dependencia vulnerable, crea una solicitud de incorporación de cambios para actualizar la dependencia. Estas solicitudes de incorporación de cambios se pueden integrar en flujos de trabajo automatizados para simplificar la corrección.

Automatización de la corrección de dependencias con Dependabot

Un flujo de trabajo de automatización típico sigue este patrón:

  1. Dependabot crea una solicitud de incorporación de cambios para actualizar una dependencia vulnerable.
  2. Se desencadena un flujo de trabajo de Acciones de GitHub en el pull_request evento .
  3. El flujo de trabajo comprueba si la solicitud de incorporación de cambios se creó mediante dependabot[bot].
  4. Los metadatos sobre la actualización (como el tipo de dependencia o el cambio de versión) se pueden usar para determinar la siguiente acción.
  5. El flujo de trabajo ejecuta comprobaciones de validación, aplica etiquetas o habilita la combinación automática para actualizaciones de bajo riesgo.

En el ejemplo siguiente se muestra un flujo de trabajo de Acciones de GitHub simple que se ejecuta solo para las solicitudes de incorporación de cambios de Dependabot. Valida la actualización y puede habilitar la combinación automática después de que se superen las comprobaciones.

name: Dependabot remediation

on:
  pull_request:
    branches:
      - main

permissions:
  pull-requests: write

jobs:
  dependabot:
    if: github.event.pull_request.user.login == 'dependabot[bot]'
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Run tests
        run: npm test

      - name: Enable auto-merge for approved updates
        if: ${{ success() }}
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PR_URL: ${{ github.event.pull_request.html_url }}
        run: gh pr merge --auto --merge "$PR_URL"

Este enfoque ayuda a los equipos a reducir el esfuerzo manual a la vez que se garantiza que las actualizaciones de dependencia se validan antes de combinarse.

En entornos de producción, la fusión automática suele limitarse a actualizaciones de bajo riesgo, como las versiones de parche, y se combina con reglas de protección de ramas, comprobaciones de estado obligatorias y políticas de revisión.

Notificar a los equipos sobre la actividad de corrección

Para mejorar la visibilidad de las actualizaciones de dependencias, los equipos suelen integrar Dependabot con sistemas de notificación externos.

Además de las notificaciones de GitHub, puedes usar:

  • Integraciones con Slack o Microsoft Teams para la visibilidad del equipo.
  • Webhooks de GitHub para integraciones personalizadas y flujos de automatización.

Por ejemplo, un flujo de trabajo o un webhook pueden notificar a un equipo cuando:

  • Se abre una solicitud de incorporación de cambios de Dependabot.
  • Se produce un error en las comprobaciones de validación.
  • Se ha integrado una actualización de seguridad.

Estas notificaciones ayudan a los equipos a responder rápidamente cuando la corrección requiere atención.

Alertas de flujo de datos

El análisis de flujo de datos detecta posibles problemas de seguridad en el código, entre los que se incluyen:

  • Usar datos de una manera que ponga en peligro la seguridad.
  • Pasar argumentos peligrosos a funciones.
  • Filtrar información confidencial.

GitHub muestra cómo se mueven los datos por el código cuando las alertas de análisis de código informan sobre el flujo de datos. Puede usar estas alertas de flujo de datos para identificar las áreas del código que filtran información confidencial. Este conocimiento puede ayudarle a identificar el punto de entrada de los ataques por parte de usuarios malintencionados.

Niveles de gravedad

Los resultados del examen de código que tengan una gravedad de Error provocan un error de comprobación de forma predeterminada.

Los niveles de gravedad de alerta son:

  • Error
  • Warning
  • Note

Puede especificar el nivel de gravedad a partir del cual las solicitudes de incorporación de cambios que desencadenen alertas de análisis de código deben fallar.

Niveles de gravedad de seguridad

Las consultas de seguridad que el examen de código genera muestran los niveles de gravedad de seguridad de las alertas.

Los niveles de gravedad de seguridad son:

  • Crítico
  • Alto
  • Medio
  • Bajo

GitHub usa datos del Sistema de puntuación de vulnerabilidades comunes (CVSS) para calcular la gravedad de seguridad de una alerta.

Los resultados del examen de código que tengan una gravedad de seguridad crítica o alta provocan un error de comprobación de forma predeterminada. Puedes especificar qué nivel de gravedad de seguridad debe provocar un fallo en la comprobación de los resultados del análisis de código.

Cerrar una alerta de análisis de código

Tiene dos maneras de cerrar una alerta:

  • Corrija el problema en el código.
  • Descarte o elimine la alerta.

Descartar una alerta de examen de código

Descartar una alerta es una manera de cerrar una alerta que considere que no es necesario solucionar. Por ejemplo, podría descartar una alerta para un error en el código usado solo para las pruebas. También puede descartar una alerta si el esfuerzo necesario para corregir el error es mayor que la posible ventaja de mejorar el código.

Puede descartar alertas de anotaciones de análisis de código en el código o en la lista de resumen de la pestaña Seguridad . Para descartar una alerta de la lista, seleccione el menú Descartar alerta , seleccione un motivo para descartar y, a continuación, seleccione el botón Descartar alerta .

Animación que muestra el menú desplegable y el botón para descartar una alerta de análisis de código.

Al descartar una alerta:

  • La alerta se descarta en todas las ramas.
  • La alerta se quita del número de alertas actuales del proyecto.
  • La alerta se mueve a la lista Cerrada en el resumen de alertas. Puede volver a abrirlo desde allí si es necesario.
  • Se registra el motivo por el que cerró la alerta.
  • La próxima vez que se ejecute el examen de código, el mismo código no generará una alerta.