Python WebAcademy Blog

MCPのPython SDKに認証情報が盗まれる脆弱性。1.30.0と2.2.0で修正されたニュースを初心者向けに解説

|

AIと外部ツールをつなぐMCPの公式Python SDKで、OAuthの認証情報が悪意あるサーバーに送られてしまう脆弱性が2026年9月28日に公表されました。深刻度は高で、1.30.0と2.2.0で修正済みです。MCPとは何か、何が問題だったのか、自分の環境が影響を受けるかの確かめ方と対処法を、表とサンプルコードで整理します。

2026年9月28日、MCPの公式Python SDKに脆弱性があったことが公表されました。悪意のあるMCPサーバーにつなぐと、ログインに使う認証情報がそのサーバーへ送られてしまうおそれがあるというものです。

深刻度は4段階のうち上から2番目の高で、すでに1.30.0と2.2.0で修正されています。AIエージェントを作るためにこのライブラリを入れた方は、今すぐバージョンを確かめておきましょう。

とはいえ、MCPという言葉自体がまだなじみのない方も多いはずです。今回は、MCPの基本から順番に見ていきます。

まずは何が起きたのかを整理しよう

最初に、今回のニュースの要点を表にまとめます。内容は、SDKを開発しているチームがGitHubで公開したセキュリティ情報、いわゆるアドバイザリにもとづいています。

項目 内容
対象 MCPの公式Python SDK(PyPIのパッケージ名はmcp)
公表日 2026年9月28日
深刻度 高(CVSSスコア7.5)
影響を受ける版 1.9.1〜1.29.1、2.0.0a1〜2.1.1
修正された版 1.30.0、2.2.0
識別番号 GHSA-qx49-fqc8-xw99

CVSSは、脆弱性の深刻さを0から10の数字で表す世界共通の物差しです。7.5は、すぐに対応したほうがよい水準だと考えてください。

PyPIの記録を見ると、修正版の1.30.0と2.2.0は、どちらも2026年9月7日に公開されています。修正版が先に出て、利用者が更新する時間を取ってから詳細が公表された流れです。

公表までの流れ

アドバイザリには、この問題を見つけた人として8人のセキュリティ研究者の名前が挙げられています。報告に関わったセキュリティ企業のCycodeも、自社のブログで詳しい解説を公開しています。

修正版を先に出し、少し時間をおいてから詳細を公表するのは、脆弱性の扱いとしてよくある手順です。攻撃方法が広まる前に、利用者が更新できる時間を確保するためです。

そもそもMCPとは何か

MCPはModel Context Protocolの略です。AIのモデルと、外部のツールやデータをつなぐための共通の約束ごとを指します。

たとえば、AIにファイルを読ませたり、データベースを調べさせたりしたい場面を考えてみてください。ツールごとにつなぎ方がばらばらだと、組み合わせが増えるたびに作り直しになります。

MCPは、この接続の形をそろえるための仕組みです。AIを動かす側をクライアント、ツールを提供する側をサーバーと呼びます。

Pythonからは、公式のSDKであるmcpパッケージを使ってクライアントもサーバーも作れます。AIのAPIをPythonから使う基本は、こちらの記事が参考になります。【関連記事】PythonからOpenAIのAPIを使う方法を解説!

何が問題だったのか

今回の問題は、MCPクライアントがサーバーへログインするときの仕組みにありました。ここで使われているのがOAuthです。

OAuthをざっくり理解する

OAuthは、パスワードを相手に直接渡さずに、利用の許可だけを渡すための仕組みです。Googleのアカウントで別のサービスにログインする、あの流れをイメージするとわかりやすいでしょう。

この流れの中では、本物のログイン窓口である認可サーバーに、いくつかの秘密の情報を送ります。クライアントの秘密鍵にあたるクライアントシークレットや、一度きりの認可コードなどです。

送り先を確かめていなかった

アドバイザリによると、SDKは、この秘密の情報の送り先が本物の認可サーバーかどうかを十分に確かめていませんでした。認可サーバーの身元を示すissuerという値の確認が抜けていた、と説明されています。

その結果、悪意のあるMCPサーバーは、自分が用意した偽の送り先をクライアントに教えることができました。クライアントはそれを信じて、クライアントシークレットや認可コードを攻撃者に送ってしまうわけです。

攻撃者はそれを使って本物の認可サーバーとやり取りし、利用者のアカウントの権限を手に入れられるおそれがありました。つないだ相手を信じすぎていたことが、今回の根本的な原因です。

修正版で何が変わったのか

アドバイザリによると、修正版ではissuerの確認が追加されました。あわせて、認証情報を特定の認可サーバーと結びつけ、別の送り先には使わせないようになっています。

さらに、ClientCredentialsOAuthProviderとPrivateKeyJWTOAuthProviderという2つの認証方式には、issuerを指定する引数が加わりました。今は省略もできますが、将来の3.0では必須になると予告されています。

影響を受けるのはどんな人か

影響を受けるのは、mcpパッケージのOAuth機能を使って、MCPサーバーへ接続するプログラムです。特に、外部の第三者が用意したMCPサーバーにつなぐ場合に注意が必要です。

立場ごとの影響の目安を、表にまとめました。自分がどこに当てはまるか、確かめてみてください。

立場 影響の目安
mcpでクライアントを作り、OAuthで外部のサーバーにつないでいる 影響を受ける可能性が高い。すぐに更新する
mcpでサーバーだけを作っている 今回の問題はクライアント側の処理。念のため更新しておく
mcpを入れていない 直接の影響はない
学習のために少し試しただけ 仮想環境ごと作り直すか、更新しておけば安心

私は10年ほどエンジニアとして開発に関わってきましたが、外部サービスとの連携部分は、いちばん脆弱性が見つかりやすい場所だと感じています。自分で書いたコードに問題がなくても、使っているライブラリが原因になることは珍しくありません。

自分のバージョンを確かめるコード

では、手元の環境が影響を受けるかを確かめてみましょう。入っているパッケージのバージョンは、標準ライブラリのimportlib.metadataで調べられます。

次のコードは、入っているmcpのバージョンが、アドバイザリに書かれた影響範囲に入るかを判定します。バージョンの比較には、pipの内部でも使われているpackagingを使っています。

from importlib.metadata import PackageNotFoundError, version

from packaging.version import Version

# 影響を受ける範囲(GitHubのセキュリティアドバイザリより)
AFFECTED = [
    (Version("1.9.1"), Version("1.29.1")),
    (Version("2.0.0a1"), Version("2.1.1")),
]


def check_mcp(installed):
    v = Version(installed)
    for low, high in AFFECTED:
        if low <= v <= high:
            return f"mcp {installed}: 影響を受けるバージョンです。更新してください"
    return f"mcp {installed}: 影響を受ける範囲の外です"


try:
    print(check_mcp(version("mcp")))
except PackageNotFoundError:
    print("mcpはこの環境に入っていません")

for sample in ["1.29.1", "1.30.0", "2.1.0", "2.2.0"]:
    print(check_mcp(sample))

手元のPython 3.11の環境で実行した結果です。1行目は、その環境に実際に入っていたmcpの判定です。

mcp 1.28.1: 影響を受けるバージョンです。更新してください
mcp 1.29.1: 影響を受けるバージョンです。更新してください
mcp 1.30.0: 影響を受ける範囲の外です
mcp 2.1.0: 影響を受けるバージョンです。更新してください
mcp 2.2.0: 影響を受ける範囲の外です

実は私の作業環境にも、影響を受ける1.28.1が入っていました。自分では入れた覚えがなくても、別のツールが一緒に入れていることがあります。

コードを書くのが面倒なら、ターミナルでpip show mcpと打つだけでもバージョンは確認できます。表示されたVersionの行を、先ほどの表の範囲と見比べてください。

バージョンの比較は、文字列ではなくVersionで行うのがポイントです。文字列のまま比べると、2.10.0が2.2.0より古いと判定されるような間違いが起きます。

今すぐやっておきたい対処

影響を受けるバージョンだった場合は、次の順番で対処します。アドバイザリに書かれている内容を、初心者向けに言い換えたものです。

順番 やること 理由
1 mcpを1.30.0以上、または2.2.0以上に更新する 問題が修正された版にする
2 保存されているOAuthの登録情報を消す 更新前の情報が残っていると危険なため
3 漏れた可能性のあるクライアントシークレットなどを作り直す 盗まれた情報を使えなくする
4 一部の認証方式ではissuerを指定する 将来の3.0では必須になると予告されている

更新は、pipで次のように行えます。仮想環境を使っている場合は、その環境を有効にしてから実行してください。

pip install --upgrade mcp

pipの基本的な使い方に不安がある方は、こちらで確認できます。【関連記事】Pythonのpipとは?

3番目の作業を忘れない

更新だけで安心してしまいがちですが、3番目の作業はとても大切です。すでに盗まれた鍵は、ライブラリを更新しても取り返せません。

APIキーやシークレットを安全に保管する方法は、こちらで詳しく解説しています。【関連記事】環境変数とは?PythonでAPIキーを安全に扱う

このニュースから学べること

AIエージェントやMCPは、ここ1〜2年で一気に広がった新しい分野です。新しい分野のライブラリは更新が速く、こうした脆弱性も見つかりやすい傾向があります。

だからこそ、使っているライブラリに脆弱性がないかを、定期的に確かめる習慣が大切です。手作業で全部を追いかけるのは大変なので、道具に任せましょう。

pip-auditを使えば、入っているライブラリに既知の脆弱性がないかを一度に調べられます。【関連記事】pip-auditとは?Pythonライブラリの脆弱性をチェックする方法

もう1つの教訓は、信頼できない相手にはつながないことです。どんなに便利そうなMCPサーバーでも、提供元がわからないものに認証情報を預けるのは避けましょう。

以前、検証用に手早く入れたライブラリを本番の環境にも持ち込んでしまい、更新が漏れていたことがあります。試したものほど、後片付けと更新を忘れないようにしたいですね。

まとめ

MCPの公式Python SDKに、OAuthの認証情報が悪意あるサーバーへ送られてしまう脆弱性が見つかりました。2026年9月28日に公表され、1.30.0と2.2.0で修正済みです。

mcpを使っている方は、バージョンを確かめて更新し、必要なら認証情報も作り直してください。使っていない方も、ライブラリを定期的に点検する習慣を、この機会に作っておくと安心です。

ここまでお読みいただきありがとうございました。

参考情報

次のアクション

記事で学んだ内容を実際に動かしてみよう

Python WebAcademyでは、ブラウザ上でコードを書きながら基礎から実践まで体系的に学べます。

Python WebAcademyの学習画面

あわせて読む

関連記事

ブログ一覧へ

Python学習ロードマップ

まずはこの3講座から

記事で気になったテーマを、順番に手を動かしながら学べます。

ロードマップを見る