本文へ移動
情シスのミカタ
ニュース約7分で読めます

Python版のClaude Agent SDKに脆弱性、コマンド実行の恐れ

AnthropicのClaude Agent SDK(Python版)に、外から受け取ったセッションIDを渡すと、サーバーで任意のコマンドが動く脆弱性(CVE-2026-96620)がありました。CVSSは9.2です。直した0.2.121は7月に出ています。狙われる作りと、開発部門に確かめることをまとめます。

公開 情シスのミカタ編集部AIにより執筆チェック済み
文字
Python版のClaude Agent SDKに脆弱性、コマンド実行の恐れ

この記事のまとめ

  • Python版のClaude Agent SDKの0.2.121より前に、外の入力でコマンドが動く脆弱性がありました。
  • 条件は、利用者から来た値を会話の再開(resume)に渡す作りです。CVSSは9.2(Critical)です。
  • 直した版は7月17日の0.2.121です。GitHubの確認は10月17日で、Dependabotの通知が届き始めます。
こんな方に#30代#40代#50代実務

Claude Agent SDKは、Anthropicが配る、AIのエージェント(指示を受けて自分で作業を進めるAI)を自社のプログラムに組み込むための部品です。このPython版に、外から受け取った値によって、サーバーで任意のコマンドが動く脆弱性(CVE-2026-96620)がありました。

深刻度を表すCVSS(4.0)は9.2(Critical)です。直した版の0.2.121は7月17日に出ています。GitHubの脆弱性データベースが確認済みとして載せたのは10月17日で、これから開発部門にDependabot(使っている部品の脆弱性を知らせるGitHubの機能)の通知が届き始めます。日付は日本時間です。

Claude Agent SDKで何が起きるか

Python版のSDKは、Claude Codeのコマンドで動かす版(CLI)を同梱しています。アプリがSDKを呼ぶと、SDKは裏でこのCLIを起動して指示を渡します(SDKの説明書き)。

SDKには、前の会話(セッション)を続きから再開する「resume」という指定があります。会話ごとに振られるセッションIDを渡すと、その続きから作業が進みます。公式の手引きの例では、セッションIDはUUID(ランダムな長い番号)の形です。

告知によると、SDKはresumeの値を確かめずに、そのままCLIを起動するときの指定に並べていました。値がハイフン(-)で始まると、CLIはそれを値ではなく、別の指定として読みます。

攻撃する側がresumeの値を決められると、MCP(AIに外部の道具をつなぐための決まり)のサーバーとして、任意のプログラムを起動させる指定を差し込めました。その結果、CLIが起動するときにコマンドが動きます。SDKで決めた権限の設定(使ってよい道具の制限など)も、この動きは止められませんでした。

GitHub Advisory DatabaseのCVE-2026-96620のページの上の部分。題はClaude Agent SDK: Argument Injection via resume Option Allows Arbitrary Command Execution。Critical severityとGitHub Reviewedの札があり、9月12日にanthropics/claude-agent-sdk-pythonで公開とある。パッケージの表では、pipのclaude-agent-sdkは影響する版が0.2.121より前、直した版は0.2.121。右に深刻度Critical 9.2/10と、CVSS v4の内訳(攻撃の経路はネットワーク、条件の複雑さは低、攻撃の前提の条件はあり、必要な権限と利用者の操作はなし、機密性・完全性・可用性はすべて高)。下に説明があり、resumeの値を確かめずにCLIへ渡していたことと、信頼できない入力をセッションIDとしてresumeに渡すアプリで悪用できることが書かれている
GitHubのデータベースのClaude Agent SDKの告知。対象の版と直した版、CVSS 9.2が並ぶ出典: GitHub(GitHub Advisory Database)(引用)

CLIは、SDKを使うアプリと同じ機械の上で動きます。そのため、コマンドはアプリを動かしているサーバーや端末の上で、アプリと同じ権限で動くことになります(編集部の整理)。

どんな作りのアプリが狙われるか

告知は、悪用の前提を次のように書いています。

Exploitation required an application to pass untrusted input as the session ID to resume.

出典: Anthropic「Argument Injection via resume Option Allows Arbitrary Command Execution」

アプリが、信頼できない入力をセッションIDとしてresumeに渡している場合に限る、という意味です。修正のプルリクエスト(変更の申し出)は、例として「セッションを再開する」窓口が、リクエストからセッションIDを受け取る作りを挙げています。

たとえば、社内のチャットの画面やAPIで、利用者が「前の会話の続き」を選ぶと、ブラウザーから送られたIDをそのままresumeに入れる作りです。この場合、IDの欄に細工した値を送れる人は、だれでも条件に当たります。社外の人も使える窓口なら、その人たちも含まれます(編集部の整理)。

CVSSの内訳も、これと合います。攻撃の経路はネットワークで、必要な権限と利用者の操作はなしです。ただし「攻撃の前提の条件がある」(AT:P)となっています。

一方、resumeを使っていないアプリや、サーバーの側で発行して保存したIDだけを渡すアプリは、告知の条件に当たりません。

session_idとextra_argsも見ておく

0.2.121では、会話のIDを決める「session_id」という指定も、同じ形に直しました。プルリクエストによると、こちらはCLIの側で値を必ず受け取る作りのため、以前からハイフンで始まる値も値として扱われていました。揃えるために直した、という説明です。

CLIに好きな指定を渡せる「extra_args」は、今回は直していません。プルリクエストは、extra_argsは「CLIに何でも渡せる」ための入り口で、信頼できない値を流し込むこと自体がより大きな問題だとしています。

対象の版と直した版

パッケージ 対象 直した版
claude-agent-sdk(Python、pipで入れる) 0.2.121より前 0.2.121(7月17日)
@anthropic-ai/claude-agent-sdk(TypeScript、npmで入れる) 告知なし 0.3.208(7月14日)に同じ修正

告知の対象は、Python版のパッケージだけです。TypeScript版には、10月18日時点で告知が出ていません。Python版の修正のプルリクエストは、TypeScript版が同じ修正を0.3.208で入れたと書いています。

TypeScript版の変更履歴(0.3.208)にも、resumeのようにハイフンで始まる値が、別の指定として読まれてしまう不具合を直したとあります。

GitHubのanthropics/claude-agent-sdk-pythonのリリースのページのv0.2.121。7月17日に公開とある。Bug Fixesの見出しの下に、resumeとsession_idの指定を、値と1つにまとめてCLIに渡すようにし、ハイフンで始まる値が別の指定と読まれないようにしたと書かれている。Internal/Other Changesには、ビルドの道具の強化と、同梱のClaude CLIを2.1.212に上げたことが並ぶ。下にPyPIのページへのリンクと、0.2.121を入れるコマンドがある
Python版のSDKの0.2.121のリリースノート。resumeとsession_idの渡し方を直した出典: Anthropic(anthropics/claude-agent-sdk-python)(引用)

日付を整理します。修正は7月16日に取り込まれ、0.2.121は7月17日に出ました。Anthropicは9月12日に自分のリポジトリで告知を出し、GitHubのデータベースが10月17日に確認済みとして載せました。

10月18日時点の最新の版は、Python版が0.2.168(PyPI)、TypeScript版が0.3.302(npm)です。PyPIとnpmは、それぞれの言語の部品の配布先です。

悪用について、告知とリリースノートに記載はありません。米国CISAのKEV(悪用が確認された脆弱性の一覧)には、10月16日版で載っていません。米国NVD(脆弱性のデータベース)は10月17日に受け付けた段階で、まだ分析していません。

Dependabotの通知が今になって届く理由

修正から3か月たって通知が届くのは、GitHubの仕組みによります。GitHubの文書によると、Dependabotは、GitHubが確認した(GitHub-reviewed)告知が新しく出たときに通知します。

今回の告知が確認済みになったのは10月17日です。古い版を依存の一覧に書いたままのリポジトリには、これから通知が出ます。開発部門から「Criticalの通知が来た」と相談があれば、この件かもしれません。

影響する会社・しない会社

  • 影響する: Python版のClaude Agent SDKの0.2.121より前を、社内のアプリや業務の自動化に使い、resumeに利用者や外部から来た値を渡している会社
  • 影響する: とくに急ぐのは、社外の人も使えるチャットやAPIで「会話の続き」を受け付けている会社です
  • 確認が要る: 開発会社や委託先が作ったAIのエージェントを使っている会社。SDKの版とresumeの扱いは、作った側に聞きます
  • 確認が要る: TypeScript版の0.3.208より前を使っている会社。告知は出ていませんが、同じ修正が入った版へ上げます
  • 影響しない: Python版を0.2.121以降に上げた会社
  • 影響しない: Agent SDKを使っていない会社。告知の対象はPythonの部品のclaude-agent-sdkで、社員がClaudeのチャットやClaude Codeを手で使うことは対象に挙がっていません
  • 告知の条件の外: resumeを使っていない、またはサーバーで発行したIDだけを渡している会社。それでも、告知は最新の版への更新を勧めています

情シスが今日やること

  1. SDKを使っているかを洗い出します。 開発部門と委託先に聞き、GitHubのDependabotの通知も見ます。依存の一覧(requirements.txt、pyproject.toml、ロックファイル)でclaude-agent-sdkを探し、動いている環境では pip show claude-agent-sdk で版を確かめます。
  2. 0.2.121以降へ上げる日を決めます。 告知は最新の版を勧めています。Python版のSDKはCLIを同梱しているため、上げるとCLIの版も変わります(リリースノート)。検証の環境で動きを確かめてから、本番に入れます。
  3. resumeに何を渡しているかを、コードで確かめます。 利用者から来た値をそのまま渡していないかを見ます。セッションIDはサーバーの側で持ち、利用者には別の番号で結びつけるか、受け取るならUUIDの形かを確かめてから渡します(編集部の補足)。
  4. extra_argsにも外の値を入れていないかを見ます。 extra_argsはCLIに何でも渡せる入り口で、今回の修正の対象外です(プルリクエスト)。
  5. エージェントを動かすサーバーの権限を絞ります。 専用のアカウントやコンテナで動かし、APIキーなどの秘密の情報は要るものだけを渡します。社内でAIのエージェントを作るときの決まりに、SDKの版の管理と、外から来た値の扱いを入れておきます。

エージェントに渡す権限の決め方は、「APIキーは.envに」はもう危ない AIエージェントに渡す権限の決め方でも扱っています。Claude Codeそのものの脆弱性は、AnthropicのClaude Codeに脆弱性、プラグイン導入前に版確認にまとめています。

よくある質問

Q社員がClaude Codeを使っています。対象ですか?

A告知の対象は、Pythonの部品のclaude-agent-sdk(0.2.121より前)です。社員がClaudeのチャットやClaude Codeを手で使うことは、告知の対象に挙がっていません。Claude Codeそのものの脆弱性は、それぞれの告知で確かめます。

QTypeScript版を使っています。何をすればいいですか?

ATypeScript版に告知は出ていません(10月18日時点)。Python版の修正のプルリクエストは、TypeScript版が同じ修正を0.3.208で入れたと書いています。それより前の版なら、上げる日を決めます。

Q悪用は確認されていますか?

A告知とリリースノートに、悪用の記載はありません。米国CISAのKEV(悪用が確認された脆弱性の一覧)には、10月16日版で載っていません。米国NVDは10月17日に受け付けた段階で、まだ分析していません。

Qresumeを使っていません。上げなくていいですか?

A告知の条件には当たりません。ただ、告知は最新の版への更新を勧めています。あとでresumeを使う機能を足したときに古い版が残らないよう、ふだんの更新の中で上げます。

出典・参考

チェック済み。この記事は監修者によってチェックされました。(2026年10月18日)

執筆

情シスのミカタ編集部AIにより執筆

書いた AI: AI記者(解説)

法令・官公庁の発表・企業の公式発表などの一次情報を調べて、情シス向けの解説・比較・テンプレの記事を書きます。数字と日付は出典と照らして確かめ、記事の最後に出典を載せています。使っているAI: Anthropic Claude。

監修

佐々木 航株式会社Game

代表取締役。工学部出身で、21歳で起業してからシステム会社の経営一筋で8期目。アプリの受託開発から始め、いまはAIを使ったシステムソリューションを手がけています。150社以上の企業とのプロジェクトで培った開発と情報システムの現場の経験と声を形にし、激動の時代を乗り越えたいと考えています。

メモ: 掲載時に自動で(しばらくの間)

記事は AI が一次情報を調べて書き、機械の検査を通してから公開しています。人が見ているもの・見ていないものはAI の使い方に書いています。まちがいに気づいたら訂正・ご指摘からお知らせください。直したら、記事の最後に何を直したかを書きます。

役に立ったら、いいねと共有をお願いします