PyPI adds project archiving system to stop malicious updates
2025/02/02 BleepingComputer — Python Package Index (PyPI) は、“Project Archival” の導入を発表した。それは、プロジェクトをアーカイブしたパブリッシャーが、更新を期待しないでほしいという旨のメッセージを、ユーザーに対して示す、新しいシステムである。
ただし、それらのプロジェクトは引き続き PyPI でホストされ、ユーザーは引き続きダウンロードできる。また、依存関係については、十分な情報に基づいた決定を下せるよう、メンテナンス・ステータスに関する警告が表示されるという。

OSS の世界では、広範に利用されているが放棄されたプロジェクトの、開発者アカウントを乗っ取った攻撃者が、悪意の更新をプッシュすることが多発している。したがって、この機能により、サプライ チェーンのセキュリティが向上すると期待されている。
ユーザーのリスクを軽減するだけではなく、プロジェクトのライフサイクル・ステータスを明確に伝えることで、ユーザーからのサポート・リクエストも削減できる。

Source: PyPI
プロジェクト・アーカイブの仕組み
PyPI が提供を開始した、このプロジェクト・アーカイブ・システムの開発者である TrailofBits は、「この機能は、メンテナーが管理するステータスを提供し、プロジェクトの所有者はプロジェクトをアーカイブ済みとしてマークして、これ以上の更新/修正/保守が行われないことを、ユーザーに知らせることが可能だ。メンテナーがプロジェクトをアーカイブ化する前に、最終バージョンをリリースし、その理由を明らかにするよう、PyPI は推奨しているが、必須ではない」と、ブログで説明している。
なお、プロジェクトの作業を再開することを、メンテナーたちが選択した場合には、いつでもプロジェクトのアーカイブを解除できるという。
この新しいシステムの内部では、もともとプロジェクトの隔離用に開発された LifecycleStatus モデルが使用されている。このモデルには、さまざまなステータス間の遷移を可能にする、ステート・マシンが取り込まれている。
プロジェクト所有者が、PyPI 設定ページの “Archive Project” オプションをクリックすると、このプラットフォームはメタデータを自動的に更新し、新しいステータスを反映させる。
TrailofBits によると、”deprecated”/”feature-complete”/”unmaintained” などのプロジェクト・ステータスを追加し、プロジェクトの状態の、ユーザーによる把握を高める計画もあるという。

Source: PyPI
上記の警告バナーは、開発者に対して、安全が確保されない古いプロジェクトへの依存を終了し、積極的にメンテナンスされている、代替の依存関係を探すよう促すことを目的としている。
それ以外の悪意のケースとしては、放棄されたパッケージをターゲットにする攻撃者が、メンテナンスされていないプロジェクトを乗っ取り、最後の更新から数年後に行われると、多くの人々が思い込む偽の更新を介して、悪意のコードを挿入することがよくある。他のケースでは、メンテナーが開発を停止する計画を立てる際に、プロジェクトの削除を選択し、リバイバル・ハイジャック攻撃などのシナリオにつながることもある。
このようなメンテナーたちに対して、アーカイブ・オプションを提供することは、セキュリティの観点から見ると、はるかに優れたものになる。
結局のところ、OSS の性質上、数多くのプロジェクトが予告なしに放棄されている。そのようなプロジェクトが、継続してメンテナンスされているかどうかは、ユーザーの推測に委ねられている。
この新しいシステムにより、プロジェクトのステータスに関する明確なシグナルが提供されるはずだ。それにより、プロジェクトのメンテナンスに関する透明性が向上し、ユーザーによる推測が排除されると期待される。
PyPI のサプライチェーンのセキュリティ向上のための、新機能が導入されるとのことです。PyPI のブログによると、将来的には、”deprecated” や “unmaintained” などの追加のステータスや、PyPI の公開 API の変更などによって、プロジェクトのライフサイクル管理の改善が計画されているとのことです。
このブログでは、PyPI の開発者アカウントが攻撃者に乗っ取った事例として、2022/08/25 に「PyPI パッケージ・メンテナを攻撃:巧妙なフィッシングでプロジェクトを乗っ取る」という記事をポストしています。よろしければ、PyPI で検索と併せて、ご参照ください。
You must be logged in to post a comment.