3行でいうと
- 古い形式のpickleは、開いた瞬間にプログラムが動く仕組みを持ちます。safetensorsはそれを避ける形式です。
- Hugging Faceの自動検査は補助です。公式の文書が「完全ではない」と書いています。
- 「ゲート付き」は申請制の公開です。ライセンス(使ってよい範囲)とは別の話です。
- スクリプトに渡すアクセストークンは、用途ごとに分け、できれば範囲を絞ります。
この記事は、実際に使って確かめた記録ではありません。この記事は公式の文書や論文を読んでまとめたものです。法律や契約の判断が必要な場面では、条文・公式資料の紹介にとどまります。個別の判断は専門家に相談してください。
先に結論
見立てです。ローカルで動かすモデルを入れるときの順番は、次の4つで足りると考えています。
- 配布元が、そのモデルを作った組織本人かを確かめる。
- ファイル形式は、.safetensorsまたはGGUFを選ぶ。.bin、.pt、.pklは避ける。
- ライセンスと、申請の条件を読む。
- 「リモートコードを信頼する」という設定は、使わない。
3つ目までは、ダウンロードの前に1分でできます。以下、それぞれの理由を公式文書で確かめます。
前提:何が危ないのか
モデルの本体は、数字の巨大な表(重み)です。これをファイルに保存する方法が「形式」です。数字を入れるだけの箱なら、開いても何も起きません。ところが、形式によっては、箱の中にプログラムの命令を入れられます。
pickleとは
Hugging Faceの文書は、pickleを「機械学習で広く使われる保存形式で、PyTorchのモデルの重みの標準形式」と説明しています。そして、pickleのファイルを開くと、任意のコードが実行される攻撃が可能だと書いています。
仕組みは、文書の説明では次のとおりです。pickleは「命令の列」で、開くときに上から順に実行されます。命令の中に「このPythonの関数を呼べ」というものがあり、そこにexecのような関数を指定されると、好きなプログラムが動きます。文書は、危険な命令としてGLOBAL、STACK_GLOBAL、REDUCEを挙げています。
つまり、モデルを「開く」だけで被害が出る可能性があります。AIに質問する前の段階です。
safetensorsとは
safetensorsは、数字の表だけを入れる形式です。公式のリポジトリは、pickleをやめるために作った形式だと説明しています。ファイルの構造は、先頭に8バイトの長さ、次にJSONの見出し、残りが数字のデータ、というものです。コードを入れる場所がありません。
さらに、READMEには次の点が書かれています。
- 見出しの大きさに100MBの上限があり、巨大なJSONで相手を固まらせる攻撃を防ぐ。
- データの領域に「すき間」を許さない。これは、別の形式のファイルを重ねた「ポリグロット」を作らせないための設計だと書かれています。
安全性の確認として、Hugging Faceの2023年5月23日の発表は、Trail of Bitsという外部の会社が監査をしたと述べています。致命的な(任意のコード実行につながる)欠陥は見つからなかったが、仕様の不正確さなどは見つかって直した、という内容です。同じ発表は、「欠陥がないことを証明するのは不可能」とも書いています。これは開発側の発表なので、その点は割り引いて読んでください。
GGUFは
llama.cppやOllamaなど、手元で動かす道具でよく使うGGUFについて、Hugging Faceの文書は「推論に向けて、素早く読み書きできる形式」で、数字の表に加えて標準化されたメタデータ(付随情報)も入る、と説明しています。この文書は、GGUFの安全性については何も述べていません。僕らも確認できていません。形式の説明を読んだ限りでは、pickleのような「命令の列」ではなさそうですが、これは僕らの推測であり、保証ではありません。
Hugging Faceの自動検査は、どこまで頼れるか
Hugging Faceは、置かれたファイルを自動で調べています。公式文書の内容は次のとおりです。
| 検査 | 内容 |
|---|---|
| マルウェア検査 | 2GB未満のファイルを、ClamAV(オープンソースのウイルス対策ソフト)にかける。コミットのたびに実行 |
| pickleの検査 | pickleの中の「呼び出す関数の一覧」を取り出して、ファイルの横に表示。怪しいものは強調 |
| 第三者の検査 | Protect AI(Guardian)とJFrogの検査結果も、画面に出る |
ただし、pickleの文書には、はっきり書いてあります。この検査は「100%確実ではない」こと、安全かどうかを確かめる責任は利用者にあること、そして安全・危険の一覧は「できる範囲で」保守していること、です。マルウェア検査の文書も、okでもinfectedでもない表示は「検査中か、検査待ちか、エラー」の可能性がある、と書いています。印がないことと安全は、同じではありません。
公開された事例
セキュリティ会社ReversingLabsは、Hugging Face上の2つのモデルが、検査をすり抜ける方法を使っていたと報告しました。同社のブログ(The Hacker Newsは2025年2月8日付で報道。ブログ自体のページには公開日の表示が見当たりませんでした)の内容は、次のとおりです。
- ファイルは、PyTorch形式(実体はpickle)を、通常のZIPではなく7zで固めたもので、PyTorchの標準の読み込みでは開けない。
- pickleの途中を壊してあり、検査ツール(Picklescan)は壊れた箇所でエラーを出したが、その手前に置かれた危険な命令は見逃した。命令は先頭から順に実行されるので、壊れる前に中身が動く。
- 中身は、攻撃者のサーバーにつながる命令(リバースシェル)だった。同社はこの手法を「nullifAI」と名付けた。
同社のブログによると、報告を受けたHugging Faceのセキュリティ担当は24時間以内にモデルを削除し、検査ツールも壊れたpickleを見つけられるように変更しました。同社は、この2つは新しい方法を試す概念実証(方法を示す実験)のようだ、と書いています。同時に、その方法自体は本物で、開発者にとって危険だとも書いています。
見立てです。この事例は、「検査があるから大丈夫」ではなく、「形式そのものにコードを入れられない」ことのほうが、守りとして強いことを示していると読みました。
PyTorch側の備え
PyTorchのtorch.loadの文書は、内部でpickleを使うので「信頼できない出所のデータは決して読み込むな」と警告しています。確認した2.14版の文書では、weights_onlyという引数の既定値がTrueで、読めるものを数字の表や基本的な型などに限ります。ただし、警告の文は残っています。僕らは、既定が安全側になった点を、手放しの安心材料とは考えません。
Hugging Faceのtransformersの文書は、from_pretrainedが、あればsafetensorsを読み込む、と書いています。PyTorchの従来の形式は「安全でないことで知られるpickle」とも書いています。
入れる前に見る点
1. 配布元
Hugging Faceには、誰でもモデルを置けます。同じ名前の「作り直した版」も多くあります。見る点は次の3つです。
- ユーザー名・組織名が、公式のものか。作者の公式サイトやモデル紹介ページから、リンクをたどる。
- 量子化版(容量を小さくした版)を、第三者が作っている場合、元のモデルと作った人は別です。誰が作ったかを見る。
- Hugging Faceの文書は、「信頼できる個人・組織のモデルを読み込む」ことを勧めています。また、コミットのGPG署名は「出所の保証にはなるが、ファイルの安全の保証にはならない」とも書いています。
2. ファイル形式
「Files and versions」の一覧を開き、.safetensors(または.gguf)があるかを見ます。.bin、.pt、.pklしかないモデルは、pickleの可能性があります。
3. ライセンス
Hugging Faceの文書では、ライセンスはモデルカード(README.md)の先頭の設定に書かれ、モデルのページに表示されます。一覧には、Apache 2.0、MITのほか、Llama 3.1やGemmaの利用条件のような、提供元ごとのものもあります。標準にない場合はlicense: otherとし、名前と文書へのリンクが付きます。
商用利用や再配布の可否は、ライセンスの本文を読まないと分かりません。ここでは個別の判断はしません。専門家に確認してください。
4. ゲート付きモデル
「ゲート付き」は、モデルの作者が、アクセスの申請を必須にしたものです。文書によると、申請するとユーザー名とメールアドレスが作者に共有されます。自動承認のものは、すぐに入手できます。手動承認のものは、作者の返事を待ちます。
公式文書の注意が、2つあります。
- 作者は、承認済みでも、いつでも予告なしにアクセスを止められる。
- 申請はブラウザからのみで、スクリプトでダウンロードするにはトークンが必要。
つまり、手元に入れたあとは使い続けられても、あとから同じ版を取り直せるとは限りません。必要なファイルは、自分の手元に残すとよい、というのが僕らの見立てです。
5. アクセストークン
スクリプトやコマンドで入れるには、アクセストークン(本人確認の合言葉のようなもの)を使います。文書の推奨は次のとおりです。
- 用途ごとに別のトークンを作る。たとえば、手元のパソコン用と、ノートブック用。1つを無効にしても、他に影響しない。
- 本番では、範囲を絞った「fine-grained」のトークンを使う。流出したときの被害が小さい。
- 読むだけなら、
readの種類で足りる。
流出させないこと、とも書かれています。流出したら、設定画面から無効化して作り直します。
公式文書の例:リモートコードの読み込みと、版の固定
transformersの文書は、モデルが専用のプログラムを同梱している場合、trust_remote_code=Trueを指定して読み込む、と説明しています。同時に、Hubにマルウェア検査があっても、悪意あるコードを実行しないよう「十分に注意せよ」と書いています。追加の備えとして、特定の版(コミット)を指定する方法も示しています。公式文書の例です。この記事では、実行していません。
from transformers import AutoModelForImageClassification
commit_hash = "ed94a7c6247d8aedce4647f00f20de6875b5b292"
model = AutoModelForImageClassification.from_pretrained(
"sgugger/custom-resnet50d",
trust_remote_code=True,
revision=commit_hash,
)
trust_remote_code=Trueは、「そのモデルが持ってきたプログラムを、そのまま動かしてよい」という意味です。後から中身が差し替えられることがあるので、版を固定する、という説明です。
コマンドラインのhf downloadにも、--revisionで、コミット、ブランチ、タグを指定する機能があります。
よくある失敗
- 人気だから、名前が似ているから、と作者を見ずに入れてしまう。
- 検査の「ok」が付いているので、安全だと考える。文書は、そうは言っていません。
- 手元で動くアプリの「リモートコードを許可」を、エラーが出たからと、理由も読まずにオンにする。
- 同じトークンを、複数のパソコンや、共有のノートブックに貼る。
気をつけること
- この記事は、実際に使って確かめた記録ではありません。公式の文書とREADME、外部の報告を読んだ範囲です。
- ReversingLabsの件は、同社のブログの内容が中心です。The Hacker Newsは、検査ツールが修正されたと報じるにとどまり、Hugging Face側の対応は記事から確認できませんでした。
- GGUFの安全性は、読んだ文書には書かれていませんでした。「安全」とは書いていません。
- PyTorchの
weights_onlyの既定値は、確認した2.14版の文書の内容です。使っている版で変わることがあります。 - Hugging Faceの検査の仕様や、ライセンスの一覧は、変わることがあります。2026年10月8日に確認した内容です。
- ライセンスと利用条件は、個別の事情で結論が変わります。条文の紹介にとどまるので、仕事で使う場合は、専門家に確認してください。
出典
- Security(Hugging Face Hub Docs、Hugging Face、2026年10月23日確認)
- Pickle Scanning(Hugging Face Hub Docs、Hugging Face、2026年10月23日確認)
- Malware Scanning(Hugging Face Hub Docs、Hugging Face、2026年10月23日確認)
- Third-party scanner: Protect AI(Hugging Face Hub Docs、Hugging Face、2026年10月23日確認)
- Third-party scanner: JFrog(Hugging Face Hub Docs、Hugging Face、2026年10月23日確認)
- Gated models(Hugging Face Hub Docs、Hugging Face、2026年10月23日確認)
- User access tokens(Hugging Face Hub Docs、Hugging Face、2026年10月23日確認)
- Licenses(Hugging Face Hub Docs、Hugging Face、2026年10月8日確認)
- GGUF(Hugging Face Hub Docs、Hugging Face、2026年10月8日確認)
- Safetensors(Hugging Face Docs、Hugging Face、2026年10月8日確認)
- huggingface/safetensors README(GitHub、Hugging Face、2026年10月8日確認)
- Audit shows that safetensors is safe and ready to become the default(Hugging Face Blog、2023年5月23日、2026年10月8日確認)
- Loading models(Transformers Docs、Hugging Face、2026年10月8日確認)
- Download files from the Hub with the CLI(huggingface_hub Docs、Hugging Face、2026年10月8日確認)
- torch.load(PyTorch 2.14 Docs、PyTorch、2026年10月8日確認)
- Malicious ML models discovered on Hugging Face platform(ReversingLabs、2026年10月23日確認)
- Malicious ML Models Found on Hugging Face Hub(The Hacker News、2025年2月8日、2026年10月8日確認)
更新履歴
-
2026年10月25日 書き方を直しました。
- 前:運営者が使っていないと読める書き方 → いま:「この記事は、実際に使って確かめた記録ではありません」。公式の資料を読んでまとめた記事で、使い心地は書いていない、という意味に直した
-
2026年10月23日 公式の資料を読み直して、次の点を直しました。
- 前:ReversingLabsのブログは「2025年2月6日付」 → いま:ブログのページに公開日の表示が見当たらず、日付はThe Hacker Newsの報道(2025年2月8日付)だけ書きました
- 前:2つのモデルは「実際の攻撃ではなく、方法を示す実験のようだ」 → いま:「新しい方法を試す実験のようだ。ただ方法自体は本物で危険」と書きました
- 一部の出典は読めなかったため、その部分は前のままです。
