本文へ

利用状態: ログイン状態を復元中...

Deep DiveAbcas Security Research

MCP package供給経路: lock、artifact、provenanceを別々に確認

同じpackage名や正しいprovenanceでも、実行artifact、依存tree、build内容が同じとは限りません。MCP接続前にversion、digest、発行identity、変更差分を別々に確認する受入条件です。

Read in English

package managerから起動するMCP serverは、設定ファイルに同じpackage名が残っていても、同じcodeを実行し続けるとは限りません。version range、配布artifact、transitive dependency、registry、build workflowのどれかが変われば、端末上で動く権限主体も変わります。lock、artifact digest、provenanceはそれぞれ別の問いに答える証拠であり、どれか1つで供給経路全体の安全を保証するものではありません。

4種類の証拠と限界

証拠確認できること単独では確認できないこと
exact version / lock解決されたdirect・transitive dependency配布artifactが承認済みbuildと同一か
artifact digest取得したbytesが記録値と一致そのbytesが安全なcodeか
provenance / attestationsource、workflow、publisher identityとの結び付きsourceやbuild手順に悪意・脆弱性がないこと
sourceとrelease差分のreview意図した変更と権限差実際に展開されたbytesとの一致

npmは、lockfileがpackage.jsonのrangeを満たす場合にはexact versionを使うと説明しています。ただし、MCP clientの起動設定が毎回registryからmoving tagやversion rangeを直接解決する場合、別projectのlockfileはその起動を固定しません。たとえば承認時に@example/search-mcp 1.4.2を確認していても、^1.4を再解決すれば1.4.3が選ばれる可能性があります。名前が同じでも、受入れたartifactは別物です。

Python packageでも、version pinと配布fileのidentityは別です。versionを固定すると解決範囲は狭まりますが、hashは許可したdistribution fileを固定します。同じreleaseでもplatform別wheelがあれば、2台の端末が異なるfileを取得し得るため、versionだけでなく配布file名とdigestを受入れ記録に含めます。

provenanceが証明するidentity

npm provenanceは、packageをsource codeとbuild instructionsへ結び付けます。PyPI attestationは、release fileが特定のTrusted Publisher identityから公開されたことを示します。GitHub artifact attestationもrepository、workflow、commitなどとの結び付きを検証可能にします。

これらは改ざん検知とpublisher変更の発見に役立ちますが、発行identityの所有者が安全な変更だけを入れたことまでは証明しません。npm、PyPI、GitHubはいずれも、attestationの存在をartifactの安全保証として扱わないよう明記しています。検証に成功した新releaseでも、依存追加、install script、network destination、file access、tool authorityの差分reviewが残ります。

MCP接続前の受入条件

MCPの現行Security Best Practicesは、local serverがclientと同じ端末でbinaryとして実行され、filesystem、credential、networkへ到達し得る境界を示しています。MCP仕様自体は、特定package managerのlockfileやprovenance書式を必須にしていません。次はMCP Guardの実務推奨です。

  • package registry、package名、exact version、配布file名、artifact digestの固定
  • direct・transitive dependencyを含むlockまたはhash付き解決記録
  • provenanceのsource repository、workflow、commit、publisher identityの検証
  • 前回承認artifactからのdependency、install hook、権限、外部接続の変更差分
  • test環境で確認したartifact digestと、本番起動時に取得したartifact digestの一致

同じsource identityの正しいprovenanceがあっても、digestや変更差分が未確認なら自動承認しません。moving tag、無制限のversion range、起動時の毎回再解決しかない構成は、artifactを固定できる実行環境へ変更するまで接続を見送ります。変更後は、旧判定を新artifactへ転用せず、変更範囲に応じて再確認します。

確認範囲と出典

2026年9月22日に、MCP 2026-07-28 Security Best Practices、npm provenance、PyPI attestation、GitHub artifact attestationの公開資料を確認した設計分析です。特定packageの改ざん、malware、CVE、またはMCP Guardによる個別artifact検査を報告するものではありません。表と受入条件は一次資料の限界から導いたMCP Guardの実務推奨です。