觀點 · 資訊分享

CrewAI 1.15.1:專案要明確指定定義檔才不會被誤判,網頁抓取工具也補上「重新導向到內網」的漏洞

多代理框架 CrewAI 在 6/27 釋出 1.15.1。這版有破壞性變更:JSON 團隊與宣告式流程專案必須在 pyproject 寫明定義檔;同時修補網頁抓取工具被重新導向騙去連內網的 SSRF 問題。

發布
2026-06-28
篇幅
約 5 分鐘 · 2,190 字
結構
9 節 + 3 題常見問題
標籤
#CrewAI#AI Agent#SSRF#破壞性變更
CrewAI 1.15.1:專案要明確指定定義檔才不會被誤判,網頁抓取工具也補上「重新導向到內網」的漏洞

一句話看懂:多代理框架 CrewAI 在 6 月 27 日釋出 1.15.1,專案類型不能再靠檔名猜了,必須在 pyproject 明寫;同時修補了網頁抓取工具會被「重新導向」騙去連內部位址的 SSRF 問題。

CrewAI 1.15.1 更新重點資訊圖卡:專案類型不再靠檔名猜,改成在 pyproject 明寫;抓網頁的工具也補上 SSRF 漏洞

先用白話講:CrewAI 是什麼?

想像一間小型公司:有人負責上網查資料、有人負責整理、有人負責寫報告。CrewAI 就是用程式碼組出這種「AI 員工團隊」的工具,每位 AI 代理有自己的角色和可用的工具,合作完成一件事。

這個團隊(Crew)可以寫在 Python 裡,也可以用 JSON 或 YAML 這類設定檔「宣告」出來。這次的更新跟「系統怎麼找到你的設定檔」有關。

發生什麼事

CrewAI 在 6 月 27 日釋出 1.15.1,官方釋出說明列出幾項:

  • 新功能:crewai create 完成後自動初始化 Git 儲存庫;CLI 部署完成後開啟部署頁面
  • 要求明確的專案定義(破壞性變更)
  • 修正:JSON 團隊範本渲染、版本固定、部署頁面連結的問題
  • 資安修正:網頁抓取的 SSRF 重新導向繞過

破壞性變更:要明寫定義檔

以前 CrewAI 會偷偷看專案裡有沒有 crew.json 或 crew.jsonc 這類檔名,來判斷這是哪種專案。PR #6358 說明,這會讓一個隨手放的檔案改變 CLI 行為,所以改成明確宣告。

在 pyproject.toml 加上(取自 PR 說明):

[tool.crewai]
type = "crew"
definition = "crew.jsonc"

宣告式流程專案則是:

[tool.crewai]
type = "flow"
definition = "flows/research.yaml"
  • definition 必須是專案內的檔案路徑;絕對路徑、~、不存在的檔案、資料夾,或跑出專案根目錄的路徑,都會被拒絕
  • 這些規則同時套用在執行、安裝、部署檢查、繪圖與記憶重設等指令

被移除的舊 API 與替代寫法

舊用法 新用法
Flow.from_definition(definition) Flow.from_declaration(contents=definition)
FlowDefinition.to_json()、to_yaml() FlowDefinition.to_dict(),再用自己的 JSON 或 YAML 函式庫輸出
FlowDefinition.from_dict() FlowDefinition.from_declaration(contents=data)
FlowDefinition.json_schema() FlowDefinition.model_json_schema(by_alias=True)

資安修補:SSRF 與重新導向

抓網頁的工具(ScrapeWebsiteTool、ScrapeElementFromWebsiteTool,以及網址型 RAG 載入器)原本會檢查你給的網址,但網站可以回「請改去另一個網址」。攻擊者就能用一個看起來公開的網址,轉向 127.0.0.1 這類內部位址,讓你的伺服器去連本來不該碰的地方,這就是 SSRF。

PR #6331 的做法:新增 safe_get(),先驗證初始網址,再驗證每一次重新導向的目標,才會繼續連線;並加入測試,證明「公開網址轉向 127.0.0.1」會在第二次請求發出前被擋下。PR 也寫明,更底層的 DNS 檢查時機與 IP 固定問題,屬於另外的後續強化。

給開發者的技術細節

  • 升級後如果 CLI 找不到專案,先檢查 [tool.crewai] 有沒有補上
  • 前一版 1.15.0(6/25)新增了宣告式流程與 JSON 團隊的相關功能,並修了 skill 壓縮檔解壓縮時的符號連結路徑問題,以及憑證檔案的「只有擁有者可存取」權限;這次是在它的基礎上收緊設定
  • 這是 AI 代理框架的小版本更新,但含破壞性變更,建議先在測試環境升級,不要直接在正式環境跑 pip install -U

我的看法

「讓 AI 代理上網抓資料」這類工具,SSRF 是最容易被忽略的風險:代理跑在你的伺服器上,如果被誘導去連內網的管理介面或雲端的中繼資料位址,後果可能比一般網頁漏洞嚴重。這次的修補很值得借鏡:不要只檢查第一個網址,每一次跳轉都要重新檢查。我自己如果寫會自動抓網址的程式(例如替客戶做的爬取功能),也會採同樣的原則。

至於破壞性變更,我覺得方向是對的:用檔名猜專案類型太容易出意外,明寫才可預期。代價是升級時要手動補設定,建議先看一次 PR 的遷移說明。

名詞小辭典

  • AI Agent(代理):能自己決定要用什麼工具、分幾步完成任務的 AI。
  • Crew / Flow:CrewAI 裡的「代理團隊」與「步驟流程」兩種組織方式。
  • SSRF(Server-Side Request Forgery):騙伺服器代替攻擊者去連線,常被用來碰內部網路。
  • RAG:讓 AI 先檢索外部資料再回答的做法。

資料來源

常見問題

CrewAI 是什麼?
是一套 Python 的多代理(multi-agent)框架:把多個各有角色與工具的 AI 代理組成「團隊(Crew)」,或用「流程(Flow)」把步驟串起來完成任務。
我要怎麼因應破壞性變更?
照 PR 說明,在專案的 pyproject.toml 加上 [tool.crewai]:JSON 團隊專案寫 type = "crew" 與 definition = "crew.jsonc",宣告式流程專案寫 type = "flow" 與定義檔路徑。定義檔必須是專案內的相對路徑,絕對路徑、~ 或跑出專案根目錄的路徑都會被拒絕。
這次 SSRF 修補是什麼意思?
抓網頁的工具原本只檢查你給的網址,但網站可以回「轉去別處」,攻擊者就能讓一個看起來正常的公開網址,轉去 127.0.0.1 之類的內部位址。現在每一次轉向的目標都會先檢查,PR 也提到更底層的 DNS 檢查時機問題還要另外處理。
LINE