InstaTunnel
Basculer le menu de navigation
API
13 min read
65 views

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.

IT
InstaTunnel Team
Published by the InstaTunnel team | Editorial policy
Webhooks pendants : Que se passe-t-il lorsqu'un sous-domaine de tunnel publié est encore enregistré dans Stripe, GitHub ou Shopify

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 exemple instatunnel 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, login et support sont 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 --list affiche vos tunnels, et instatunnel --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, myapp et myapp-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 :

  1. 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.
  2. 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.
  3. 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.
  4. 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.toml and check every uri under [[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 --kill sur 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-webhook ou oauth-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 une uri relative (par exemple /webhooks) pour ne pas vous réenregistrer à chaque fois.
  • Limitez ce qu’un endpoint isolé peut recevoir. Les options include_fields et filter de 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 description et metadata de 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

Continue from this article into the most relevant product guides and workflows.

Related Topics

#dangling webhooks#webhook security#stale webhook endpoints#orphaned webhooks#tunnel subdomain takeover#subdomain takeover#released tunnel subdomain#tunnel subdomain reuse#localhost tunneling security#ngrok alternative#InstaTunnel#Stripe webhook security#GitHub webhook security#Shopify webhook security#webhook endpoint audit#webhook audit checklist#rotate webhook secret#webhook signing secret rotation#webhook secret management#unsubscribe webhook#delete webhook endpoint#webhook payload exposure#webhook data leak#webhook hijacking#webhook spoofing#webhook signature verification#HMAC webhook verification#webhook replay attack#dangling DNS#dangling subdomain#subdomain hijacking#third-party breach risk#third-party integration security#API security#developer security#DevSecOps#application security#attack surface management#shadow webhooks#undocumented webhook endpoints#webhook inventory#webhook best practices#webhook endpoint management#Stripe dashboard webhooks#GitHub repository webhooks#Shopify webhook subscriptions#localhost tunnel#ephemeral subdomain#ephemeral tunnel URL#cloud-native security#developer infrastructure#secure webhook development#webhook testing locally#tunnel service security#payload interception#security checklist 2026

Keep building with InstaTunnel

Read the docs for implementation details or compare plans before you ship.

Share this article

More InstaTunnel Insights

Discover more tutorials, tips, and updates to help you build better with localhost tunneling.

Browse All Articles