Webhooks pendants : Que se passe-t-il lorsqu'un sous-domaine de tunnel publié est encore enregistré dans Stripe, GitHub ou Shopify
Vous avez abandonné un sous-domaine de tunnel mais laissé l'enregistrement dans Stripe, GitHub ou Shopify ? Découvrez comment les webhooks pendants exposent des charges utiles, ainsi qu'une liste de contrôle d'audit et la rotation des secrets.

Quick answer
Webhooks pendants : Risques des sous-domaines de tunnel publiés: webhook testing answer
For local webhook testing, run your app locally, expose it with a public HTTPS tunnel, and paste the stable callback URL into the provider dashboard.
How do I test webhooks on localhost?
Start your local server, open a public HTTPS tunnel to that port, configure the provider webhook URL, and inspect events in your local logs.
Why does a stable webhook URL matter?
Stable URLs prevent provider dashboards from needing manual callback updates every time you restart a tunnel.
Vous arrêtez le tunnel, fermez l’ordinateur portable et passez à autre chose. Stripe, GitHub et Shopify ne le savent pas. Ils conservent l’URL que vous leur avez donnée et continuent d’essayer de livrer des événements à cette URL jusqu’à ce que quelqu’un supprime l’enregistrement ou que le fournisseur abandonne.
Cette inscription restante est un webhook pendants: un abonnement côté fournisseur qui pointe vers un nom d’hôte que vous ne contrôlez plus. Si le nom que vous avez utilisé était un sous-domaine de tunnel, la question est simple et inconfortable. Qui peut réclamer ce nom ensuite, et que vos anciennes inscriptions leur enverront-elles ?
Ce guide répond à cela pour les trois fournisseurs que les développeurs utilisent le plus souvent. Il fournit ensuite une liste de contrôle d’audit par fournisseur et un ordre sûr pour se désabonner et faire tourner les secrets.
Qu’est-ce qu’un webhook pendants?
Une inscription webhook vit dans le tableau de bord ou l’API du fournisseur, et non dans votre code. Supprimer votre projet ou laisser expirer une session de tunnel ne change rien là-bas. Contrairement à un enregistrement DNS obsolète, l’initiateur est l’expéditeur: le fournisseur pousse les événements vers l’URL sans que quiconque ne la visite.
Dans de nombreuses équipes, personne ne possède l’inventaire, car les enregistrements sont créés par celui ou celle qui déboguait cette semaine.
Les vendeurs de sécurité considèrent déjà cela comme un risque de prise de contrôle. Le guide webhook d’Obsidian Security avertit que les points de terminaison pointant vers des URL dépréciées créent des opportunités de prise de contrôle lorsque l’infrastructure est migrée ou décommissionnée. Un sous-domaine de tunnel publié est le même problème sur une échelle de temps beaucoup plus courte.
Pourquoi cela mérite un audit maintenant
Trois points de données encadrent le problème. Aucun ne mesure directement les webhooks pendants, prenez-les donc comme contexte, pas comme preuve.
L’expansion des webhooks est mal documentée. Obsidian Security rapporte que l’entreprise moyenne gère 47 points de terminaison de webhook actifs, tandis que les équipes de sécurité ne peuvent documenter que 23% d’entre eux dans leurs inventaires d’intégration. C’est une référence fournie par le fournisseur, pas un recensement audité.
Les tiers sont impliqués dans près de la moitié des violations. Verizon’s 2026 Data Breach Investigations Report (publié mai 2026) place l’implication de tiers à 48% des violations. Cela augmente par rapport à 30% dans l’édition 2025 et 15% en 2024. « Tiers » est une catégorie large. Verizon le divise en trois archétypes: une vulnérabilité dans le logiciel d’un fournisseur utilisé comme porte d’entrée, un fournisseur qui héberge vos données étant compromis, et un fournisseur connecté à votre environnement. Les erreurs de configuration des webhooks ne constituent qu’une petite partie de cela.
Le nettoyage des secrets divulgués est lent. L’édition 2025 a constaté que le temps médian de remédiation des secrets divulgués découverts dans les dépôts GitHub était de 94 jours. Le nettoyage lent des identifiants et des intégrations est le fil conducteur.
Qui peut réclamer le nom ensuite?
Cela dépend de la façon dont votre fournisseur de tunnel nomme les choses, et c’est là que se décide la plupart des risques.
- Noms aléatoires (
k8m9n2.example.dev) sont difficiles à viser, mais une inscription pointant vers l’un d’eux est toujours pendante, et le fournisseur peut recycler le nom. - Noms choisis (
stripe-webhook,oauth-dev,acme-qa) sont beaucoup plus faciles à deviner. Si le service autorise n’importe quel compte à demander un nom qui n’est pas utilisé, celui qui le demande en premier après votre départ l’obtient. - Noms réservés (retenus pour un compte même lorsqu’aucun tunnel n’est en cours) comblent l’écart, mais seulement tant que la réservation existe.
La prévisibilité est plus importante que ce à quoi les gens s’attendent. Les noms qui apparaissent dans des exemples de documentation sont ceux qui sont le plus susceptibles d’être copiés, réutilisés et laissés de côté.
Ce que documente aujourd’hui InstaTunnel
Voici ce que la documentation publique d’InstaTunnel, sa page de tarification et ses conditions disent au 14 novembre 2026, et ce qu’elles omettent.
Documenté :
- Les sous-domaines personnalisés sont inclus dans le plan gratuit, mais vous devez vous connecter pour en choisir un. Les tunnels anonymes reçoivent un nom aléatoire de six caractères et durent 24 heures. Le CLI définit un nom avec
--subdomain(ou-s), par exempleinstatunnel 3000 -s myapp. - Les noms sont attribués au premier arrivé, premier servi pour les utilisateurs connectés, et la documentation indique que le plan gratuit n’inclut pas de réservation. Un nom pris renvoie une erreur « sous-domaine déjà pris ».
- Les noms de première partie et sensibles à la sécurité tels que
api,loginetsupportsont réservés et ne peuvent pas être réclamés. - Les sessions du plan gratuit durent 24 heures, donc un tunnel peut se terminer sans que vous ayez rien fait.
- Les connexions authentifiées doivent appartenir au propriétaire du tunnel, et depuis CLI 1.1.24, un deuxième client ne peut plus remplacer silencieusement l’actif. Tant que votre tunnel est actif, quelqu’un d’autre ne peut pas le détourner.
instatunnel --listaffiche vos tunnels, etinstatunnel --kill <subdomain>en stoppe un.- Le plan Business répertorie les « réservations de sous-domaines personnalisés » comme une fonctionnalité. Ce n’est pas le cas du plan Pro.
- Les exemples de la documentation utilisent des noms comme
stripe-webhook,oauth-dev,acme-qa,myappetmyapp-dev. Le guide de dépannage recommande également un sous-domaine fixe afin que les tableaux de bord des fournisseurs conservent une URL stable. Les deux font que ces noms aient de fortes chances d’être enregistrés par les fournisseurs.
Non documenté :
- Combien de temps un nom du plan gratuit reste indisponible après l’arrêt de votre tunnel ou l’expiration de votre session. La docs disent seulement que les noms gratuits ne sont pas réservés.
- Si les vérifications de propriété sur les connexions dépassent la session, et si un utilisateur précédent obtient une priorité sur un nom.
- Ce qui arrive aux noms lorsqu’un compte est résilié. Les conditions indiquent que les tunnels actifs se terminent à la résiliation mais ne disent rien sur les noms.
Jusqu’à ce que ces points soient écrits, l’hypothèse sûre pour tout nom que vous n’avez pas explicitement réservé est que il peut être réclamé par quelqu’un d’autre une fois que vous cessez de l’utiliser. Planifiez votre nettoyage en conséquence avec n’importe quel fournisseur de tunnel. L’audit ci-dessous fonctionne quel que soit le service et la façon dont il répond.
Ce que recevrait réellement un squatter
Supposez que quelqu’un contrôle désormais le nom d’hôte. Chaque fournisseur leur remet quelque chose de différent.
| Stripe | GitHub | Shopify | |
|---|---|---|---|
| Contenu des événements | Les événements snapshot portent une copie complète de la ressource affectée. Les événements « thin » portent moins, et vous récupérez le reste via l’API | Données de dépôts, de branches et de commits, noms et e-mails des auteurs; dépôts privés inclus | Données de commande et client, qui peuvent inclure noms, e-mails et adresses |
| Signature | Stripe-Signature, inclut un horodatage |
X-Hub-Signature-256, sans horodatage |
X-Shopify-Hmac-SHA256, sans horodatage |
| Nettoyage côté fournisseur si le point de terminaison échoue | Tentatives jusqu’à 3 jours en mode live, 3 fois sur quelques heures dans un sandbox | Pas de suppression automatique documentée | Tentatives jusqu’à 8 fois sur 4 heures; les abonnements propres à la boutique sont supprimés, ceux liés à l’application ne le sont pas |
Pour les trois, un squatter obtient :
- Tout dans la requête. Corps, en-têtes et l’intégralité du chemin d’URL et de la chaîne de requête. Les conseils de GitHub eux-mêmes indiquent de ne pas mettre des clés API ou d’autres identifiants dans l’URL de la charge utile. Si vous avez déjà intégré un jeton ou des identifiants d’authentification de base dans l’URL d’un webhook, ils sont passés au nouveau propriétaire.
- Un aperçu de votre activité. Noms de dépôts, e-mails des clients et volumes de commandes utiles pour le phishing et la reconnaissance sans qu’aucun événement forgé ne soit nécessaire.
- Une connexion TLS opérationnelle. Les fournisseurs vérifient le certificat de destination, mais le nom d’hôte est toujours servi par le point d’accès du fournisseur de tunnel avec un certificat valide, donc la vérification passe. Les vérifications de certificats n’informent pas le fournisseur que le nom a changé de mains.
- Une raison de répondre
200. Les fournisseurs considèrent une réponse non-2xx ou un délai comme un échec ; Shopify compte toute réponse en dehors de la plage 200, y compris les redirections. Un squatter qui renvoie 200 donne des livraisons qui semblent saines, ce qui supprime le comportement de réessai et de suppression qui, autrement, nettoierait l’enregistrement. C’est une inférence sur la façon dont l’échec est défini, et cela signifie que l’enregistrement peut survivre indéfiniment.
Ce qu’un squatter ne peut pas faire seul est forger un événement signé pour votre véritable point de terminaison. Ils n’ont pas votre secret de signature, et les charges utiles qu’ils reçoivent ne le contiennent pas. Cette protection n’est valable que si votre gestionnaire de production applique les signatures. GitHub, par exemple, n’envoie aucune en-tête de signature tant que vous n’avez pas configuré un secret sur le webhook. La vérification des signatures n’améliore pas la confidentialité de ce qui a été envoyé à la mauvaise adresse.
Un avertissement sur les replays : les bibliothèques officielles de Stripe rejettent par défaut les événements antérieurs à cinq minutes, mais les signatures de GitHub et Shopify ne portent pas d’horodatage. Dédupliquez aussi sur l’ID de livraison : X-GitHub-Delivery pour GitHub et X-Shopify-Webhook-Id pour Shopify.
Ne comptez pas sur le nettoyage côté fournisseur
Stripe’s documentation covers a three-day automatic retry window in live mode and three retries over a few hours in a sandbox. Third-party guides (Svix, Hookdeck) report that Stripe disables an endpoint after three days of continuous failures. Stripe’s own pages I checked don’t state that rule, so treat it as reported behaviour, not a guarantee.
GitHub lets you deactivate (reversible) or delete (permanent) repository and organization webhooks. Each GitHub App has one webhook URL; check the app’s settings. Recent Deliveries: repeated failures usually mean the destination is gone.
Shopify
- App-specific subscriptions: open
shopify.app.tomland check everyuriunder[[webhooks.subscriptions]]. - Shop-specific subscriptions: query
webhookSubscriptions(first: 50) { edges { node { id topic uri } } }through the GraphQL Admin API, for each shop and dev store your app is installed on. This query covers only API-created subscriptions, not TOML-managed ones, so you need both checks. - Check the delivery logs and metrics in the Dev Dashboard for failing or removed subscriptions. The delivery logs cover only the past seven days.
Everything else
- Repeat for Slack, Twilio, Meta/WhatsApp, PayPal, Zapier-style tools, CI systems and any OAuth app that stores a redirect URI. Callback URLs for login flows are a related risk, which we covered in Le Piège du Tunnel OAuth.
Prévenir le prochain webhook pendants
Le nettoyage est la solution, mais quelques habitudes réduisent le problème :
- Publier les noms délibérément. Faites de la suppression des inscriptions du fournisseur une partie du démontage d’un environnement de développement. Avec InstaTunnel, exécutez
--killsur le sous-domaine et supprimez ses enregistrements dans la même session. - N’utilisez pas les noms d’exemples de documentation. Si un guide utilise
stripe-webhookouoauth-dev, choisissez quelque chose de spécifique pour vous. - Réservez les noms sur lesquels vous comptez au lieu d’espérer que personne ne les demandera. Sur InstaTunnel cela signifie le plan Business, qui est le seul à répertorier des réservations. Sur le plan gratuit, rappelez-vous que les sessions se terminent après 24 heures.
- Laissez les outils gérer les URL de développement lorsque c’est possible. La docs de Shopify notent que l’URL du tunnel du CLI change à chaque exécution de
shopify app dev, et suggèrent uneurirelative (par exemple/webhooks) pour ne pas vous réenregistrer à chaque fois. - Limitez ce qu’un endpoint isolé peut recevoir. Les options
include_fieldsetfilterde Shopify limitent la charge utile et quelles livraisons se déclenchent, et Stripe vous permet de vous abonner uniquement aux types d’événements dont vous avez besoin. - Donnez à chaque enregistrement de développement un propriétaire et une date d’expiration. Les champs
descriptionetmetadatade Stripe sont conçus pour cela. - Conservez des secrets séparés par environnement, afin qu’une URL obsolète ne devienne jamais un problème de production.
- Placez les inscriptions dans le code, afin que celles qui sont oubliées soient remarquées lors des pull requests.
Une solution tentante ne marche pas: la protection par mot de passe sur votre tunnel vous protège uniquement tant que vous détenez le nom. Cela nécessite un plan Pro ou Business, et un fournisseur ne peut pas compléter un formulaire de mot de passe dans le navigateur. Un squatter sur le même nom d’hôte ne l’activera tout simplement pas.
FAQ
Qu’est-ce qu’un webhook pendants ?
Un abonnement webhook chez un fournisseur tel que Stripe, GitHub ou Shopify qui pointe toujours vers une URL que vous ne contrôlez plus, typiquement un sous-domaine de tunnel publié.
Une personne peut-elle reprendre mon ancien sous-domaine de tunnel ?
Cela dépend du service de tunnel. Si celui-ci permet à n’importe quel compte de demander un nom spécifique et ne conserve pas les noms publiés, alors oui. La documentation d’InstaTunnel décrit les noms du plan gratuit comme premier arrivé, premier servi sans réservation, et liste les réservations uniquement sous le plan Business. Consultez la documentation de votre fournisseur et ne supposez pas qu’un nom est sûr à moins qu’il soit explicitement réservé.
Un attaquant peut-il forger des événements Stripe ou GitHub en utilisant un webhook pendants ?
Non, pas contre un point d’exécution de production qui vérifie les signatures. Ils n’ont pas votre secret de signature. Ce qu’ils peuvent faire est lire les charges utiles, les en-têtes et l’URL envoyés, et maintenir l’enregistrement actif en renvoyant 200.
Dois-je faire tourner les secrets après la suppression d’un webhook ?
Faites tourner tout secret exposé à l’ancienne URL, tels que des jetons dans la chaîne de requête ou un secret de signature que vous avez réutilisé ailleurs.
En résumé
Un sous-domaine de tunnel est peu coûteux et temporaire. Une inscription qui pointe vers lui continue de fonctionner jusqu’à ce que quelqu’un la supprime. Auditez chaque fournisseur lorsque vous publiez un nom et effectuez un balayage trimestriel.
Sources
- Qu’est-ce que la sécurité des webhooks : sécuriser les intégrations SaaS en 2026 (Obsidian Security)
- Principales conclusions du Verizon DBIR 2026 (SpyCloud)
- Hausse des incidents de la chaîne d’approvisionnement de 60% pour atteindre la moitié de tous les incidents (Expert Insights)
- Verizon 2025 DBIR: involvement des tiers multiplié (ASIS Security Management)
- Manage webhook endpoints (Docs Stripe)
- Set up events (Docs Stripe)
- Stripe webhooks review (Svix)
- Guide to Stripe Webhooks: Features and Best Practices (Hookdeck)
- Bonnes pratiques pour l’utilisation des webhooks (Docs GitHub)
- Désactivation des webhooks (Docs GitHub)
- Validation des livraisons de webhooks (Docs GitHub)
- Dépanner les webhooks (Shopify)
- Gérer les abonnements de webhooks (Shopify)
- Vérifier les livraisons de webhooks (Shopify)
- InstaTunnel [docs des sous-domaines personnalisés], [CLI flags], [dépannage], [tarification] et [conditions], vérifié le 14 novembre 2026
Related InstaTunnel pages
Continue from this article into the most relevant product guides and workflows.
Related Topics
Keep building with InstaTunnel
Read the docs for implementation details or compare plans before you ship.