固定したはずのMCPサーバーは、思ったほど固定されていないかもしれない

管理者のワークステーション上で、特定の1リリースだけを実行するよう設定されたMCPサーバーが、設定に一切手を加えていないにもかかわらず、5週間で15通りの異なる依存関係セットで動作していました。この変化を見つけたのは、Corelightで技術アライアンス担当ディレクターを務めるJames Lagermann氏です。同社のラボで確認しました。サーバーが使う69パッケージのうち23個でバージョンが変わっており、その中には暗号化ライブラリ、JSON Web Token(JWT)ライブラリ、MCPのソフトウェア開発キット(SDK)自体も含まれていました。

Image

MCP(Model Context Protocol)サーバーは、AIコーディングアシスタントがユーザーに代わって他のツールを操作するための仕組みです。そのため、ユーザーの認証情報を保持していることが少なくありません。このワークステーションでは、サーバー群が1週間にファイアウォール、SIEM、センサー管理など11の管理システムへ1,600回以上接続していました。依存関係のいずれかに不正なコードが紛れ込めば、そのコードはこれらのアクセス権限で実行されます。

固定は効いていなかった

アシスタントは、Pythonパッケージをダウンロードして1行の設定から実行するランチャー「uvx」でサーバーを起動していました。各エントリには、正確なリリースタグ、PyPIのバージョン、またはGitコミットが指定されていました。ところが、あるコミュニティ製サーバーでは、ランチャーがパッケージに宣言された依存関係からインストールを行い、プロジェクトのハッシュ固定ロックファイルを使っていませんでした。その結果、環境が再構築されるたびに、配下の約60パッケージがPython Package Indexから新たに解決されていました。パッケージのバージョンを固定しても、そのパッケージが依存するパッケージまで固定されるとは限りません。

アシスタントは、あるサーバーを1週間に162回起動しました。大半の起動ではキャッシュ済みの環境が再利用されていましたが、同じリリース・同じコミットのビルドがキャッシュに19個も残っていました。つまり、2日に1回ほどの頻度で環境が作り直されていたことになります。この頻度は重要です。乗っ取られたリリースが公開されているのは、わずか数分から数時間という場合もあるためです。2026年6月には、PyPI上でShai-Huludワームの亜種がMCP関連のパッケージを標的にし、AIコーディングアシスタントのキーを狙いました。

現場でも同じパターン

Corelightは、2つのベンダーカタログと自社ラボにある35のMCPサーバーを調査しました。そのうち23個は、推奨されているインストール手順が、起動のたび、あるいはインストールやイメージのビルドのたびに、公開レジストリから依存関係を取得する構成でした。

Lagermann氏はHelp Net Securityの取材に対し、現場でも同じ状況を目にしていると語りました。「顧客環境でも、ほかの実運用環境でも、同じパターンを見てきました。これまでに話を聞いた管理者は、100%が少なくとも1つはこの問題を抱えたMCPサーバーを使っていました」

固定は有効だが、更新を続ける担当者が必要

Corelightは5つのサーバーを固定しました。コミットへの固定、ハッシュ固定ロックファイルからの一度きりのインストール、直接起動、更新チェックの無効化です。その後の2週間で5つのサーバーは計457回起動されましたが、いずれもインストール済みパッケージの一覧は、インストール当日に記録した一覧と一致していました。

ただし、固定したコードは古くなります。チームがあるコミュニティ製サーバーを固定した時点で、そのパッケージのうち40個は、同じ日にランチャーが取得するはずだったものより古い版でした。中にはセキュリティ上重要なものも含まれていました。ロックファイルを再生成する頻度を尋ねると、Lagermann氏はこう答えました。「更新については、MCPメンテナーの推奨に従うことをお勧めします。私が保守しているMCPサーバーは、毎晩脆弱性のレビューを行っています。脆弱性が見つかれば翌朝に更新し、変更履歴も添えています」

「見つかった23の公開MCPサーバーについては、メンテナーや、それを共有しているサービスに通知しました。その結果、AIエージェントの交換サイトを運営するある企業は、この問題について投稿内容を評価するよう、セキュリティレビューのプロセスを更新しました。別のケースでは、ベンダーがMCPサーバーを全面的にパッケージし直しています」とLagermann氏は述べました。

PythonやnpmのパッケージランナーでMCPエントリを起動している場合や、「latest」タグが付いている場合は、アシスタントが次にセッションを開いた時点で、公開レジストリから新しいコードが解決される可能性があります。Corelightのワークステーションでは、15通りの環境を通じて、サーバー自体のバージョン番号は変わりませんでした。

翻訳元: https://www.helpnetsecurity.com/2026/11/13/corelight-mcp-server-supply-chain/

本記事は helpnetsecurity.com の記事を翻訳・要約したものです。