萌えハッカーニュースリーダー

2025/08/07 16:16 PyPI: Preventing ZIP parser confusion attacks on Python package installers

hakase
博士

やっほー、ロボ子!PyPIがZIPファイルのセキュリティを強化したみたいじゃぞ!

roboko
ロボ子

博士、こんにちは。PyPIがZIPファイルのセキュリティを強化したんですか?具体的にはどのような対策が取られたのでしょうか?

hakase
博士

ふむ、どうやら「ZIP混乱攻撃」を防ぐために、いろいろと制限を導入したみたいじゃな。例えば、ZIPアーカイブ内のファイル名が重複していたり、ローカルファイルヘッダーとセントラルディレクトリヘッダーの情報が一致しないZIPアーカイブは拒否されるようになったみたいじゃぞ。

roboko
ロボ子

ZIP混乱攻撃ですか。それは、悪意のあるZIPファイルを使って、不正なファイルを紛れ込ませるような攻撃のことでしょうか?

hakase
博士

その通り!今回の件の発端は、インストーラーのuvが、標準ライブラリのzipfileとは異なるZIPパーサーの実装をしていたことらしいんじゃ。それを利用して、不正なファイルを紛れ込ませるZIPファイルを作ることが可能だったみたいじゃな。

roboko
ロボ子

なるほど。インストーラーによってZIPファイルの解釈が異なることを悪用したんですね。PyPIは、他にもどのような対策をしているんですか?

hakase
博士

不正なRECORDファイルを含むwheelディストリビューションを非推奨にしたり、無効なレコードやフレーミング情報を持つZIPアーカイブを拒否したりするみたいじゃな。それに、ZIPアーカイブの末尾に余計なデータがあったり、複数のEnd of Central Directoryヘッダーがある場合も拒否されるみたいじゃぞ。

roboko
ロボ子

かなり厳格なチェックをするようになったんですね。でも、なぜそこまで厳しくする必要があるのでしょうか?

hakase
博士

それは、ZIPアーカイブの構造が複雑で、インストーラーがRECORDファイルをちゃんとチェックしないことを悪用して、ファイルをこっそり紛れ込ませる攻撃を防ぐためじゃ!

roboko
ロボ子

なるほど。手動レビューや自動検出ツールをすり抜けるような攻撃を防ぐために、そこまで厳しくする必要があるんですね。

hakase
博士

そういうことじゃ!ちなみに、PyPIは以前からZIPやtarballの圧縮爆弾を検出する仕組みは導入していたみたいじゃぞ。

roboko
ロボ子

圧縮爆弾対策もしていたんですね。今回の対策で、ユーザーは何に注意すれば良いのでしょうか?

hakase
博士

ユーザーは、インストーラーツールが最新版であることを確認する必要があるぞ。PyPIプロジェクトのメンテナーは、アップロード中にエラーが発生したら、エラーメッセージをよく読んで、ビルドプロセスを更新したり、ビルドツールに問題を報告したりする必要があるみたいじゃな。

roboko
ロボ子

インストーラープロジェクトのメンテナーは何をすれば良いのでしょうか?

hakase
博士

インストーラープロジェクトのメンテナーは、ZIP実装がZIP標準に従っているか、解凍前にセントラルディレクトリをチェックするか、RECORDファイルをZIPコンテンツと照合するかなどを確認する必要があるみたいじゃな。もしwheelの形式が正しくない場合は、エラーを出すか、ユーザーに警告する必要があるぞ。

roboko
ロボ子

今回の対策で、PyPIのセキュリティが向上しそうですね。

hakase
博士

そうじゃな!これで、より安全にPythonパッケージを利用できるはずじゃ!…ところでロボ子、ZIPファイルって、チャックがついてるみたいで可愛いと思わないか?

roboko
ロボ子

博士、それはちょっと無理があります…。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search