モデルファイル(pickle形式)は、読み込むだけでコードが動くことがある
Hugging Face公式ドキュメントは、Pythonのpickle形式はPyTorchのモデル重みの標準形式であり、読み込み時に任意のコードが実行されうると説明している。「信頼できない出所のデータはunpickleしない」という、pickleを使う多くの文書の注意を引き、信頼できる個人・組織の配布物を使うことを案内し、Hubでの検査の仕組みと限界、別の保存形式(safetensorsなど)も紹介している。特定の事件ではなく、モデル配布に共通する危険なファイル形式についての公式の注意書きである。
公式資料で分かっていること
- 公式ドキュメントによれば、pickleはPyTorchモデル重みの既定形式で、読み込むと任意のコードが動くことがある。
- 同ドキュメントによれば、pickleを使う多くの文書が「信頼できない出所のデータはunpickleしない」と述べており、このページでは信頼できる個人・組織のものを読み込むよう案内している。
- 同ドキュメントによれば、Hubはアップロードされた全ファイルをClamAVでスキャンするが、これはpickleを使った攻撃を検出しない。
- 同ドキュメントによれば、「Pickle Import scan」は、pickleを実行せずに中で読み込まれるものの一覧を出し、怪しいものを強調表示する。ただし完全ではなく、ファイルが安全かの確認は利用者の責任とも書かれている。
- 同ドキュメントが挙げる対策:信頼できる個人・組織の配布物を使う(署名付きコミットは公開者の確認にはなるが、ファイルの安全を保証しない)、TensorFlowやFlaxのチェックポイントを使う、pickle以外の形式(safetensorsなど)を使う。
まだ分かっていないこと
- このドキュメントが書かれた日・更新日(ページから読めなかった)。
- 実際に悪意あるモデルが配布された個別の事例の件数や内容(読んだ公式ページには書かれていない)。
自分の使い方への目印:モデルファイルは「データ」に見えても、形式によっては「プログラム」として動く。ダウンロードするときは、配布元と保存形式(pickleか、safetensorsなど)を確認する、という見方ができる。使うべき形式や手順は、使うライブラリの公式ドキュメントも確認したい。
確認できていない点(2件)
- ページに日付が表示されないため、公表日は載せていない。
- safetensorsの安全性については、このページでは「実験中の形式」と紹介されており、詳しい説明は別ページに当たる必要がある。今回は読んでいない。