Schwebende Webhooks: Was passiert, wenn eine freigegebene Tunnel-Unterdomain weiterhin bei Stripe, GitHub oder Shopify registriert ist
Eine Tunnel-Unterdomain gelöscht, aber in Stripe, GitHub oder Shopify belassen? Erfahren Sie, wie schwebende Webhooks Payloads freisetzen, sowie eine Audit-Checkliste und Rotation von Secrets.

Quick answer
Schwebende Webhooks: Risiken freigegebener Tunnel-Unterdomains: 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.
Du stoppst den Tunnel, schließt den Laptop und machst weiter. Stripe, GitHub und Shopify wissen davon nichts. Sie behalten die URL, die du ihnen gegeben hast, und versuchen weiterhin, Ereignisse an sie zu liefern, bis jemand die Registrierung entfernt oder der Anbieter nachgibt.
Dieses übrig gebliebene Registrierung ist ein dangling webhook: ein Abonnement auf Anbieterseite, das auf einen Hostnamen verweist, den du nicht mehr kontrollierst. Wenn der von dir verwendete Name eine Tunnel-Unterdomain war, ist die Frage einfach und unangenehm. Wer kann diesen Namen als Nächstes beanspruchen, und was werden deine alten Registrierungen ihnen senden?
Dieser Leitfaden beantwortet das für die drei Anbieter, die Entwickler am häufigsten verwenden. Er gibt dir dann eine Audit-Checkliste pro Anbieter und eine sichere Reihenfolge zum Abbestellen und Rotieren von Secrets.
Was ist ein schwebender Webhook?
Eine Webhook-Registrierung befindet sich im Dashboard oder in der API des Anbieters, nicht in deinem Code. Das Löschen deines Projekts oder das Auslaufen einer Tunnel-Sitzung ändert dort nichts. Im Gegensatz zu einem veralteten DNS-Eintrag initiiert der Sender: Der Anbieter sendet Ereignisse an die URL, ohne dass jemand sie besucht. In vielen Teams gehört der Bestand niemandem, weil Registrierungen von demjenigen erstellt werden, der in dieser Woche Debugging betreibt hat.
Sicherheitsanbieter betrachten dies bereits als Übernahme-Risiko. Der Webhook-Leitfaden von Obsidian Security warnt davor, dass Endpunkte, die auf veraltete URLs zeigen, Übernahmegelegenheiten schaffen, wenn Infrastruktur migriert oder außer Betrieb genommen wird. Eine freigegebene Tunnel-Unterdomain ist dasselbe Problem auf deutlich kürzerem Zeitrahmen.
Warum sich das jetzt einer Audit lohnt
Drei Datenpunkte rahmen das Problem. Keiner misst schwebende Webhooks direkt, also betrachte sie als Kontext, nicht als Beweis.
Webhook-Verbreitung ist schlecht dokumentiert. Obsidian Security berichtet, dass der Durchschnitts-Unternehmen 47 aktive Webhook-Endpunkte betreibt, während Sicherheitsteams nur 23 % davon in ihren Integrations-Inventaren dokumentieren können. Das ist ein vom Anbieter berichteter Benchmark, kein geprüfter Zensus.
Drittanbieter sind an fast der Hälfte der Verstöße beteiligt. Verizon’s 2026 Data Breach Investigations Report (veröffentlicht im Mai 2026) beziffert die Beteiligung von Drittanbietern auf 48 % der Verstöße. Das ist höher als 30 % in der 2025er Ausgabe und 15 % in 2024. „Third party“ ist eine breite Kategorie. Verizon unterteilt sie in drei Archetypen: eine Schwachstelle in der Software eines Anbieters, die als Einstieg genutzt wird, ein Anbieter, der deine Daten hostet und kompromittiert wird, und ein Anbieter, der in deine Umgebung eingebunden ist. Webhook-Fehlkonfigurationen sind nur ein kleiner Teil davon.
Bereinigung von geleakten Credentials ist langsam. Die 2025er Ausgabe zeigte, dass der Medianzeitraum zur Behebung geleakter Secrets, die in GitHub-Repositories entdeckt wurden, 94 Tage betrug. Langsame Bereinigung von Credentials und Integrationen ist der gemeinsame rote Faden.
Wer kann den Namen als Nächstes beanspruchen?
Das hängt davon ab, wie dein Tunnel-Anbieter Dinge benennt, und hier wird das meiste Risiko entschieden.
- Zufällige Namen (
k8m9n2.example.dev) sind schwer zu treffen, aber eine Registrierung, die auf einen solchen Namen verweist, ist trotzdem schwebend, und der Anbieter kann den Namen wiederverwenden. - Ausgewählte Namen (
stripe-webhook,oauth-dev,acme-qa) sind viel leichter zu erraten. Wenn der Dienst es irgendeinem Konto erlaubt, einen Namen anzufragen, der aktuell nicht verwendet wird, bekommt ihn derjenige zuerst, der danach fragt, nachdem du gehst. - Reservierte Namen (für ein Konto reserviert, auch wenn kein Tunnel läuft) schließen die Lücke, aber nur solange die Reservierung besteht.
Erratbarkeit ist stärker, als man erwartet. Namen, die in Dokumentationsbeispielen erscheinen, sind diejenigen, die am wahrscheinlichsten kopiert, wiederverwendet und vergessen werden.
Was InstaTunnel heute dokumentiert
Hier steht, was InstaTunnel’s öffentliche Dokumentationen, Preisseiten und Nutzungsbedingungen am 14. November 2026 sagen – und was sie auslassen.
Dokumentiert:
- Anpassbare Subdomains sind im kostenlosen Plan enthalten, aber du musst dich anmelden, um eine auszuwählen. Anonyme Tunnels erhalten einen zufälligen sechs Zeichen langen Namen und sind 24 Stunden gültig. Die CLI setzt einen Namen mit
--subdomain(oder-s), zum Beispielinstatunnel 3000 -s myapp. - Namen werden in der Reihenfolge ‘Wer zuerst kommt, mahlt zuerst’ für eingeloggte Benutzer vergeben, und die Docs führen den Free-Plan als ohne Reservierung auf. Ein belegter Name führt zu einem Fehler „Subdomain bereits vergeben“.
- Namen, die von Anbietern verwaltet werden, und sicherheitsrelevante Namen wie
api,loginundsupportsind reserviert und können nicht beansprucht werden. - Free-Plan-Sitzungen dauern 24 Stunden; damit kann ein Tunnel enden, ohne dass du etwas tust.
- Authentifizierte Verbindungen müssen dem Eigentümer des Tunnels gehören, und seit CLI 1.1.24 kann ein zweiter Client den aktiven nicht mehr stillschweigend ersetzen. Solange dein Tunnel aktiv ist, kann sich niemand anderes hineinhacken.
instatunnel --listzeigt deine Tunnels, undinstatunnel --kill <subdomain>stoppt einen.- Der Business-Plan listet “custom subdomain reservations” als Feature. Die Pro-Plan-Funktionen sind nicht aufgeführt.
- Die Beispiele in der Dokumentation verwenden Namen wie
stripe-webhook,oauth-dev,acme-qa,myappundmyapp-dev. Der Troubleshooting-Guide empfiehlt außerdem eine feste Subdomain, damit Dashboards der Anbieter eine stabile URL behalten. Beides macht diese Namen wahrscheinlich, dass sie bei Anbietern registriert werden.
Nicht dokumentiert:
- Wie lange ein Free-Plan-Name unanspruchbar bleibt, nachdem dein Tunnel gestoppt wurde oder deine Session abgelaufen ist. Die Dokumentation sagt nur, dass freie Namen nicht reserviert sind.
- Ob Besitzstandsprüfungen bei Verbindungen über die Session hinaus wirken, und ob einem vorherigen Nutzer ein Vorrecht auf einen Namen eingeräumt wird.
- Was mit Namen passiert, wenn ein Konto beendet wird. Die Nutzungsbedingungen sagen, aktive Tunnel schließen bei Beendigung, geben aber nichts über Namen an.
Bis diese Punkte festgehalten sind, gilt als sichere Annahme: er kann von jemand anderem beansprucht werden, sobald du ihn nicht mehr benutzt. Plane deine Bereinigung entsprechend, mit jedem Tunnel-Anbieter. Die untenstehende Audit-Liste funktioniert unabhängig davon, wie ein Dienst antwortet.
Was ein Eindringling tatsächlich erhält
Angenommen, jetzt kontrolliert jemand den Hostnamen. Jeder Anbieter gibt ihnen etwas anderes.
| Stripe | GitHub | Shopify | |
|---|---|---|---|
| Ereignisinhalt | Snapshot-Ereignisse enthalten eine vollständige Kopie des betroffenen Objekts. Leichte Ereignisse liefern weniger, und du holst den Rest über die API ab | Repository-, Branch- und Commit-Daten, Autorennamen und E-Mail-Adressen; private Repositories eingeschlossen | Bestell- und Kundendaten, die Namen, E-Mails und Adressen enthalten können |
| Signatur | Stripe-Signature, enthält einen Zeitstempel |
X-Hub-Signature-256, kein Zeitstempel |
X-Shopify-Hmac-SHA256, kein Zeitstempel |
| Bereinigung auf Anbieterseite, falls Endpunkt fehlschlägt | Versuche bis zu 3 Tage im Live-Modus, dreimal innerhalb weniger Stunden in einer Sandbox | Nicht dokumentierte automatische Entfernung | Versuche bis zu 8 Mal innerhalb von 4 Stunden; shop-spezifische Abonnements werden entfernt, app-spezifische nicht |
Bei allen drei erhält ein Eindringling:
- Alles in der Anfrage. Körper (Body), Header und der vollständige URL-Pfad und die Abfragezeichenfolge. Die eigene Anleitung von GitHub sagt, API-Schlüssel oder andere Anmeldedaten nicht in der Payload-URL unterzubringen. Wenn du jemals ein Token oder Basic-Auth-Anmeldedaten in einer webhook-URL eingebettet hast, gingen sie an den neuen Eigentümer.
- Eine Einsicht in deine Aktivität. Repository-Namen, Kunden-E-Mails und Bestellvolumen sind nützlich für Phishing und Aufklärung, ohne dass ein gef corrigiertes Ereignis entsteht.
- Eine funktionsfähige TLS-Verbindung. Die Anbieter prüfen das Zertifikat der Zieladresse, aber der Hostname wird weiterhin vom Edge des Tunnel-Anbieters mit einem gültigen Zertifikat bedient, sodass die Überprüfung gelingt. Zertifikatprüfungen sagen dem Anbieter nichts darüber, dass der Name gewechselt hat.
- Ein Grund,
200zu beantworten. Anbieter behandeln eine Nicht-2xx-Antwort oder einen Timeout als Fehler; Shopify zählt jede Antwort außerhalb des 200er Bereichs, einschließlich Redirects. Ein Eindringling, der 200 zurückgibt, lässt Lieferungen gesund aussehen und unterdrückt das Retry-and-Remove-Verhalten, das die Registrierung sonst bereinigen würde. Das ist eine Folgerung aus der Definition von Fehlern, und es bedeutet, dass die Registrierung unbegrenzt bestehen bleiben kann.
Ein Hinweis zur Wiederholung: Die offiziellen Bibliotheken von Stripe lehnen standardmäßig Ereignisse ab, die älter als fünf Minuten sind, aber Signaturen von GitHub und Shopify tragen keinen Zeitstempel. Deduplizieren Sie auch anhand der Delivery-ID: X-GitHub-Delivery für GitHub und X-Shopify-Webhook-Id für Shopify.
Zähle nicht auf die Bereinigung durch den Anbieter
Die Dokumentation von Stripe beschreibt ein automatisches Wiederholungsfenster von drei Tagen im Live-Modus und drei Wiederholungen innerhalb weniger Stunden in einer Sandbox. Drittanbieter-Anleitungen (Svix, Hookdeck) berichten, dass Stripe einen Endpunkt nach drei Tagen kontinuierlicher Fehler deaktiviert. Stripe-Seiten, die ich geprüft habe, nennen diese Regel nicht explizit, also behandeln Sie sie als berichtetes Verhalten, nicht als Garantie.
GitHub ermöglicht es dir, Webhooks von Repositories oder Organisationen zu deaktivieren (reversibel) oder zu löschen (permanent). Jede GitHub App, die du besitzt, hat einen Webhook, den du deaktivieren, aber nicht löschen kannst. Ich habe keine Dokumentation gefunden, dass GitHub automatisch einen fehlerhaften Webhook entfernt.
Shopify verlangt die genaueste Lesart. Zustellungen werden bis zu acht Mal über vier Stunden erneut versucht, und permanente Fehler löschen Abonnements, die über die Admin-API (shop-spezifisch) erstellt wurden. In Shopifys eigener Vergleichstabelle steht, dass fehlgeschlagene app-spezifische Abonnements, die in shopify.app.toml stehen, nicht gelöscht werden. Eine veraltete URL dort verbleibt, bis du sie bearbeitest und shopify app deploy ausführst. Das Löschen in GitHub kann nicht rückgängig gemacht werden.
Bereinigung läuft nur, wenn der Endpunkt fehlschlägt, und ein Eindringling kann das verhindern.
Die Provider-Dashboard-Audit-Checkliste
Führe dies aus, bevor du einen Tunnel-Namen freigibst, und erneut als vierteljährliche Überprüfung. Prüfe Test- und Live-Umgebungen separat, weil Menschen eine von ihnen vergessen.
Stripe
- Öffne den Webhooks-Tab in Workbench und liste jeden Endpunkt auf, im Live-Modus und in jeder Sandbox- oder Testumgebung, plus jegliche Connect- oder Multi-Account-Einrichtung, die du verwaltest.
- Oder benutze die API:
curl -G https://api.stripe.com/v1/webhook_endpoints -u "$STRIPE_SECRET_KEY:" -d limit=100. Führe es einmal pro Umgebung mit dem jeweiligen Schlüssel aus. Einträge enthaltenurl,statusundenabled_events. - Markiere jede URL auf einer Tunnel-Domain oder einem Host, den du nicht erkennst, einschließlich solcher mit
status: disabled, die dennoch registriert sind. - Prüfe, wer eingeschränkte Schlüssel mit der Berechtigung
webhook_writebesitzt. Stripe weist darauf hin, dass solcher Schlüssel Ziele erstellen kann, die Payloads für jeden Ereignistyp empfangen, auch ohne Leseberechtigung für die zugrundeliegenden Objekte.
GitHub
- Repository-Webhooks: Einstellungen, dann Webhooks, für jedes Repository, das du verwaltest. Über CLI:
gh api --paginate repos/OWNER/REPO/hooks --jq '.[] | {id, active, url: .config.url}'. - Organisations-Webhooks (Eigentümer):
gh api orgs/ORG/hooks. - Jede GitHub App, die du besitzt, hat eine Webhook-URL; prüfe die App-Einstellungen.
- Kürzliche Deliveries: wiederholte Fehler bedeuten in der Regel, dass das Ziel nicht mehr existiert.
Shopify
- App-spezifische Abonnements: öffne
shopify.app.tomlund prüfe jedenuriunter[[webhooks.subscriptions]]. - Shop-spezifische Abonnements: Abfrage
webhookSubscriptions(first: 50) { edges { node { id topic uri } } }über die GraphQL Admin API, für jeden Shop und Entwicklerstore, auf dem deine App installiert ist. Diese Abfrage deckt nur API-erstellte Abonnements ab, nicht TOML-gesteuerte, daher benötigst du beide Checks. - Prüfe die Delivery-Logs und Metriken im Dev Dashboard auf fehlerhafte oder entfernte Abonnements. Die Delivery-Logs decken nur die letzten sieben Tage ab.
Alles andere
- Wiederhole dies für Slack, Twilio, Meta/WhatsApp, PayPal, Zapier-ähnliche Tools, CI-Systeme und jede OAuth-App, die eine Redirect-URI speichert. Callback-URLs für Login-Flows sind ein verwandtes Risiko, das wir in Die OAuth-Tunnel-Falle behandelt haben.
Abmelden zuerst, dann Secrets rotieren
Die Reihenfolge ist entscheidend, denn das Ziel ist, den Datenaustritt zu stoppen, bevor du dir Gedanken darüber machst, was der neue Eigentümer bereits hat.
- Deaktivieren, noch nicht löschen. Deaktiviere den GitHub-WebHook (
gh api -X PATCH repos/OWNER/REPO/hooks/HOOK_ID -F active=false) oder deaktiviere den Stripe-Endpunkt in Workbench. Das ist reversibel, falls die URL doch relevant wird. - Stille bestätigen. Beobachte das Lieferprotokoll des Anbieters einen Tag lang. Wenn etwas auf den Endpunkt angewiesen war, erfährst du es jetzt, statt während eines Incidents.
- Löschen. Verwende
curl -X DELETE https://api.stripe.com/v1/webhook_endpoints/we_XXXX -u "$STRIPE_SECRET_KEY:",gh api -X DELETE repos/OWNER/REPO/hooks/HOOK_ID, oder diewebhookSubscriptionDeleteMutation für shop-spezifische Shopify-Abonnements. Für TOML-verwaltete Shopify-Abonnements entferne den Eintrag und führeshopify app deployaus. GitHub-Löschung kann nicht rückgängig gemacht werden. - Rotieren Sie alles, was die alte URL offengelegt haben könnte. Behandle diese als kompromittiert, nur wenn sie mit dem alten Endpunkt geteilt wurden:
- Secrets eingebettet in die URL, die Abfragezeichenfolge oder benutzerdefinierte Header.
- Ein Signing Secret, das du überall anders wiederverwendet hast, wie z. B. ein Production-Handler. Stripe erzeugt ein eindeutiges Secret pro Endpunkt, aber GitHub’s Secret ist eines, das du gewählt hast; prüfe also, dass du denselben Wert nicht an mehreren Stellen eingefügt hast. Shopify signiert mit dem Client Secret deiner App, das in der ganzen App geteilt wird. Wenn dieses Secret erneut verwendet wurde, ist Rotieren eine größere Aufgabe, und Shopify sagt, dass der neue Digest bis zu einer Stunde dauern kann, bis er wirksam wird.
- Wähle das richtige Rotationsfenster. In Workbench ermöglicht das Rotieren eines Stripe Signing Secret, das alte sofort abzutrennen oder es bis zu 7 Tage gültig zu belassen. Die Verzögerung passt zu geplanter Rotation. Nach einem vermuteten Exposure, sofort ablaufen lassen, da die Nachfrist den alten Wert gültig hält.
- Erneut verifizieren mit einem Test-Event zum echten Endpunkt, und das Datum in dein Inventar aufnehmen.
Für GitHub-Secrets generiere einen langen Zufallswert (z. B. openssl rand -hex 32) und bewahre ihn in einem Secret Manager auf.
Verhindere den nächsten schwebenden Webhook
Bereinigung ist der Fix, aber ein paar Gewohnheiten machen das Problem kleiner:
- Namen bewusst freigeben. Mache das Entfernen von Registrierungen des Anbieters Teil des Abbaus einer Entwicklungsumgebung. Mit InstaTunnel führe
--killfür die Subdomain aus und lösche deren Registrierungen in derselben Sitzung. - Nicht dieselben Beispiele aus der Dokumentation verwenden. Wenn eine Anleitung
stripe-webhookoderoauth-devverwendet, wähle etwas, das zu dir gehört. - Reserviere Namen, auf die du angewiesen bist, statt zu hoffen, dass niemand sie anfragt. Bei InstaTunnel bedeutet das der Business-Plan, der einzige Plan, der Reservierungen auflistet. Beim Free-Plan endet eine Sitzung nach 24 Stunden.
- Lasse Tools Dev-URLs dort verwalten, wo es möglich ist. Die Shopify-Dokumentation weist darauf hin, dass die Tunnel-URL des CLI bei jedem
shopify app dev-Durchlauf wechselt, und empfiehlt eine relativeuri(z. B./webhooks), damit du dich nicht jedes Mal neu registrieren musst. - Beschränke, was ein abweichender Endpunkt empfangen kann. Die Optionen
include_fieldsundfiltervon Shopify begrenzen Payload und welche Deliveries ausgelöst werden; Stripe erlaubt es dir, nur die benötigten Ereignistypen zu abonnieren. - Gib jeder Dev-Registrierung einen Besitzer und ein Ablaufdatum.
- Die Felder
descriptionundmetadatavon Stripe sind dafür gedacht. - Halte getrennte Secrets pro Umgebung, damit eine veraltete URL nie zu einem Produktionsproblem wird.
- Lege Registrierungen in Code ab, damit vergessene Registrierungen in Pull Requests auffallen.
Eine verführerische Lösung funktioniert nicht: Passwortschutz für deinen Tunnel schützt dich nur, solange du den Namen besitzt. Er erfordert einen Pro- oder Business-Plan, und ein Anbieter kann kein Browser-Passwortformular ausfüllen. Ein Eindringling auf dem gleichen Hostname wird ihn einfach nicht aktivieren.
FAQ
Was ist ein schwebender Webhook?
Ein Webhook-Abonnement bei einem Anbieter wie Stripe, GitHub oder Shopify, das immer noch auf eine URL zeigt, die du nicht mehr kontrollierst, typischerweise eine freigegebene Tunnel-Unterdomain.
Kann jemand meine alte Tunnel-Unterdomain übernehmen?
Es hängt vom Tunnel-Dienst ab. Wenn er es jedem Konto erlaubt, einen bestimmten Namen zu beantragen, und freigegebene Namen nicht hält, dann ja. Die InstaTunnel-Dokumentation beschreibt freie Namen im Free-Plan als ‘Wer zuerst kommt, mahlt zuerst’ ohne Reservierung und listet Reservierungen nur im Business-Plan auf. Prüfe die Dokumentation deines Anbieters und gehe nicht davon aus, dass ein Name sicher ist, es sei denn er ist ausdrücklich reserviert.
Kann ein Angreifer Stripe- oder GitHub-Ereignisse fälschen, mithilfe eines schwebenden Webhooks?
Nicht gegen einen Produktions-Endpunkt, der Signaturen überprüft. Sie erhalten dein Signing Secret nicht. Was sie tun können, ist die Payloads, Headers und die URL, die an sie gesendet wird, auszulesen, und die Registrierung durch das Zurücksenden von 200 am Leben zu halten.
Muss ich Secrets rotieren, nachdem ich einen Webhook gelöscht habe?
Rotieren Sie alles, was der alten URL ausgesetzt war, wie Tokens in der Abfragezeichenfolge oder ein Signing Secret, das du anderswo wiederverwendet hast.
Das Fazit
Eine Tunnel-Unterdomain ist billig und vorübergehend. Eine Registrierung, die darauf verweist, funktioniert weiter, bis sie von jemandem entfernt wird. Prüfe jeden Anbieter, wenn du einen Namen freigibst, und führe vierteljährliche Audits durch.
Quellen
- Was ist Webhook-Sicherheit: Absichern von SaaS-Integrationen im Jahr 2026 (Obsidian Security)
- Top-Erkenntnisse aus dem Verizon 2026 DBIR (SpyCloud)
- Lieferkettenverletzungen steigen 60% und treffen die Hälfte aller Vorfälle (Expert Insights)
- Verizon 2025 DBIR: Beteiligung Dritter verdoppelt (ASIS Security Management)
- Manage webhook endpoints (Stripe Docs)
- Set up events (Stripe Docs)
- Stripe webhooks review (Svix)
- Guide to Stripe Webhooks: Features and Best Practices (Hookdeck)
- Best practices for using webhooks (GitHub Docs)
- Disabling webhooks (GitHub Docs)
- Validating webhook deliveries (GitHub Docs)
- Troubleshoot webhooks (Shopify)
- Manage webhook subscriptions (Shopify)
- Verify webhook deliveries (Shopify)
- InstaTunnel custom subdomains docs, CLI flags, troubleshooting, pricing und terms, geprüft am 14. November 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.