¿Por qué estás aquí?
No perdamos el tiempo. Estás aquí porque estás desarrollando una funcionalidad de webhook en tu aplicación. Desafortunadamente, hay bastantes cosas que pueden salir mal desde una perspectiva de seguridad. Este artículo tiene como objetivo asegurar que no cometas errores conocidos al construir webhooks.
¿Cómo funcionan los webhooks?
A modo de resumen rápido, los webhooks son solicitudes HTTP(S) a terceros para informarles sobre algo que ha ocurrido en su aplicación. Por ejemplo, si ofrece una aplicación que genera facturas, podría ofrecer a sus clientes la oportunidad de configurar una funcionalidad de webhook que se active cuando se cree una nueva factura. Esto significa que, cuando se cree la factura, su aplicación enviará una solicitud HTTP(S) a una ubicación determinada por el usuario. El usuario puede utilizar esto para configurar sus propios flujos de trabajo personalizados que se activen mediante el webhook, como programar correos electrónicos de recordatorio o enviar un mensaje al cliente en Slack.
Lista de verificación: asegurando implementaciones de webhooks
1. Contrarrestar ataques de tipo SSRF
En este tipo de ataque, el atacante intenta obtener información (por ejemplo, metadatos de instancia en la nube) explotando la funcionalidad de webhook. Para contrarrestarlo, se deben tomar las siguientes medidas.
✅ Validar la entrada del usuario
- Básico: Realiza una validación de URL sencilla.
- Mejor: Asegúrate de que la URL empiece por "https://", deshabilita "file://" y otros esquemas no HTTPS.
✅ Restringir direcciones locales
- Bloquea IPs locales típicas: 127.0.x, 192.168.x, 172.x.
- Prohibir "localhost" y "http://"
✅ Limitar la exposición de logs
- Mostrar solo los códigos de estado HTTP en los logs orientados al usuario.
- Evita mostrar encabezados o contenido del cuerpo.
✅ Avanzado: Validación de URL mejorada
- Se requiere una cabecera de respuesta específica para las peticiones POST, única para el cliente.
- Mantener esta verificación de forma continua, incluso después de la configuración inicial, para contrarrestar los cambios de DNS.

2. Permite a tus usuarios verificar la autenticidad de los datos
Su consumidor de webhook debe tener una forma de saber que los datos provienen realmente de su aplicación. Puede utilizar cualquiera de los siguientes métodos.
✅ Verificación de Mensajes de Prueba
Primero, permite a los usuarios activar un mensaje de prueba para probar los mecanismos de seguridad.
✅ Hash de Verificación HMAC
Uno de los mecanismos de seguridad más efectivos para las funcionalidades de webhooks es la implementación de HMAC para la integridad y autenticidad de los datos.
El proceso básico se puede resumir de la siguiente manera:
- Generar un hash del payload utilizando SHA-256 y una clave secreta.
- Enviar el HMAC con el payload.
- Los destinatarios recrean el hash para verificar la autenticidad e integridad de la carga útil.
✅ Inclusión de Marca de Tiempo
Esta es una mitigación de seguridad más avanzada. Añada una marca de tiempo al payload para prevenir ataques de repetición. Asegura que los mensajes no se reutilicen ni se alteren.
✅ Certificados TLS del lado del cliente
Autenticar llamadas HTTP con certificados TLS del lado del cliente. Esto es particularmente atractivo para consumidores a nivel empresarial.
3. Limitar la tasa y evitar la sobreexposición de datos
Para la seguridad de los webhooks, enviar pocos datos es más seguro que adjuntar demasiados. Aunque las devoluciones de llamada de los webhooks deberían cifrarse mediante HTTPS, nunca se sabe quién podría controlar un nombre de dominio al cabo de unos años.
✅ Minimizar la Exposición de Datos
- Evita enviar Información de Identificación Personal (PII) o datos sensibles.
- En lugar de enviar múltiples puntos de datos (como contact_id, email, nombre), simplemente envía el contact_id. Permite a los usuarios obtener datos adicionales a través de tu API pública si es necesario.
✅ Comunicación de Política de Reintentos
- Comunicar claramente la política de reintentos y los límites de tasa a los usuarios.
- Infórmeles que, debido a los reintentos, los mensajes pueden llegar desordenados.
- Define que cualquier respuesta 2xx es un éxito; otras respuestas deberían activar un reintento.
✅ Usar un Sistema de Colas para la Entrega
Implementa un sistema de cola para gestionar la entrega de webhooks y limitar la salida. Este enfoque ayuda a evitar la sobrecarga accidental de los servidores de tus usuarios en casos extremos, como una importación masiva de CSV que desencadene un número excesivo de llamadas y reintentos de webhook.
4. Extra: Alertas de anomalías
Esto es más por comodidad para el desarrollador que por seguridad, pero es algo bueno de implementar de todos modos.
- Alertar a los usuarios cuando se detecten respuestas 4xx y 5xx
- Enviar notificaciones para informar a los usuarios de cualquier fallo
Esta adición mejora la transparencia y la capacidad de respuesta en su sistema de webhooks.
Conclusión
¡Y ahí lo tienes! Hemos cubierto algunos pasos para que tus webhooks no solo sean funcionales, sino también seguros y fáciles de usar. Implementar estos pasos protegerá tu aplicación y también mejorará la experiencia general del usuario. ¡Feliz codificación! 🚀🔒👨💻
Aikido Security es una plataforma de seguridad de software centrada en el desarrollador. Ayudamos a mantener tu producto seguro para que puedas centrarte en escribir código. No’t necesitas hablar con un equipo de ventas - simplemente conecta tu cuenta de GitHub, GitLab, Bitbucket o Azure DevOps para empezar a escanear tus repositorios gratis.
Protege tu software ahora.


.jpg)
.avif)
