PyPI の Critical プロジェクトで 2FA が義務化:突然の決定に反発する開発者も

PyPI mandates 2FA for critical projects, developer pushes back

2022/07/09 BleepingComputer — 金曜日に、サードパーティのオープンソース Python プロジェクトための、公式リポジトリである Python Package Index (PyPI) は、重要なプロジェクトのメンテナに対して二要素認証 (2FA) を義務付ける計画を発表した。この動きに対して、多くのコミュニティ・メンバーが賞賛したが、ある人気 Python プロジェクトの開発者が、自分のプロジェクトに与えられた Critical ステータスを無効にするために、PyPI からコードを削除して再公開することになった。 

PyPI は上位1%のプロジェクトに 2FA を展開

昨日に、PyPI レジストリの管理者は、Critical と判断されたプロジェクトに、2要素認証 (2FA) を導入しているところだと発表した。過去6ヶ月間において、ダウンロード数の上位1%を占める PyPI プロジェクトと、PyPI の依存関係が重要であるとされている。

この管理者はブログ投稿で、「Python エコシステムの一般的なセキュリティを向上させるために、PyPI は重要なプロジェクトに二要素認証 (2FA) 要件の実装を開始した。この要件は、今後数カ月で有効になる」と発表した。 

さらに、Python Software Foundation (PSF) のスポンサーである Google Open Source Security Team のサポートにより、重要なプロジェクトのメンテナには無料のハードウェア・セキュリティ・キーが提供されるという。 

この取り組みは、npm と PyPI のエコシステムにおいて、正規のソフトウェア・ライブラリが乗っ取られるというインシデントが、このところ繰り返されていることを受けて行われたものだ。

昨年は、npm のライブラリである ua-parser-js/coa/rc が、メンテナのアカウントを侵害され、マルウェアに変更される事件が発生しました。そのため、2021年12月から npm の親会社である GitHub は、開発者向けにログイン・エクスペリエンスの強化 (2FA オプション) を展開する措置をとり、今年の5月には、さらなるセキュリティ・アップデートが発表された。

BleepingComputer が報じたように、PyPI プロジェクト ctx が乗っ取られたが、その後に、このインシデントが倫理的ハッキング実験の失敗であることが判明した。この直近のニュースを受けて、PyPI も GitHub に続いて、メンテナ・アカウントに 2FA を導入することになった。

PyPI の管理者は、「最も広く使われているプロジェクトが、アカウント乗っ取りから確実に保護されるようにすることは、Python エコシステムの一般的なセキュリティを改善するという、すべての PyPI ユーザーのための幅広い取り組みの一歩だ」と説明している。

彼らが、Critical と認識し、おそらく 2FA の採用が要請されるだろう、3818件以上の PyPI プロジェクトと、8218件の PYPI ユーザー・アカウントを示したダッシュボードも共有されている。その一方で、28,000 以上の PyP Iユーザー・アカウント (Critical に関連しないものも含む) が、自発的に 2FA を有効にしている。

2FA の義務化に反発する開発者

大半の人々 [123] は、この動きに好意的であり、ソフトウェアのサプライチェーン全体のセキュリティ強化に向けた、PyPI の取り組みを歓迎しているが、そうでない人もいる。

atomicwrites の PyPI プロジェクトの開発者である Markus Unterwaditzer は、PyPI から「おめでとう!」というメールが届いた後に、自分のプロジェクトが Critical だと判断され 2FA が必要になったことを開発者に伝え、レジストリからコードを削除することにした。

なお、Unterwaditzer の atomicwrites は、600万回/月以上のダウンロードが行われたこともあると報告されている。

この動きについて、彼の重要な JavaScript プロジェクトを、他の開発者が npm レジストリから取り下げることでインターネットを壊しそうになった、2016年の left-pad 事件と比較する人もいた。

ただし、今回の場合は、Unterwaditzer は自身のコードを永久に取り下げるのではなく、単に atomicwrites のバージョンを再公開し、プロジェクトのダウンロード数をリセットしたに過ぎない。つまり、PyPI から割り当てられた Critical プロジェクトのステータスもリセットしたのだ。それとは対照的に、’left-pad’ 事件を取り巻く状況はやや異なっており、商標紛争が絡んでいた。

Unterwaditzer は、「このパッケージを非推奨とすることにした。パッケージを削除したことは後悔し、結局は 2FA を有効にしたが、PyPI の突然のルール変更とパッケージ削除に関する奇妙な行動は、この人気の Python ソフトウェアを無料で保守する時間を、割に合わないものにすると思う。私は、むしろ楽しみながらコードを書き、実際にお金をもらっているときだけ、サプライチェーンのセキュリティについて心配したいのだ」と述べている。

BleepingComputer は、Unterwaditzer が 24時間の間に自身のプロジェクトの全バージョンを削除した後に、ただちに再公開していることを確認した。

PyPI project atomicwrites republished
PyPI project ‘atomicwrites’ versions republished today (BleepingComputer)

この件に関しては、他のコミュニティ・メンバーからもコメントが寄せられている。

Python ベースのマイクロ Web フレームワークの作成者である Armin Ronacher は、次のように主張している。

Ronacher は、「オープンソース・プロジェクトを作るとき、私は Critical なパッケージを作ることを選択したわけではない。時間をかけて採用されることで、そうなるのだ。現在、Critical なパッケージであることの影響は、きわめて軽微だ。しかし、線が引かれたことで、さらなる制限を設けることが、なぜ PyPI の利益にならないのかが、私にはよく分からない。パッケージのユーザーに負担をかけるのではなく、すでに自分の労力と時間を費やしている開発者に対して、何かを押し付けているのが現状だ。インデックスの観点からは、これらのルールの一部には、インデックスの仕様に負担をかけるものもあるが、全員にルールを強制しない利点がある。したがって、重要なパッケージだけに負担をかけることは、採用は損なわれない」と述べている。

オープンソース・ソフトウェアのコンポーネントを巻き込んだ、マルウェアによる攻撃などが繰り返されているため、レジストリ管理者は、プラットフォーム全体のセキュリティを強化する必要に迫られている。オープンソース・ソフトウェアの開発者に対する期待として、その開発だけではなく、プロジェクトのセキュリティ確保という、付加的な負担がどれだけ合致しているかは、まだ分からない。

PyPI の atomicwrites プロジェクトの開発者である Markus Unterwaditzer さんの対応が強烈ですね。PyPI から Critical だと判断され、2FA が必要になったことで、レジストリからコードを削除することにしたとのことですが、楽しみながらコードを書きたいという気持ちも分かります。PyPI だけではなく GitHub も Google も、OSS リポジトリの信頼性を高めようと必死ですが、開発者たちをサポートしていくための方式については、まだまだ試行錯誤の段階にあるのでしょう。

%d bloggers like this: