Aikido

Checklist de sécurité des webhooks : Comment créer des webhooks sécurisés

Willem DelbareWillem Delbare
|
#

Pourquoi êtes-vous ici ?

Ne perdons pas de temps. Vous êtes ici parce que vous développez une fonctionnalité de webhook dans votre application. Malheureusement, de nombreux problèmes peuvent survenir du point de vue de la sécurité. Cet article vise à vous assurer que vous ne commettez pas d'erreurs courantes lors de la création de webhooks.

Comment fonctionnent les webhooks ?

Pour un bref rappel, les webhooks sont des requêtes HTTP(S) envoyées à des tiers pour les informer d'un événement survenu dans votre application. Par exemple, si vous proposez une application qui génère des factures, vous pourriez offrir à vos clients la possibilité de configurer une fonctionnalité de webhook qui se déclenche lorsqu'une nouvelle facture est créée. Cela signifie que lorsque la facture est créée, votre application enverra une requête HTTP(S) à un emplacement déterminé par l'utilisateur. L'utilisateur peut s'en servir pour configurer ses propres workflows personnalisés déclenchés par le webhook, comme la planification d'e-mails de rappel ou l'envoi d'un message au client sur Slack.

Checklist : sécurisation des implémentations de webhooks

1. Déjouer les attaques de type SSRF

Dans ce type d'attaque, l'attaquant tente d'obtenir des informations (par exemple, des métadonnées d'instance dans un cloud) en exploitant la fonctionnalité de webhook. Pour y faire face, vous devez prendre les mesures suivantes.

✅ Valider les entrées utilisateur

  • Basique : Effectuer une validation d'URL simple.
  • Mieux : Assurez-vous que l'URL commence par "https://", interdisez "file://" et les autres schémas non-HTTPS.

✅ Restreindre les adresses locales

  • Bloquer les adresses IP locales typiques : 127.0.x, 192.168.x, 172.x.
  • Interdire "localhost" et "http://"

✅ Limiter l'exposition des logs

  • Affichez uniquement les codes de statut HTTP dans les logs destinés aux utilisateurs.
  • Évitez d'afficher les en-têtes ou le contenu du corps.

✅ Avancé : Validation d'URL améliorée

  • Exiger un en-tête de réponse spécifique pour les requêtes POST, unique au client.
  • Maintenez cette vérification en continu, même après la configuration initiale, pour contrer les modifications DNS.
Sécurité des webhooks : renforcez vos systèmes pour protéger vos utilisateurs

2. Permettez à vos utilisateurs de vérifier l'authenticité des données

Votre consommateur de webhook doit avoir un moyen de savoir que les données proviennent réellement de votre application. Vous pouvez utiliser l'une des méthodes suivantes.

Vérification des messages de test

Tout d'abord, permettez aux utilisateurs de déclencher un message de test pour tester les mécanismes de sécurité.

Hachage de vérification HMAC

L'un des mécanismes de sécurité les plus efficaces pour les fonctionnalités de webhooks est l'implémentation de HMAC pour garantir l'intégrité et l'authenticité des données.

Le processus de base peut être résumé comme suit :

  • Générer un hash du payload en utilisant SHA-256 et une clé secrète.
  • Envoyer le HMAC avec la charge utile.
  • Les destinataires recréent le hash pour vérifier l'authenticité et l'intégrité de la charge utile.

Inclusion d'horodatage

Il s'agit d'une mesure d'atténuation de sécurité plus avancée. Ajoutez un horodatage à la charge utile pour prévenir les attaques par rejeu. Cela garantit que les messages ne sont pas réutilisés ou altérés.

Certificats TLS côté client

Authentifier les appels HTTP avec des certificats TLS côté client. Ceci est particulièrement intéressant pour les consommateurs de niveau entreprise.

3. Limiter le débit et éviter la surexposition des données

Pour la sécurité des webhooks, envoyer trop peu de données est plus sûr que d'en joindre trop. Bien que les callbacks de webhook devraient être chiffrés via HTTPS, vous ne pouvez jamais savoir qui pourrait contrôler un nom de domaine après quelques années.

Minimiser l'exposition des données

  • Évitez d'envoyer des informations personnellement identifiables (PII) ou des données sensibles.
  • Au lieu d'envoyer plusieurs points de données (comme contact_id, email, nom), envoyez simplement le contact_id. Laissez les utilisateurs récupérer des données supplémentaires via votre API publique si nécessaire.

Communication de la politique de réessai

  • Communiquez clairement la politique de réessai et les limites de débit aux utilisateurs.
  • Informez-les qu'en raison des réessais, les messages peuvent arriver dans le désordre.
  • Définissez que toute réponse 2xx est un succès ; les autres réponses doivent déclencher une nouvelle tentative.

Utiliser un système de file d'attente pour la livraison

Implémentez un système de file d'attente pour gérer la livraison des webhooks et limiter le débit de sortie. Cette approche permet d'éviter de surcharger accidentellement les serveurs de vos utilisateurs dans des edge cases, comme une importation CSV volumineuse déclenchant des appels de webhook et des tentatives excessifs.

4. Bonus : Alertes d'anomalies

C'est davantage pour la commodité des développeurs que pour la sécurité, mais c'est néanmoins une bonne chose à implémenter.

  • Alerter les utilisateurs en cas de réponses 4xx et 5xx
  • Envoyer des notifications pour informer les utilisateurs en cas d'échec

Cet ajout améliore la transparence et la réactivité de votre système de webhook.

Conclusion

Et voilà ! Nous avons abordé quelques étapes pour rendre vos webhooks non seulement fonctionnels, mais aussi sécurisés et conviviaux. La mise en œuvre de ces étapes protégera votre application et améliorera l'expérience utilisateur globale. Bon codage ! 🚀🔒👨‍💻

Aikido Security est une plateforme de sécurité logicielle axée sur les développeurs. Nous aidons à sécuriser votre produit, afin que vous puissiez vous concentrer sur l'écriture de code. Vous n’avez pas besoin de parler à une équipe commerciale - connectez simplement votre compte GitHub, GitLab, Bitbucket ou Azure DevOps pour commencer à scanner vos dépôts gratuitement.

4.7/5

Sécurisez votre logiciel dès maintenant.

Essai gratuit
Sans CB
Planifiez une démo
Vos données ne seront pas partagées - Accès en lecture seule - Pas de CB nécessaire

Sécurisez-vous maintenant.

Sécuriser votre code, votre cloud et votre runtime dans un système centralisé unique.
Détectez et corrigez les vulnérabilités rapidement et automatiquement.

Pas de carte de crédit requise | Résultats du scan en 32 secondes.