Validación de Webhooks desde GitHub usando User Agent

Clase 23 de 30Curso de Ciberseguridad para Desarrollo Web

Resumen

¿Qué es el Cross-Site Scripting (XSS) y cuál es su impacto?

El Cross-Site Scripting (XSS) es una vulnerabilidad web que permite a los atacantes inyectar código malicioso en aplicaciones web, aprovechándose de las entradas disponibles en el código. Este tipo de ataque es preocupante ya que el código inyectado puede realizar acciones maliciosas, como el robo de cookies o el acceso a cuentas de usuario. Aunque se ve más reflejado en código JavaScript, puede ocurrir en múltiples lenguajes de programación.

¿Cómo se protege el código contra XSS?

  1. Validación de Entradas: Es fundamental validar las entradas que recibe tu aplicación. Asegúrate de que cumplan con el formato esperado, por ejemplo, usando JSON en tus payloads.

  2. Authorizers para Webhooks: Asegúrate de que las solicitudes al API provienen de fuentes legítimas. En el contexto del uso de GitHub, es importante verificar que los webhooks provengan realmente de GitHub.

¿Cómo configurar un webhook de GitHub de manera segura?

Un webhook permite que GitHub se comunique con tu aplicación cuando ocurren eventos específicos, como un push. Configurarlo correctamente es esencial para asegurar que la comunicación sea segura.

¿Cómo se direcciona el webhook al API endpoint?

  1. Configuración del Endpoint Real: Se debe actualizar el endpoint del webhook en GitHub para que apunte a tu API Gateway y no a un entorno temporal como Ngrok.

  2. Pruebas y Confirmación: Realiza un commit en GitHub para activar el webhook y verifica en la consola de GitHub y en tu API que la información fue recibida correctamente.

¿Cómo validar que un webhook viene de GitHub?

Para validar que un webhook proviene de GitHub, se puede usar un authorizer. Aquí te describo los pasos para ajustar el authorizer:

  • Configuration del Authorizer: En el API Gateway, adjunta un authorizer a tu endpoint de post de commit.
  • Revisar el User Agent: Ajusta el header a user agent y verifica que contenga el prefijo GitHub-Hookshot.

Implementación técnica y manejo de datos

Una vez configurado el authorizer, el próximo paso es examinar la solicitud usando CloudWatch Logs para comprobar la información de identidad. Esto asegura que los webhooks vienen de GitHub.

Manejo del Código

  1. Extracción de Datos: Desde el lambda de Authorizer, se extrae el user agent del header y se valida que tenga el prefijo correcto.

    const githubUserAgentPrefix = "GitHub-Hookshot";
    const userAgentHeader = headers["user-agent"];
    
  2. Interacción con la Base de Datos: Configurar las lambda para manejar completar solicitudes hacia la base de datos, reflejando las operaciones realizadas en cada evento.

Deployment y pruebas finales

  1. Compilación de Lambdas: Usa comandos como make publish para compilar y publicar los lambdas actualizados.
  2. Implementación con Terraform: Realiza un Terraform plan y Terraform apply para desplegar los cambios en la infraestructura.

Verificación en la base de datos

Con todo configurado, realiza un SELECT en tu base de datos para confirmar que el webhook se insertó adecuadamente.

Reflexiones finales

La validación de webhooks es esencial para proteger servicios que interactúan en tiempo real con plataformas externas, como GitHub. El uso de headers apropiados, como user-agent, es una técnica eficaz. Pero, ¿qué ocurre si un atacante cambia el header de user-agent? Este es un escenario que se debe tener en cuenta y que abordaremos en nuestra próxima clase. ¡Sigue aprendiendo y fortaleciendo tus conocimientos sobre seguridad!