ぶら下がりウェブフック: 公開済みトンネルサブドメインが Stripe、GitHub、Shopify にまだ登録されていると起こること
トンネルのサブドメインを削除したものの、Stripe、GitHub、Shopify に残したままですか? ぶら下がりウェブフックがペイロードを流出させる仕組みと、監査チェックリストおよび秘密鍵の回転方法を解説します。

Quick answer
ぶら下がりウェブフック: 公開済みトンネルサブドメインのリスク: 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.
トンネルを停止し、ノートパソコンを閉じて次へ進む。Stripe、GitHub、Shopify はそれに気づかない。彼らはあなたが渡したURLを保持し、登録を削除するか、提供者が諦めるまでイベントをそのURL宛てに配信し続けます。
その余剰な登録はぶら下がりウェブフックです:あなたがもはや管理していないホスト名を指す、プロバイダー側の購読です。もし使った名前がトンネルサブドメインであれば、問いは簡潔で不安なものになります。次に誰がその名前を主張できるのか、そしてあなたの旧登録は彼らに何を送るのか。
このガイドは、開発者が最も頻繁に接続する3つのプロバイダーに対してその答えを示します。続いて、プロバイダーごとの監査チェックリストと、購読を解除し秘密を回転させる安全な順序を提供します。
ぶら下がりウェブフックとは
ウェブフックの登録はプロバイダーのダッシュボードまたはAPIにあり、あなたのコードにはありません。プロジェクトを削除したりトンネルセッションを期限切れにしても、そこには何の影響もありません。古いDNSレコードとは異なり、送信者が発信します:URLにイベントを送信するのはプロバイダーで、誰も訪問しません。多くのチームでは在庫を誰が所有しているか分からないことが多く、登録はその週にデバッグしていた人が作成します。
セキュリティベンダーはすでにこれを乗っ取りリスクとして扱っています。Obsidian Security のウェブフックガイドは、廃止されたURLを指すエンドポイントはインフラが移行・廃止される際に乗っ取りの機会を生むと警告します。公開済みのトンネルサブドメインは、はるかに短い時間スケールで同じ問題です。
なぜ今監査が価値があるのか
この問題をフレーム化するデータは3つあります。いずれもぶら下がりウェブフックを直接測定するものではないので、文脈として解釈してください。
ウェブフックのスプロールは十分に文書化されていません。 Obsidian Security は、平均的な企業がアクティブなウェブフックエンドポイントを47個運用している一方で、セキュリティチームは統合在庫の23%しか記録できないと報告しています。これはベンダーが報告したベンチマークであり、監査済みの国勢調査ではありません。
第三者が関与する breaches はほぼ半数。 Verizon の 2026年のデータ侵害調査報告(2026年5月公表)は、第三者の関与を侵害の48%としています。これは2025年版の30%、2024年の15%から上昇しています。「第三者」は広いカテゴリで、ベンダーのソフトウェアの脆弱性を入り口として使うケース、データをホストするベンダーが侵害されるケース、環境に接続されたベンダーのケースなど3つのタイプに分けられます。ウェブフックの誤設定はそのごく一部です。
漏えいした認証情報のクリーンアップは遅い。 2025年版では、GitHub リポジトリで発見された漏えいした秘密情報を是正する median は94日でした。認証情報と統合のクリーンアップの遅さが共通した要因です。
次に誰が名前を主張できるのか?
これはトンネル提供者が名前を付ける方式によって決まり、リスクの大部分がここで決定されます。
- ランダム名(
k8m9n2.example.dev)は狙いにくいですが、それを指す登録自体がぶら下がりのままで、提供者が名前を再利用する可能性があります。 - 選択された名前(
stripe-webhook、oauth-dev、acme-qa)は推測しやすいです。サービスが現在使用中でない名前をどのアカウントにも要求させることができる場合、あなたが去った後に最初に申請した人がそれを得ます。 - 予約済みの名前(トンネルが実行されていない間もアカウントに保持される) はギャップを埋めますが、予約が存在する間だけ有効です。
想像しやすさは人が思っているよりも重要です。ドキュメントの例に出てくる名前は、コピー・再利用・放置される可能性が高いものです。
今日の InstaTunnel の文書について
ここでは、2026年11月14日現在の InstaTunnel の公開ドキュメント、料金ページ、利用規約に記載されている内容と、それが抜け落ちている点を示します。
文書化されている情報:
- 無料プランにもカスタムサブドメインが含まれますが、選択にはサインインが必要です。匿名トンネルにはランダムな6文字の名前が付与され、最後の24時間有効です。CLI では
--subdomain(または-s)で名前を設定します。例:instatunnel 3000 -s myapp。 - 名前はサインイン済みのユーザーに対して先着順で提供され、無料プランには予約がないとドキュメントには記載されています。すでに使用中の名前は「subdomain already taken」エラーを返します。
api、login、supportのような第一者およびセキュリティ上重要な名前は予約済みで、取得できません。- 無料プランのセッションは24時間で、トンネルはあなたが何もしなくても終了します。
- 認証済みの接続はトンネルの所有者に属する必要があり、CLI 1.1.24 以降、2つ目のクライアントはアクティブなものを静かに置き換えることはできません。トンネルが live の間は、他の誰も横取りできません。
instatunnel --listはあなたのトンネルを表示し、instatunnel --kill <subdomain>は1つを停止します。- Business プランは「カスタムサブドメイン予約」を機能として列挙しています。Pro プランにはこの機能リストは含まれていません。
- ドキュメント内の例では
stripe-webhook、oauth-dev、acme-qa、myapp、myapp-devのような名前が使われています。トラブルシューティングガイドは、プロバイダのダッシュボードを安定したURLに保つために固定サブドメインを推奨しています。これらの名前はプロバイダに登録される可能性が高くなります。
文書化されていない点:
- トンネル停止後やセッションが期限切れになってから、無料プランの名前がどれくらい長く取得不能であるか。ドキュメントは「無料名は予約されていない」としか記載していません。
- セッションを越えた接続で所有権の検証がどうなるか、過去のユーザーが名前に対して優先権を得られるかどうか。
- アカウントが終了した場合の名前の扱い。規約は「アクティブなトンネルは終了時に閉じる」としていますが、名前については何も述べていません。
これらの点が書き留められるまでは、明示的に予約していない任意の名前については「停止後に誰かが取得できる可能性がある」と安全側で推定するのが妥当です。各トンネルプロバイダとともに、その前提でクリーンアップを計画してください。以下の監査は、特定のサービスの回答がどうであっても機能します。
占拠者が実際に受け取るもの
現在、誰かがホスト名を制御していると仮定します。各プロバイダはそれぞれ異なる情報を渡します。
| Stripe | GitHub | Shopify | |
|---|---|---|---|
| イベント内容 | スナップショットイベントは影響を受けたリソースの完全なコピーを含みます。薄いイベントは少なく、残りは API を通じて取得します | リポジトリ、ブランチ、コミットデータ、作成者名とメール、 private リポジトリを含む | 注文と顧客データ。名前、メール、住所などを含む可能性あり |
| 署名 | Stripe-Signature、タイムスタンプを含む |
X-Hub-Signature-256、タイムスタンプなし |
X-Shopify-Hmac-SHA256、タイムスタンプなし |
| エンドポイントの失敗時のプロバイダ側のクリーンアップ | ライブモードで最大3日間リトライ、サンドボックスでは数時間にわたり3回 | 自動削除のドキュメントはなし | 4時間で最大8回リトライ。ショップ特有の購読は削除されるが、アプリ特有のものは残る |
3者すべてにおいて、占拠者が得られるもの:
- リクエスト内のすべて。 ボディ、ヘッダ、完全なURLパスとクエリ文字列。GitHub の公式ガイダンスは、ペイロードURLに API キーや他の認証情報を含めないようにしています。 webhook URL にトークンやベーシック認証情報を埋め込んだ場合、それは新しい所有者の手に渡ります。
- あなたの活動の閲覧。 リポジトリ名、顧客のメール、注文量はフィッシングや偵察に有用で、偽造イベントなしでも利用されます。
- 動作する TLS 接続。 宛先の証明書をプロバイダが検証しますが、ホスト名はトンネル提供者のエッジで有効な証明書を持つため、検証は通ります。証明書のチェックは名前の移転をプロバイダに伝えません。
200を返す理由。 2xx 以外の応答やタイムアウトを失敗として扱います。Shopify は 200 範囲外の応答やリダイレクトを含む場合を失敗とみなします。200 を返すと配信が健全に見え、再試行と削除の動作を抑制します。これは失敗がどのように定義されるかの推測に基づくもので、登録が無期限に生存することを意味します。
占拠者が自分の端末で行えないことは、あなたの実 endpoint に対して署名済みイベントを偽造することです。彼らはあなたの署名秘密を持っていませんし、受け取ったペイロードにはそれが含まれていません。その保護は、あなたの本番ハンドラが署名を検証していればのみ機能します。例えば GitHub は webhook に秘密を設定していない限り署名ヘッダを送信しません。署名の検証は、間違った場所に送られた内容の機密性を保証しません。
1つのリプレイの注意点: Stripe の公式ライブラリは、デフォルトで5分より古いイベントを拒否しますが、GitHub と Shopify の署名にはタイムスタンプがありません。配信IDで重複を排除してください:GitHub は X-GitHub-Delivery、Shopify は X-Shopify-Webhook-Id。
プロバイダ側のクリーンアップには頼らない
Stripe のドキュメントは、ライブモードでの3日間の自動リトライウィンドウと sandbox での数時間リトライをカバーします。第三者のガイド(Svix、Hookdeck)は、3日間連続の失敗後にエンドポイントを無効化すると報告しています。私が確認した Stripe の公式ページにはこのルールは明記されていないため、これは報告された挙動として扱い、保証とはしないでください。
GitHub はリポジトリと組織のウェブフックを無効化(戻せる)または削除(不可逆)できます。各 GitHub App には1つのウェブフックURLがあり、それを無効化することはできますが削除はできません。自動的に失敗したウェブフックを削除する文献は見つかりませんでした。
Shopify は最も厳密な読み方を必要とします。配信は4時間で最大8回リトライされ、永続的な失敗は Admin API 経由で作成された購読を削除します(ショップ特有)。Shopify の比較表によれば、アプリ特有の購読(shopify.app.toml)は削除されません。古い URL はあなたがそれを編集して shopify app deploy を実行するまで残り続けます。
エンドポイントが失敗した場合のみクリーンアップが実行され、占拠者がそれを止めることができます。
プロバイダーダッシュボード監査チェックリスト
名前を公開する前に、そして四半期ごとのスイープとして再度実行してください。テストと本番環境を別々にチェックしてください。どちらか一方を忘れる人がいるためです。
Stripe
- Workbench の Webhooks タブを開き、ライブモードとすべてのサンドボックス/テスト環境でのエンドポイントをすべて一覧化します。管理している Connect や複数アカウントの設定も含めます。
- API を使う場合:
curl -G https://api.stripe.com/v1/webhook_endpoints -u "$STRIPE_SECRET_KEY:" -d limit=100。各環境ごとにその環境のキーで1回実行します。エントリにはurl、status、enabled_eventsが含まれます。 - トンネルドメイン上のURLや認識できないホストのURLをマークします。
status: disabledのものも登録済みです。 - 制限キーを保持しているかどうか、
webhook_write権限で確認します。そうしたキーは任意のイベントタイプのペイロードを受信する宛先を作成でき、基礎オブジェクトを読む権限がなくても動作します。
GitHub
- Repository ウェブフック: Settings から Webhooks、あなたが管理しているすべてのリポジトリについて。CLI で:
gh api --paginate repos/OWNER/REPO/hooks --jq '.[] | {id, active, url: .config.url}'。 - Organization ウェブフック(所有者のみ):
gh api orgs/ORG/hooks。 - 各 GitHub App は一つのウェブフックURLを持ちます。アプリの設定を確認してください。
- Recent Deliveries: 繰り返しの失敗は宛先がなくなったことを示します。
Shopify
- アプリ特有の購読:
shopify.app.tomlを開き、[[webhooks.subscriptions]]の下のすべてのuriを確認。 - 店舗特有の購読: GraphQL Admin API を介して
webhookSubscriptions(first: 50) { edges { node { id topic uri } } }を実行し、あなたのアプリがインストールされている各店舗・開発ストアについて確認します。これは API 作成購読のみを対象としており TOML 管理の購読は含まれないため、両方のチェックが必要です。 - Dev ダッシュボードの配信ログと指標を確認して、失敗または削除された購読を確認します。配信ログは過去7日分のみをカバーします。
その他すべて
- Slack、Twilio、Meta/WhatsApp、PayPal、Zapier風ツール、CIシステム、 redirect URI を保存している OAuth アプリなどについても同様に繰り返します。ログインフローの Callback URL は関連リスクであり、The OAuth Tunnel Trap で取り上げました。
まず購読を解除してから回転させる
順序は重要です。新しい所有者がすでに何を持っているかを心配する前に、データが外へ出るのを止めることを優先します。
- 無効化、まだ削除しない。 GitHub のウェブフックを無効化する(
gh api -X PATCH repos/OWNER/REPO/hooks/HOOK_ID -F active=false)か、WorkBench で Stripe のエンドポイントを無効化します。名前の重要性が分かった場合でも、これは元に戻せます。 - 沈黙を確認。 1日程度、プロバイダの配信ログを監視します。エンドポイントに依存していた何かがあれば、 incident に入る前に今確認できます。
- 削除。
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、またはショップ特有の Shopify サブスクリプション用のwebhookSubscriptionDeleteミューテーションを使用します。TOML 管理の Shopify サブスクリプションの場合はエントリを削除してshopify app deployを実行します。GitHub の削除は元に戻せません。 - 古い URL が露出していた可能性のあるものを回転。 これは、古いエンドポイントと共有された場合に限り危険と見なします:
- URL、クエリ文字列、カスタムヘッダに埋め込まれた秘密情報。
- production ハンドラ等、他の場所で再利用した署名秘密。エンドポイントごとに異なる秘密を Stripe が作成しますが、GitHub の秘密はあなたが選んだものです。同じ値を複数箇所に貼り付けていないか確認してください。Shopify はアプリのクライアント秘密で署名します。もし再利用していた場合、回転には大きな作業が伴い、 digest の新しい値が反映されるまで最大1時間かかることがあります。
- プロバイダへコールバックする際に使った API キーやトークン。
- 適切な回転ウィンドウを選ぶ。 Workbench で Stripe の署名秘密を回転させると、古いものをすぐに期限切れにするか、最大7日間有効のままにすることができます。遅延は計画的な回転に適しています。露出が疑われる場合には即座に期限切れにしてください。猶予期間中は古い値が有効であることに注意してください。
- 実 endpoint へテストイベントで再検証し、在庫に日付を記録。
GitHub の秘密は長いランダム値を生成します(例:openssl rand -hex 32)を secret manager に保管します。
次のぶら下がりウェブフックを防ぐ
クリーンアップは修正策として有効ですが、いくつかの習慣が問題を小さくします:
- リリース名を意図的に。 開発環境を破棄する際には“プロバイダ登録の削除”を組み込みます。InstaTunnel を使う場合はサブドメインの
--killを実行し、同じセッションで登録を削除してください。 - ドキュメント例の名前を再利用しない。 ガイドが
stripe-webhookやoauth-devを使用している場合は、自分に特有の名前を選んでください。 - 依存している名前を予約しておく。 InstaTunnel では Business プランだけが予約を列挙しています。無料プランの場合、セッションは24時間で終了します。
- 開発用URLの管理をツールに任せられるところは任せる。 Shopify のドキュメントは CLI のトンネルURLが
shopify app devの実行ごとに変わることを指摘しており、相対的なuri(例/webhooks)を提案して、毎回再登録を避けられるようにします。 - 放置されたエンドポイントが受け取れる内容を絞る。 Shopify の
include_fieldsおよびfilterオプションはペイロードと配信を制限します。Stripe は必要なイベントタイプのみ購読させることができます。 - 各 dev 登録に所有者と有効期限を設定する。 Stripe の
descriptionとmetadataフィールドはこれに適しています。 - 環境ごとに秘密を別々に保つ。 1つの古い URL が production の問題になることを避けます。
- ** registrations をコードに置く。** 忘れられた登録をプルリクエストで気づくようにします。
1つの魅力的な修正策は機能しません: トンネルのパスワード保護は、名前を保持している間だけあなたを守ります。Pro または Business プランが必要で、ブラウザのパスワード入力フォームを完成させることはプロバイダ側ではできません。同じホスト名の占拠者がそれを有効にすることはありません。
FAQ
ぶら下がりウェブフックとは?
Stripe、GitHub、Shopify のようなプロバイダにある、もはやあなたが管理していないURLを指すウェブフック購読。
古いトンネルサブドメインを誰かが取得できますか?
トンネルサービス次第です。特定の名前を要求でき、公開済み名前を保持していない場合、はい。InstaTunnel のドキュメントは無料プランの名前を先着順・予約なしと説明し、Business プランのみ予約を設けると記載しています。プロバイダのドキュメントを確認し、明示的に予約されていない限り名前が安全だと決めつけないでください。
ぶら下がりウェブフックを使って Stripe や GitHub のイベントを改竄できますか?
本番エンドポイントが署名を検証している場合は不可能です。署名秘密を受け取っていません。できることは、ペイロード・ヘッダ・URL を読み取り、200 を返して登録を生存させることだけです。
ウェブフックを削除した後、秘密情報を回転させる必要がありますか?
古いURLに露出した可能性のある秘密情報を回転させてください。例:クエリ文字列のトークン、署名秘密など。
結論
トンネルのサブドメインは安価で一時的です。それを指す登録は誰かが削除するまで機能を維持します。名前をリリースしたら、各プロバイダを監査して四半期ごとに見直しましょう。
出典
- What is Webhook Security: Securing SaaS Integrations in 2026 (Obsidian Security)
- Top takeaways from the 2026 Verizon DBIR (SpyCloud)
- Supply Chain Breaches Surge 60% To Hit Half Of All Incidents (Expert Insights)
- Verizon 2025 DBIR: third-party involvement doubled (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 and terms, checked November 14, 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.