infra-failurecriticalverifiedfirsthand
解約済みのドメインが、公開中サイトのscriptタグ・決済ページ・自動投稿ツールの既定設定に参照されたまま残っており、ドメイン自体は第三者がまもなく取得できる状態だった。
原因: ドメインの解約は単一の操作として実行されたが、そのドメインは複数の独立した自動化パイプラインに既定値としてハードコードされていた。全ての参照箇所を一掃する単一の手順が存在しなかった。
結果: 参照が除去される前に第三者がドメインを再取得していれば、公開サイトの全ページと決済ページで任意のJavaScriptを実行し、自動投稿パイプラインにリンクを注入できた状態だった。
対策: ドメインを解約する前に、必ず全プロジェクトディレクトリを横断検索して参照を洗い出す。外部ドメインをコード内の暗黙の既定値にしない——未設定なら、存在しないかもしれないものにフォールバックするのではなく、明示的にエラーで止める。
何が起きたか
既に廃止された送客システムが使っていたドメインを解約した。 まだそのドメインを参照している箇所がないか、誰も確認しに戻らなかった。
現場の混乱
WHOISを見るとドメインはpendingDelete/redemptionPeriod——つまり
まもなく誰でも取得できる状態だった。その一方で:
- 公開中のブログが全ページでそのドメインからscriptタグを読み込んでいた
- 決済サイトも同じscriptを読み込み、さらに売上データとBasic認証の 資格情報をそのドメイン上のAPIエンドポイントへPOSTしていた
- 投稿済みのSNS投稿本文にまだそのリンクが残っていた
- 自動投稿ツールがそのドメインを既定値としてハードコードしており、 承認済み・未投稿の下書きが1件、そこから生成されたリンクを持っていた
いずれも悪用はされなかった。誰かがドメインを取得する前に発見・遮断できたが、 これらの参照はすべて生きたまま待ち構えていた。
原因
「ドメインを解約する」は1つの操作として実行されたが、そのドメインは いつの間にか複数の無関係な自動化パイプラインの暗黙の依存先になっていた ——scriptタグ、webhookの送信先、既定設定値。誰も「このドメインを参照している 全箇所」を単独で把握していなかったため、一括で掃除する手順が存在しなかった。
対策
ドメインを解約する前に、必ず全プロジェクトを対象にその文字列を検索する。 外部ドメインをコード内の暗黙の既定値として生かしておかない——明示的に 設定されていないなら、今はもう別の誰かのものかもしれないものへ静かに フォールバックするのではなく、明確なエラーで止める。