https://www.informationsecurity.com.tw/seminar/2026_TNSP/

新聞

n8n 修補高嚴重性沙盒逃逸漏洞,可讓工作流程編輯者以伺服器程序權限執行系統指令

2026 / 07 / 31
編輯部
n8n 修補高嚴重性沙盒逃逸漏洞,可讓工作流程編輯者以伺服器程序權限執行系統指令
工作流程自動化平台 n8n 修補了一項高嚴重性的表達式沙盒逃逸漏洞,允許已通過驗證的工作流程編輯者在執行 n8n 的伺服器上,以 n8n 程序權限執行作業系統指令。此漏洞由資安公司 Security Joes 發現,為其在針對 CVE-2026-27577 於 2 月發布的修補程式進行繞過測試時所揭露。

漏洞細節

此漏洞追蹤編號為 GHSA-gv7g-jm28-cr3m。n8n 將其評定為高危(CVSS 4.0 評分 8.7),截至 2026 年 7 月 27 日尚未指派 CVE 編號。受影響版本包含 2.31.5 以前,以及 2.32.0 至 2.32.1 之間的版本;並已在 2.31.5 與 2.32.1 版本中完成修補。公告未提及是否提供 1.x 版本的修補程式,也未說明 n8n Cloud 是否受影響。

利用此漏洞需要具備建立或修改工作流程權限的有效帳號,且不需要其他使用者互動。成功利用後,攻擊者可用 n8n 程序的權限執行指令。Security Joes 指出,此漏洞可能導致 N8N_ENCRYPTION_KEY 洩漏,進而允許解密 n8n 中儲存的憑證,並可能開啟通往連接的資料庫、內部服務及雲端端點的存取路徑。

技術根因

n8n 的工作流程建構者支援如 ={{ $json.email }} 的表達式;系統會透過抽象語法樹(AST)重寫器,將表達式中的自由 JavaScript 識別符重定向至 n8n 的受控資料情境,而非 Node.js 執行環境。

Security Joes 發現兩個盲點。第一,在 2.31.4 版的 VariablePolyfill.ts 中,ArrowFunctionExpression 被放置在一個明確的無操作分支,導致 () => process 這類簡潔箭頭函式主體會將 process 解析為真實的 Node.js 全域物件,而非沙盒版本。第二,n8n 的屬性檢查機制僅檢查成員表達式中的靜態屬性名稱,但 Reflect.get() 會以函式參數形式接收屬性名稱,因此可繞過檢查。研究人員利用此差異取得 process.getBuiltinModule,載入 child_process 模組並在主機上執行指令。Security Joes 表示,這兩個條件各自單獨不足以構成漏洞,且均未被既有測試覆蓋。

修補後的重寫器為 ArrowFunctionExpression 新增了專屬處理程序,將簡潔箭頭主體中的裸識別符路由至資料情境。

Security Joes 於 7 月 14 日識別此漏洞,並於 7 月 15 日透過 n8n 的漏洞揭露計畫回報;n8n 於 7 月 22 日發布修補版本。目前尚未觀察到野外利用案例。

偵測與防護建議

管理員應更新至修補版本,不應依賴 n8n 建議的臨時緩解措施(例如僅允許完全受信任的使用者存取實例與編輯工作流程)。官方公告指出,這些控制措施屬於不完整的短期緩解方案。

防禦方應審查近期建立或修改的工作流程,尋找非預期的箭頭函式或混淆的 JavaScript;同時監控以 n8n 或 Node.js 程序為父程序生成的 shell、PowerShell、curl 或 wget。若發現可疑的工作流程執行或主機指令活動,應立即輪換相關憑證。

此漏洞延續了 n8n 自 2025 年以來修補的一系列表達式沙盒逃逸問題;前一項為評分 9.4 的 CVE-2026-27577,於今年 2 月修補。

本文轉載自 TheHackerNews。