Un webhook n’est pas seulement une URL qui reçoit des données d’une plateforme externe. C’est une porte d’entrée qui peut créer une commande, mettre à jour une fiche client, émettre une alerte, modifier des stocks ou lancer une automatisation. Si un événement provenant d’une source non vérifiée, répété ou comportant des données inattendues est accepté, une intégration utile peut provoquer des actions métier indues.
Le problème exige de combiner des contrôles techniques et opérationnels : savoir quel fournisseur peut appeler, quels événements sont autorisés, quelles données sont acceptables et quelle conséquence précise chaque message peut avoir. L’objectif n’est pas de bloquer les intégrations, mais de les concevoir de sorte qu’une défaillance, une nouvelle tentative ou une notification anormale ne se transforme pas automatiquement en commande, en débit, en changement d’état ou en fausse alerte.
Le risque : une notification peut devenir une action métier
Dans une intégration courante, une passerelle de paiement, un site d’e-commerce, un CRM ou un outil de messagerie envoie une notification de serveur à serveur à un endpoint dédié. Le destinataire ne devrait pas considérer ces données comme fiables au seul motif qu’elles proviennent d’une intégration connue. OWASP identifie la consommation non sécurisée d’API comme un risque lorsqu’une application fait excessivement confiance à des services intégrés et réduit les contrôles d’authentification, de chiffrement ou de validation des données reçues. [1]
Dans un exemple hypothétique, une boutique peut recevoir l’événement « paiement confirmé » et libérer une commande sans vérifier son authenticité, sa référence interne ou son état réel. Un autre système pourrait recevoir deux fois une notification de création de client et créer des enregistrements en double. L’impact dépend de l’action reliée au webhook ; il est donc préférable d’évaluer chaque endpoint comme une composante d’un processus métier, et non comme un simple détail de configuration.
Commencez par un inventaire et un périmètre défini
Avant de modifier du code ou des règles d’automatisation, établissez un inventaire des webhooks. Pour chacun, identifiez le fournisseur émetteur, l’URL de réception, les événements autorisés, le système cible, la personne responsable, le mécanisme d’authentification et la date de la dernière révision. Maintenir une visibilité sur les API et leurs interfaces aide à réduire les problèmes découlant d’un inventaire insuffisant ou d’interfaces oubliées. [5]
Définissez également ce que chaque événement valide peut faire. Le fait qu’une notification soit authentifiée ne signifie pas qu’elle doit pouvoir modifier n’importe quelle donnée. Un événement de livraison devrait uniquement mettre à jour l’état d’expédition prévu ; il ne devrait pas créer de remboursements, modifier des prix ni changer des autorisations. Cette séparation permet d’appliquer le principe d’effet minimal : chaque message ne déclenche que l’action justifiée par son type et son contexte.
- Documentez le fournisseur, l’endpoint, le responsable, les événements acceptés et le système concerné.
- Indiquez si l’événement contient des données personnelles, des références de commande ou des informations sensibles.
- Établissez un moyen de désactivation contrôlée afin d’arrêter temporairement une intégration en cas d’incident.
Vérifiez l’origine avant d’exécuter l’action
La route de réception doit utiliser HTTPS et être dédiée au webhook, sans la transformer en point d’entrée générique pour de multiples fonctions. L’authentification doit suivre le mécanisme documenté par chaque fournisseur : elle peut reposer sur une signature calculée sur la requête, un secret associé à l’abonnement ou un jeton. NIST recommande d’intégrer l’authentification de l’appelant ainsi que la validation des requêtes et des réponses parmi les contrôles de protection des API. [2]
La vérification doit être réalisée avant de déclencher des effets métier. Selon le modèle du fournisseur, elle peut impliquer de vérifier une signature, un horodatage, un identifiant d’abonnement ou les éléments d’un JWT, tels que son expiration, son émetteur, sa signature et son audience. Microsoft Graph décrit ces modèles pour ses notifications et indique que la validation correspondante doit être terminée avant de considérer une notification comme authentique. Les secrets doivent être conservés hors du code de l’application et protégés de manière adéquate. [3] [4]
- Rejetez les requêtes qui n’utilisent pas la méthode HTTP prévue.
- Comparez les signatures ou les secrets au moyen de mécanismes sécurisés fournis par le langage ou la plateforme.
- Définissez des limites de taille pour les requêtes et des délais d’acceptation raisonnables lorsque le fournisseur les prend en charge.
Validez le contenu et rendez le traitement idempotent
Une signature valide atteste le mécanisme d’envoi, mais ne remplace pas la validation du contenu. Vérifiez le type d’événement, la structure attendue, les champs obligatoires, les formats, les plages, les valeurs autorisées et les références internes avant d’envoyer des données vers un ERP, un CRM, WordPress ou un système de commandes. OWASP recommande de valider et d’assainir les données provenant d’API externes, car elles doivent être traitées comme des informations non fiables. [1]
Pour éviter les doublons, enregistrez un identifiant unique de l’événement, le fournisseur et le résultat de son traitement. Avant de créer une commande, d’émettre un ticket ou de mettre à jour un stock, vérifiez si cette combinaison a déjà été acceptée. Si elle arrive à nouveau, consignez la tentative à des fins d’investigation, mais ne répétez pas l’action. L’idempotence doit être conçue dans le système destinataire, car les émetteurs peuvent renvoyer des notifications après des erreurs ou des délais d’attente. [4]
- Conservez une fenêtre de déduplication adaptée au cycle de chaque processus.
- Associez l’ID de l’événement à la référence interne de commande, de client ou de transaction.
- Traitez séparément les événements répétés, invalides et en attente de révision afin de faciliter leur suivi.
Séparez la réception de l’exécution et conservez des preuves utiles
Lorsque le fournisseur le permet, validez rapidement la notification, stockez-la de manière contrôlée et envoyez-la dans une file d’attente pour son traitement ultérieur. Cela réduit le risque qu’une opération lente provoque un délai d’attente et une nouvelle tentative de l’émetteur. Microsoft Graph, par exemple, recommande de confirmer ou de mettre rapidement les notifications en file d’attente et prévoit des nouvelles tentatives lorsqu’il ne reçoit pas de réponse satisfaisante. [4]
Le traitement différé n’élimine pas les contrôles : le processus qui consomme la file d’attente doit appliquer à nouveau les règles d’idempotence, valider le contexte métier et enregistrer le résultat final. Conservez la date, le fournisseur, l’ID de l’événement, le résultat de l’authentification, le résultat de la validation, l’action demandée et la référence interne. Évitez de conserver des corps complets s’ils incluent des jetons, des secrets ou des données personnelles inutiles. Testez les flux uniquement dans des environnements autorisés, avec des événements de test documentés ou en préproduction, y compris des signatures invalides, des
- Définissez qui examine les événements échoués ou en attente.
- Alertez en cas d’augmentations anormales des rejets, des doublons ou des erreurs de traitement.
- Révisez l’inventaire et les règles lorsque le fournisseur, l’endpoint ou le processus métier change.
Questions fréquentes
Suffit-il de dissimuler l’URL du webhook ?
Non. Une URL peu visible ne remplace ni l’authentification ni la validation. L’endpoint doit vérifier le mécanisme pris en charge par le fournisseur, n’accepter que les événements attendus et limiter les actions qu’il peut déclencher.
Pourquoi reçois-je le même webhook plus d’une fois ?
De nombreux émetteurs réessaient une notification s’ils ne reçoivent pas de réponse appropriée ou si un délai d’attente survient. Le destinataire doit le prévoir au moyen d’un identifiant d’événement, d’un registre des traitements effectués et d’une logique idempotente afin de ne pas répéter l’action métier.
Que faut-il examiner après un incident impliquant un webhook ?
Examinez les éléments de preuve disponibles : fournisseur, ID de l’événement, heure, résultat de l’authentification, validation du contenu, action demandée et référence interne. Corrigez ensuite la règle précise, testez la modification dans un environnement autorisé et mettez à jour l’inventaire du webhook.
Sources primaires
- API10:2023 Unsafe Consumption of APIs - OWASP API Security Top 10
- SP 800-228, Guidelines for API Protection for Cloud-Native Systems | CSRC
- Security Strategies for Microservices-based Application Systems
- Receive change notifications through webhooks - Microsoft Graph | Microsoft Learn
- API Top 10 - OWASP Developer Guide
- OWASP Top 10 API Security Risks – 2023 - OWASP API Security Top 10