// 威脅簡報

Claude Agent SDK(Python)resume 選項引數注入:以「-」開頭的工作階段 ID 會變成 CLI 旗標

CVSS
9.2 CRITICAL
CISA KEV
未列入
弱點類型
CWE-88 · CWE-78 · CWE-20
主題
AI 安全

PlainCVE 團隊 · 發布 2026-10-20 · AI 輔助 · 媒體簡報 ↓

AI 審稿 2026-10-20(未經人工)指令測試:未提供漏洞重現:未進行驗證紀錄 ↓

Claude Agent SDK Python 版早於 0.2.121(< 0.2.121)的版本沒有檢查 resume 值就交給 Claude CLI,以「-」開頭的值會被當成額外的命令列旗標。

誰會中使用 claude-agent-sdk(PyPI)早於 0.2.121(< 0.2.121)的版本,而且應用程式會把不受信任的輸入當成工作階段 ID 傳給 resume 選項的開發者與組織。
後果控制 resume 值的攻擊者可以注入任意 CLI 旗標,例如 --mcp-config。官方安全公告說這可能在 CLI 啟動時執行任意指令並繞過 SDK 的權限控管;但維護者的修補 PR 說這只是旗標注入,不是任意指令執行。兩份官方資料說法不一致。
現在該做什麼把 claude-agent-sdk 升級到 0.2.121 以上(官方建議升到最新版)。注意:沒有內附 claude.exe、改用 npm 的 claude.cmd 啟動 CLI 的 Windows 環境,維護者後續的 PR #1127 指出 0.2.121 的修法對經過 cmd.exe 的這條路徑沒有幫助,相關修補在 v0.2.124 才釋出;資料沒有說明這是否屬於本 CVE 的範圍,PlainCVE 建議這類環境至少升到 0.2.124。在升級前,PlainCVE 建議不要把使用者可控制的值直接傳給 resume(官方未提供暫時解法)。
受影響版本早於 0.2.121 的所有版本(< 0.2.121,不含 0.2.121)
修好的版本0.2.121 以上
CVSS 向量
顯示完整向量CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
時間點
  • 首次公開 2026-07-15

藍隊應對手冊

確認、修補 / 緩解、應變、強化。版本符合受影響條件不等於已被入侵;檢查沒有結果也不等於安全,每一項都有能證明與不能證明的範圍。標記的步驟對應下方攻擊流程裡可以擋下攻擊的那一步。

DETECT確認我受影響嗎?有沒有入侵跡象?
  1. 01確認安裝的版本

    在執行你應用程式的那個 Python 環境(虛擬環境)中執行;用 python -m pip 可確保查的是該環境的直譯器。只讀取版本,不會修改環境。版本低於 0.2.121 就在受影響範圍內。

    唯讀查詢
    python -m pip show claude-agent-sdk | grep -i '^version'
  2. 02找出程式中 resume 值的來源

    官方指出,只有應用程式把不受信任的輸入傳給 resume 時才會被利用。檢查 resume 的值是否可能來自使用者、網址參數或外部請求。請在你自己專案的原始碼根目錄執行;只讀取檔案,不會修改環境。

    唯讀查詢
    grep -rn "resume" --include='*.py' .
MITIGATE修補 / 緩解先修補;還不能修補時先擋住
  1. 01升級到 0.2.121 以上

    官方建議更新到最新版。修補後 resume 與 session-id 都以單一的「--旗標=值」參數傳遞。這個指令會修改環境(安裝或升級套件),請在執行你應用程式的那個 Python 環境(虛擬環境)中執行。-U 會升到最新版,也涵蓋 Windows 的後續修補 v0.2.124。

    會變更環境
    python -m pip install -U "claude-agent-sdk>=0.2.121"
  2. 02還不能升級:別讓外部輸入進到 resume

    官方沒有提供暫時解法。PlainCVE 的判斷是:依官方說明的前提,從不把不受信任輸入傳給 resume 的應用程式應不受影響。

RESPOND應變發現入侵跡象時
  1. 01檢查是否有可疑的 resume 值與 MCP 伺服器

    我們查閱的資料中沒有偵測或回應指引。PlainCVE 建議:若你的應用程式曾把外部輸入傳給 resume,檢視紀錄中是否出現以「-」開頭的工作階段 ID,並確認 CLI 是否啟動過你沒有設定的 MCP 伺服器或程序。目前沒有資料確認此漏洞曾遭實際利用。

HARDEN強化長期避免同類問題
  1. 01把工作階段 ID 當成不受信任的資料

    PlainCVE 建議:只接受你自己產生並儲存的工作階段 ID,不要直接採用使用者提供的值。

  2. 02持續更新,包含 extra_args 的後續修補

    維護者的修補 PR #1123(該頁含攻擊示範,本站不連結)刻意沒有改動 extra_args。上游的 v0.2.124 發布說明指出,extra_args 之後也改用「--旗標=值」形式處理以「-」開頭的值(PR #1127)。

完整修復步驟與說明
套件受影響修補版
claude-agent-sdk(PyPI)< 0.2.1210.2.121
TypeScript Agent SDK(依 PR 說明)未說明0.3.208
  • 官方建議直接升到最新版,而不只是 0.2.121。上游的 v0.2.124 發布說明顯示,extra_args 的相同問題是之後才另外修補的(PR #1127)。
  • **Windows 注意事項:**維護者的後續 PR #1127(說明為同一份 HackerOne 回報的後續)指出,在沒有內附 claude.exe、改用 npm claude.cmd 啟動 CLI 的 Windows 安裝環境,參數會被 cmd.exe 重新解析,--resume 等值可能執行注入的指令,而 0.2.121 的「—旗標=值」修法對這條路徑沒有幫助。v0.2.124 改為拒絕在 Windows 啟動 .bat/.cmd 形式的 CLI。資料沒有說明這是否屬於本 CVE 的範圍;PlainCVE 建議這類環境至少升到 0.2.124,並改用原生安裝程式或明確的 claude.exe 路徑(PR 與發布說明列出的替代方式)。
  • 官方安全公告評為 CVSS 4.0 9.2(重大)。向量中的 PR:N(不需權限)是評分假設,不代表每種部署都不需要登入;AT:P 表示是否能被利用取決於應用程式怎麼部署。

攻擊流程

從左到右是攻擊發生的順序。藍色盾牌代表這一步可以被擋下,越早擋下越好。點圖示可看細節。

由上到下是攻擊發生的順序。藍色盾牌代表這一步可以被擋下,越早擋下越好。點圖示可看細節。

Claude Agent SDK(Python)resume 選項引數注入:以「-」開頭的工作階段 ID 會變成 CLI 旗標: 1. 攻擊者提供一個以「-」開頭的工作階段 ID → 2. 應用程式把這個值傳給 SDK 的 resume 選項 → 3. SDK 把值當成獨立參數交給 Claude CLI,CLI 把它讀成新旗標 → 4. 依官方安全公告,注入的 --mcp-config 可能在 CLI 啟動時導致指令執行(維護者 PR 不同意)CVE-2026-96620 · Claude Agent SDK(Python)resume 選項引數注入:以「-」開頭的工作階段 ID 會變成CLI 旗標攻擊者你的系統攻擊者提供一個以「-」開頭的工作階段 ID — 只有在應用程式允許外部輸入決定要「接續」哪個工作階段時才可能發生。 1攻擊者提供一個以「-」開頭的工作階段 ID應用程式把這個值傳給 SDK 的 resume 選項 — 官方公告指出,這正是利用的前提條件。 2應用程式把這個值傳給SDK 的 resume 選項SDK 把值當成獨立參數交給 Claude CLI,CLI 把它讀成新旗標 — 舊版沒有檢查這個值,攻擊者因此可以塞入像 --mcp-config 這類旗標。 3SDK 把值當成獨立參數交給 Claude CLI,CLI把它讀成新旗標依官方安全公告,注入的 --mcp-config 可能在 CLI 啟動時導致指令執行(維護者 PR 不同意) — 官方公告說這會在 CLI 啟動時執行任意指令,且不受 SDK 權限控管;維護者的 PR 則說沒有經過 shell,只是旗標注入。兩者說法不一致。 4依官方安全公告,注入的--mcp-config 可能在CLI 啟動時導致指令執行(維護者 PR 不同意)攻擊路徑可在此擋下PlainCVE · plaincve.date/vulns/cve-2026-96620-claude-agent-sdk-resume-argument-injection · CC BY 4.0
Claude Agent SDK(Python)resume 選項引數注入:以「-」開頭的工作階段 ID 會變成 CLI 旗標: 1. 攻擊者提供一個以「-」開頭的工作階段 ID → 2. 應用程式把這個值傳給 SDK 的 resume 選項 → 3. SDK 把值當成獨立參數交給 Claude CLI,CLI 把它讀成新旗標 → 4. 依官方安全公告,注入的 --mcp-config 可能在 CLI 啟動時導致指令執行(維護者 PR 不同意)CVE-2026-96620 · Claude AgentSDK(Python)resume 選項引數注入:以「-」開頭的工作階段 ID 會變成 CLI 旗標攻擊者提供一個以「-」開頭的工作階段 ID — 只有在應用程式允許外部輸入決定要「接續」哪個工作階段時才可能發生。 1攻擊者攻擊者提供一個以「-」開頭的工作階段ID應用程式把這個值傳給 SDK 的 resume 選項 — 官方公告指出,這正是利用的前提條件。 2你的系統應用程式把這個值傳給 SDK 的 resume選項SDK 把值當成獨立參數交給 Claude CLI,CLI 把它讀成新旗標 — 舊版沒有檢查這個值,攻擊者因此可以塞入像 --mcp-config 這類旗標。 3你的系統SDK 把值當成獨立參數交給 ClaudeCLI,CLI 把它讀成新旗標依官方安全公告,注入的 --mcp-config 可能在 CLI 啟動時導致指令執行(維護者 PR 不同意) — 官方公告說這會在 CLI 啟動時執行任意指令,且不受 SDK 權限控管;維護者的 PR 則說沒有經過 shell,只是旗標注入。兩者說法不一致。 4你的系統依官方安全公告,注入的--mcp-config 可能在 CLI 啟動時導致指令執行(維護者 PR 不同意)攻擊路徑可在此擋下PlainCVE · CC BY 4.0plaincve.date/vulns/cve-2026-96620-claude-agent-sdk-resume-argument-injection
圖片可自由用於報導與教學,採 CC BY 4.0,圖上已附出處。
  1. 攻擊者

    攻擊者提供一個以「-」開頭的工作階段 ID

    只有在應用程式允許外部輸入決定要「接續」哪個工作階段時才可能發生。

    防禦: 不要把不受信任的輸入直接當成 resume 的值(PlainCVE 的建議)。

  2. 你的系統

    應用程式把這個值傳給 SDK 的 resume 選項

    官方公告指出,這正是利用的前提條件。

  3. 你的系統

    SDK 把值當成獨立參數交給 Claude CLI,CLI 把它讀成新旗標

    舊版沒有檢查這個值,攻擊者因此可以塞入像 --mcp-config 這類旗標。

    防禦: 升級到 0.2.121 以上:值改以 --resume=<值> 的合併形式傳遞,不會再被讀成獨立旗標。

  4. 你的系統

    依官方安全公告,注入的 --mcp-config 可能在 CLI 啟動時導致指令執行(維護者 PR 不同意)

    官方公告說這會在 CLI 啟動時執行任意指令,且不受 SDK 權限控管;維護者的 PR 則說沒有經過 shell,只是旗標注入。兩者說法不一致。

    防禦: 升級到 0.2.121 以上可阻止這種旗標注入;使用 npm claude.cmd 的 Windows 環境要到 v0.2.124 才有後續修補(PR #1127)。

影響範圍

條件是否受影響
claude-agent-sdk(Python)早於 0.2.121(< 0.2.121)+ 應用程式把不受信任的輸入傳給 resume受影響
早於 0.2.121,但 resume 的值只來自自己產生的工作階段 IDPlainCVE 的判斷:依官方說明的前提應不受影響,仍建議升級
0.2.121 以上已修補(官方公告);但沒有內附 claude.exe、經 npm claude.cmd 啟動 CLI 的 Windows 環境,維護者 PR #1127 指出 0.2.121 的修法對這條路徑沒有幫助,要到 v0.2.124 才修補,見「修復建議」
TypeScript 版 Agent SDK維護者 PR 說 0.3.208 已有相同修補;資料沒有說明這個 CVE 是否涵蓋它

OSV 將問題記錄為從第一個版本就存在,沒有指出是哪個 commit 引入的。

原理

Claude Agent SDK 不是自己跑 AI,而是在背後啟動 Claude CLI(命令列工具),並把你的設定轉成 CLI 的參數。resume 選項用來接續先前的工作階段,值是一個工作階段 ID。

舊版把它拆成兩個獨立參數交給 CLI:先是 --resume,再是 ID 本身,而且不檢查 ID 的內容。如果 ID 以「-」開頭,CLI 會把它當成另一個旗標(改變程式行為的設定),而不是 --resume 的值。官方公告舉的例子是注入 --mcp-config,並稱可在 CLI 啟動時導致指令執行。

影響有多大,官方兩份資料說法不同:

  • 安全公告:會在 CLI 啟動時造成任意指令執行,且繞過 SDK 的權限控管。
  • 修補 PR #1123(該頁含攻擊示範,本站不連結):參數是逐一傳遞、沒有經過 shell,所以是「旗標注入」,不是任意指令執行。

CVE 紀錄同時列了 CWE-88(引數注入)、CWE-78(作業系統指令注入)與 CWE-20(輸入驗證不當)。維護者也說明 --session-id 本來就要求帶值,不會被誤讀,一起修改只是為了一致。

有問題的思路(概念示意,不是原始程式碼):

展開程式碼範例(python)
# 值是獨立參數;若以 "-" 開頭,CLI 會把它當成新旗標
args += ["--resume", session_id]

修好的思路:

展開程式碼範例(python)
# 旗標與值合成一個參數,值不可能再被讀成獨立旗標
args += [f"--resume={session_id}"]

時間軸

日期事件
2026-07-15維護者在公開儲存庫開啟修補 PR #1123(該頁含攻擊示範,本站不連結),公開描述同一問題;本頁的首次公開日
2026-07-16PR 合併為 commit 347a1cb
2026-07-17釋出 v0.2.121(發布頁未標年份,依 PR 日期推定為 2026)
2026-07-18維護者開啟 Windows 後續修補 PR #1127
2026-07-20PR #1127 合併,並隨 v0.2.124 釋出(發布頁未標年份,依 PR 日期推定為 2026)
2026-09-12廠商儲存庫的安全公告顯示的公開時間(早於 CVE 保留日,原因不明)
2026-09-23CVE 編號保留
2026-10-16CVE 紀錄公開,GitHub 公告資料庫顯示同一天
2026-10-18仍未列入 CISA KEV

延伸閱讀

  • 公開日期:依本站規則,專案公開管道裡讀得到、描述同一問題的內容也算專案公告;維護者的修補 PR #1123(該頁含攻擊示範,本站不連結)於 2026-07-15 在公開儲存庫開啟,早於廠商安全公告的 2026-09-12 與 CVE 紀錄的 2026-10-16,所以本頁首次公開日採 2026-07-15。廠商公告的 2026-09-12 早於 CVE 保留日 2026-09-23,原因不明。
  • 利用情況:沒有列入 CISA KEV;沒有資料說明是否曾遭實際利用,或是否在修補前就被利用。GitHub 資料列出的 EPSS(未來 30 天遭利用機率估計)約 0.58%,約位於第 46 百分位。
  • 回報者:官方致謝 hackerone.com/moamenmahmood。
  • 相關弱點類型:CWE-88、CWE-78、CWE-20。

驗證紀錄 AI 依審稿規則逐項核對來源,全部通過;未經人工審稿,也尚未在我們的環境重現

AI 審稿2026-10-20 · 審稿規則

驗證紀錄只寫環境與結果,不公開重現步驟或可攻擊他人系統的程式。詳見 政策.

來源

  1. 安全公告GHSA-h4mw-j7qp-8mwm — Argument Injection via resume Option Allows Arbitrary Command Execution · Anthropic (GitHub) · 查閱 2026-10-18
  2. 安全公告CVE-2026-96620 Record · CVE Program, 2026-10-16 · 查閱 2026-10-18
  3. 修補 commit / 版本Fix commit 347a1cb · Anthropic (GitHub), 2026-07-16 · 查閱 2026-10-18
  4. 修補 commit / 版本claude-agent-sdk-python v0.2.121 release · Anthropic (GitHub), 2026-07-17 · 查閱 2026-10-18
  5. 其他OSV - GHSA-h4mw-j7qp-8mwm · OSV · 查閱 2026-10-18
  6. 其他GitHub Advisory Database API - CVE-2026-96620 · GitHub · 查閱 2026-10-18
  7. 修補 commit / 版本claude-agent-sdk-python v0.2.124 release · Anthropic (GitHub) · 查閱 2026-10-18
  8. 修補 commit / 版本Refuse to spawn .bat/.cmd CLI scripts on Windows to prevent command injection (PR #1127) · Anthropic (GitHub), 2026-07-20 · 查閱 2026-10-18

媒體簡報

一句話

Anthropic 的 Claude Agent SDK 是讓開發者用 Python 打造 AI 代理程式的工具包。早於 0.2.121 的版本在「接續工作階段」(resume)功能沒有檢查輸入,攻擊者若能控制這個值,就能偷偷加入額外的命令列設定。官方安全公告將它評為重大(CVSS 4.0 9.2 分),並稱可導致任意指令執行;但維護者的修補說明認為只是旗標注入。修補版 0.2.121 已於 7 月 17 日釋出(年份依 PR 日期推定為 2026)。

關鍵數字

嚴重度
CVSS 4.0 9.2,重大(官方安全公告) github.com
修補版本
0.2.121(7 月 17 日釋出) github.com
CVE 公開
2026-10-16 cveawg.mitre.org
GitHub 公告編號
GHSA-h4mw-j7qp-8mwm cveawg.mitre.org
回報者
hackerone.com/moamenmahmood(官方致謝) github.com

已確認

  • 早於 0.2.121 的版本沒有檢查 resume 值,以「-」開頭的值會被 CLI 讀成獨立旗標。
  • 利用前提是應用程式把不受信任的輸入當成工作階段 ID 傳給 resume。
  • 截至 2026-10-18,未列入 CISA 已知遭利用漏洞清單。

尚未確認 / 說法不一

  • 能否導致任意指令執行:官方安全公告說可以,維護者的修補 PR 說沒有經過 shell、只是旗標注入。
  • 公開日期:本頁的首次公開日 2026-07-15 取自維護者在公開儲存庫開啟修補 PR #1123 的日期(該 PR 已公開描述同一問題);廠商儲存庫的安全公告顯示 2026-09-12,早於 CVE 編號保留日 2026-09-23,原因不明;CVE 紀錄的公開日是 2026-10-16。
  • Windows 上經 npm claude.cmd、由 cmd.exe 重新解析的注入路徑(維護者 PR #1127,v0.2.124 修補)是否屬於本 CVE 的範圍,資料沒有說明。
  • 是否曾遭實際利用或在修補前被利用(零時差),沒有資料說明。
  • 這個 CVE 是否涵蓋 TypeScript 版 SDK,資料沒有說明。

可引用的一句話

一個看似無害的工作階段 ID,只要開頭多了一個減號,就從「資料」變成了「指令」。

圖片

下載分享圖(PNG) · 攻擊流程圖(可下載)

引用時請標示「PlainCVE」並附上本頁連結。 完整引用格式見下方「如何引用本頁」。有事實錯誤請回報.

如何引用本頁

本文採 CC BY 4.0,轉載請保留署名與連結。

PlainCVE 團隊(2026)。《Claude Agent SDK(Python)resume 選項引數注入:以「-」開頭的工作階段 ID 會變成 CLI 旗標》。PlainCVE。https://plaincve.date/vulns/cve-2026-96620-claude-agent-sdk-resume-argument-injection(查閱日期:YYYY-MM-DD)
BibTeX
@misc{cve202696620claudeagentsdkresumeargumentinjection2026,
  title  = {Claude Agent SDK(Python)resume 選項引數注入:以「-」開頭的工作階段 ID 會變成 CLI 旗標},
  author = {PlainCVE 團隊},
  year   = {2026},
  howpublished = {PlainCVE},
  url    = {https://plaincve.date/vulns/cve-2026-96620-claude-agent-sdk-resume-argument-injection},
  note   = {更新於 2026-10-20}
}