パッケージレジストリのPyPIは、期限切れドメインを足掛かりにアカウントを奪う「ドメイン復活攻撃」を防ぐため、登録メールのドメイン期限を常時監視し、危険域に入った時点でメール認証を自動的に失効させる運用に移行しました。
2025年6月以降、1,800件超のメール認証を失効済み。完全解ではないものの、実運用に擬態する供給網攻撃の主要ルートを塞ぐ施策です。
何が変わったのか
PyPIは、アカウントに紐づくメールアドレスのドメイン有効性を定期チェックし、登録ドメインが更新猶予/償還(Redemption)段階に入ったと判断した場合、それまで「確認済み」だったメールを自動で「未確認」に戻します。
これにより、当該アドレス宛のパスワードリセットは実行不可になります。4月の一斉スキャンを起点に、現在は毎日ドメイン状態を更新。実装初期(6月)からの運用で、1,800件超のメール認証を安全側に失効させています。
背景:ドメイン復活攻撃とは
メールは本人性の根拠として広く使われますが、メールの正当性はドメイン維持に依存します。ドメインが失効すると、第三者が購買・設定して当該ドメインのメールを受け取れるようになり、サービス側のパスワードリセットを踏み台にアカウント乗っ取りが可能です。PyPIでも2022年に実害が確認され、他言語圏のレジストリでも同型の事案が起きています。
ドメイン失効のライフサイクルとPyPIの動作
一般に、ドメインは有効期限を過ぎると
Renewal Grace(0〜45日)→ Redemption(約30日)→ Pending Delete(約5日)の順に推移します。
PyPIはFastlyのDomainr Status APIで状態をおおむね30日間隔で照会し、Redemption入りを「信頼喪失の兆候」とみなしてメール認証を失効。それ以降、リセットメールは送られません。なお、失効を伴わない正規の名義移転(トランスファー)は検出外としています。
既存の防御との重ね掛け
PyPIでは2024年1月1日以降に活動があるアカウントは2要素認証(2FA)必須です。したがって、仮にメール経由で一次認証を突破されても、二次要素が防波堤になります。一方、旧来アカウントや2FA未導入の場合は、ドメイン失効=高リスクで、今回の対策はそこを狙った現実的な封じ手です。
利用者への実務的な推奨
-
バックアップ用メールを追加:独自ドメインのアドレスしか登録していない場合は、別系統(例:主要フリーメール)のアドレスを第二の確認済みメールとして追加します。
-
ドメイン管理の強化:自社ドメインは自動更新・レジストリロック・多要素を標準化し、有効期限の監視アラートを複数系統(個人+共有)で設定します。
-
2FAの徹底:PyPI本体だけでなく、**アカウント回復に使う他サービス(VCS、CI、メールプロバイダ)**にも2FAを必ず設定し、なりすまし回復の連鎖を断ちます。
-
Trusted Publishingの活用:可能なパッケージはOIDCベースの署名・公開フローに移行し、パスワード/トークン依存を縮小します。
制約と今後
この仕組みは完全防御ではありません。失効を伴わない正規トランスファーや、ドメイン状態推定の限界など検知ギャップは残ります。それでも、見かけ上は正当なパスワードリセットに見える攻撃を運用側の判断で止められる点が大きな前進です。PyPIは今後も日次チェックを継続し、サプライチェーンの安全性を高めるとしています。
参照
https://blog.pypi.org/posts/2025-08-18-preventing-domain-resurrections/








