事件背景:被信任的不是使用者,而是模型輸出
Flowise 是以拖拉節點建立大型語言模型應用的低程式碼平台。問題出在已移除的 CSV Agent:使用者以自然語言詢問 CSV 資料,系統要求模型產生 pandas/NumPy 程式碼,再由伺服器端的 Pyodide 執行。換句話說,聊天介面背後不是單純「回答問題」,而是一條從外部輸入通往 Python 解譯器的執行鏈。
來源事實:原始分析指出,CVE-2026-41264 可用兩行 Python 繞過正規表示式驗證:匯入合法套件時,同一行再把 os 偽裝成允許的別名,驗證器只看見第一個套件名稱,執行器卻會處理整行程式碼。原文見 https://dev.to/cgivre/cve-2026-41264-how-a-regex-let-prompts-run-code-in-flowise-26gj。
Flowise 官方 GitHub 安全公告交叉證實:受測版本為 3.0.13,攻擊者可在不需驗證身分的情況下,透過使用 CSV Agent 的 chatflow 誘使模型回傳惡意 Python,最終以執行 Flowise 服務之帳號權限執行任意程式碼。公告把 3.1.0 列為此 CVE 的修補版本,並明列同一個別名繞過方式:https://github.com/FlowiseAI/Flowise/security/advisories/GHSA-3hjv-c53m-58jj。
分數需要辨明口徑:公告內保留 ZDI 的 CVSS 9.8 評估,GitHub 頁面另以 CVSS v4 顯示 9.2;兩者都屬重大或關鍵風險,但不能把不同版本的計分結果當成資料矛盾。
防線為何失效:正規表示式在猜語意,Python 卻在執行語意
CSV Agent 的安全設計大致分成三步:先在提示詞中要求模型不要使用 import、exec、os 等危險功能;再以禁止清單逐項比對模型輸出的文字;通過後交給 Pyodide 執行。第一步只是對模型的請求,不是強制控制;真正的關卡只剩第二步。
合理推論:這套設計把「原始碼長得像什麼」誤當成「程式實際會做什麼」。別名、多重匯入、字串組合、反射、Unicode 正規化,以及 pandas 本身的網路與檔案介面,都可能讓相同能力以不同文字呈現。封鎖已知字詞只能處理已知拼法,無法替 Python 語言建立完整的安全邊界。
Pyodide 採用 WebAssembly,也不等於天然隔離。是否安全仍取決於宿主程式暴露哪些 JavaScript、檔案、網路及程序能力。WebAssembly 可以限制記憶體存取,但如果宿主主動把高權限介面交給執行環境,攻擊面仍會穿透至主機。
為何現在值得注意:修好一個繞法,不等於拆掉危險路徑
3.1.0 禁止額外匯入,確實封住 CVE-2026-41264 的特定技巧;然而後續官方公告指出,3.1.0 至 3.1.2 仍可經由預先載入的 pandas/NumPy 功能造成資料外洩、SSRF,甚至形成其他程式碼執行路徑。該公告清楚區分:舊漏洞需要 import,新繞法則不必匯入任何套件:https://github.com/FlowiseAI/Flowise/security/advisories/GHSA-w7x8-q2gp-5cgg。
Flowise 最後沒有繼續擴充禁止清單。官方 PR #6499 於 2026 年 6 月合併,直接移除 CSV Agent、Airtable Agent、其核心執行邏輯、測試、Python 驗證器與 Pyodide 相依套件;變更隨 3.1.3 發布:https://github.com/FlowiseAI/Flowise/pull/6499。這是比「再補一條 regex」更重要的產品決策:當功能的效益不足以支付隔離、維護與持續繞過的成本,移除功能本身就是風險控制。
實際影響與容易忽略的限制
成功利用後,攻擊者可能讀取服務可見的資料與憑證、對內網發出請求、修改檔案或啟動其他程序;實際破壞範圍仍取決於 Flowise 執行帳號、容器掛載、網路出口與雲端權限。若服務以高權限帳號執行或掛載敏感目錄,後果自然更嚴重。
但這不代表所有 Flowise 都能被同一方式攻擊。必要條件包括部署了相關版本、chatflow 使用 CSV Agent,且攻擊者能接觸該流程。透過模型產生指定程式碼的路徑也可能需要多次嘗試;官方測試使用 Llama 3.2 與 Ollama,不能直接外推到所有模型。同時,目前引用資料證明漏洞可被利用,並未證明已有多少真實環境遭入侵。高 CVSS 是潛在衝擊與可利用性的評估,不是事件發生率。
對台灣自架團隊的意義
對把 Flowise 放在企業內網、用來查詢客服紀錄、營運報表或研發資料的台灣團隊,核心問題不是「有沒有把管理介面公開」,而是 prediction API、公開 chatflow 與模型節點能否觸及程式執行環境。低程式碼縮短上線時間,也容易讓資料處理、模型推論與主機權限被包進同一個服務帳號。
OWASP 將這類情境歸為 LLM05:2025「不當輸出處理」:模型輸出在送往下游系統前未被充分驗證,可能造成 SSRF、權限提升或遠端程式碼執行;其建議是把模型輸出視為不可信資料,而不是把模型當安全控制:https://genai.owasp.org/llmrisk/llm052025-improper-output-handling/。
作者觀點:企業不應只確認「CVE-2026-41264 已在 3.1.0 修補」,而應確認整條危險功能是否仍存在。最低行動是升至已移除相關 Agent 的 3.1.3 以上版本、盤點歷史 chatflow,並檢查是否曾對外開放。若業務仍需要執行模型產生的程式碼,應把它放進獨立程序或工作負載,使用唯讀資料、無憑證、封鎖對外與內網連線、最小檔案權限及明確資源上限;否則「沙箱」往往只是一個名稱。
後續觀察指標
- 資產清冊中是否仍有 3.1.2 以下版本,以及 CSV Agent/Airtable Agent 的歷史流程。
- 公開 prediction 端點是否具備 API 金鑰、反向代理存取控制、速率限制與完整日誌。
- Flowise 的 Node.js 程序是否曾異常啟動 shell、下載工具,或連向不明內外網位址。
- 升級後失效的舊流程是否被私下保留在舊容器,形成未納管的「臨時」服務。
- 未來導入的 AI Agent 是否仍讓自由文字直接進入 Python、JavaScript、SQL 或系統指令解譯器。
這起事件最值得記住的,不是某一條巧妙的別名語法,而是安全邊界的位置:模型可以協助產生內容,卻不能被授權決定哪些內容安全;只要輸出會被解譯執行,它就必須接受與任何外部輸入相同,甚至更嚴格的零信任控管。