SetValue.NETSetValue.NET

GitHub Code Scanning

October 19, 2020

A finales del pasado mes de septiembre, GitHub nos sorprendía con el anuncio de la nueva herramienta de Code Scanning disponible de forma general. Esta nueva herramienta nos permitirá analizar el código de nuestros repositorios públicos, en busca de vulnerabilidades de seguridad o errores existentes antes de que lleguemos a publicar la solución en un entorno productivo.

Code scanning es una característica que podemos habilitar en nuestros repositorios públicos, que nos va a permitir encontrar, clasificar y priorizar los fixes que se deben realizar sobre los problemas existentes en nuestro código. Por supuesto, también va a lograr que nuestro código vaya mejorando y que no se repitan los errores en el futuro.

Este escaneo se puede desencadenar de forma periódica o con cambios realizados en el repo con nuevos push o con la aceptación de pull requests, todo ello gracias a las GitHub Actions.

Esta característica es gratuita para repositorios públicos. Para repositorios privados sólo está disponible para GitHub Enterprise a través de la licencia Advanced Security, y conlleva un coste adicional.

Activar Code Scanning

Para activar Code Scanning solo es necesario tener permisos de escritura sobre el repositorio. GitHub ofrece diversas opciones para habilitar Code Scanning, por un lado, provee soporte completo para análisis CodeQL, pero también soporta utilizar herramientas de terceros.

CodeQL es un motor de análisis de la semántica del código, que lo trata como datos, permitiendo encontrar potenciales vulnerabilidades en el código con una mayor precisión que los analizadores estáticos tradicionales.

En la pestaña de Security en nuestro Repo público, encontramos la opción de activar el Code scanning alerts, sin embargo, si accedes a un Repo privado, encontrarás el enlace para contactar con Ventas, pues esta funcionalidad sólo es gratuita en los repositorios públicos.

Contact Sales Private Repo

Ya en un repositorio público, accedemos a la pestaña de Security, y pulsamos en Set up code scanning.

Code scanning alerts

Una vez accedemos a la configuración, para empezar a utilizarlo tenemos dos tipos de opciones, configurar CodeQL Analysis o utilizar herramientas de terceros como Xanitizer u OSSAR. Para este artículo, utilizaremos la configuración de CodeQL.

Code scanning provider

Pulsamos en Set up this workflow en la configuración de CodeQL Analysis, y esto nos creará un nuevo fichero yml con la configuración del análisis de código. Adaptamos el fichero para que la GitHub Action se ejecute con cada push y pull request en master.

Nota: El código de este repositorio ya está compilado, por lo que no es necesario compilarlo, así que nos limitaremos únicamente a ejecutarlo.

name: "CodeQL Analysis"

on:
  push:
    branches: [master]
  pull_request:
    branches: [master]

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        language: ['javascript']

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v1
      with:
        languages: ${{ matrix.language }}

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v1

Modificamos el fichero yml y procedemos a hacer commit de los cambios.

GitHub Action commit

Como hemos configurado que la Action se ejecute con los push en master, automáticamente se lanzará el nuevo workflow de análisis.

GitHub Action enqueued

Si accedemos al detalle de la Action podemos ver cómo se ejecuta el análisis.

Code Analysis running

Tras finalizar el análisis podemos ver los resultados de este, en el menú de seguridad, en el apartado de View alerts.

View alerts

En este caso, este repositorio parece que todo se está haciendo más o menos bien, tenemos únicamente 8 warnings, de tres tipos distintos.

Log alerts

Conclusiones

GitHub nos sorprende con una nueva funcionalidad que da un plus a nuestros proyectos, nos permite mejorar nuestro código a la par que nos hace ver usos inseguros que puedan suponer un riesgo para nuestro producto. CodeQL Analysis nos da una funcionalidad de forma gratuita, que quizás para proyectos más complejos puede ser insuficiente. No obstante, GitHub nos da la opción de utilizar herramientas de terceros para analizar el código.

Buy Me A Coffee