文章 發布於 AIA: 2026年4月16日

Salesforce Agentforce「ForcedLeak」:Web-to-Lead 表單遭提示詞注入攻擊,CRM 資料被帶走

Noma Security 測試了 Salesforce Agentforce 的安全性,找到一條完整的攻擊鏈:在 Salesforce 的 Web-to-Lead 表單(從網頁自動收集潛在客戶資料的功能)的描述欄塞進一段提示詞(prompt),之後 Agentforce agent 處理這筆潛在客戶資料時會把它當成指令照做,把 CRM 的客戶清單和 PII 傳到一個還在 Salesforce 白名單上、但原註冊已過期的網域——Noma Security 買下了這個網域,整條攻擊鏈就串聯成功了。CVSS 9.4。

這個案例再次說明,agent 安全得靠三層控制同時成立:不可信輸入處理、權限範圍、資料出口策略;這次是 URL 白名單沒做好把關。

Prompt InjectionAgentic AIData ExfiltrationSaaS Security
6 項對應的 AIDEFEND 防禦手法
來源: Salesforce AI Agents Forced to Leak Sensitive Data 
作者 Nate Nelson · 原文發布: 2025年9月25日

威脅分析

  • 攻擊面。 Salesforce Web-to-Lead 表單的「描述(Description)」欄位接受使用者輸入。當下游的 Agentforce agent 之後處理這筆潛在客戶資料,它也會順便解析並執行藏在描述裡的提示詞——這就是從合法攝入介面發動的間接提示詞注入攻擊(prompt injection)。
  • 情境邊界薄弱。 Noma 研究人員先用一個不相關的問題試 agent:「紅色加黃色是什麼顏色?」 agent 回「橘色」。這就證明這個模型會回應業務情境以外的指令,不會把它當成無關文字擋掉。
  • 外洩路徑。 Salesforce 的 CSP 本來會擋掉任意外部網域,但白名單裡有一個 my-salesforce-cms.com,它的註冊已經過期。Noma 把網域買回來、寫一段提示詞叫 agent 把潛在客戶資料 POST 到這個網域,整條攻擊鏈就接起來了。
  • 嚴重性。 CVSS 9.4。Noma CTO 說被攻陷的 agent 不只能外洩資料,還能改 CRM 紀錄、刪資料庫、甚至跳到相連的其他系統。被帶走的資料類別包括銷售 pipeline、PII、對話逐字稿、付款資訊。
  • 廠商回應。 Salesforce 把過期網域重新註冊回來、把 Trusted URLs 規則收緊,擋住 agent 送到不可信 URL 的輸出。但模型在結構上怎麼分辨「指令」和「資料」的根本修正,還在進行中。

適用的 6 項 AIDEFEND 防禦手法

AID-H-019.005
Value-Level Capability Metadata & Data Flow Sink Enforcement
極高
就算 prompt injection 成功了,真正要擋住外洩的是資料流出口(sink)層級的策略。Trusted URLs 這個機制精神上就是 sink 層級的控制,但它該綁在「agent 即將送出的資料機敏程度」上,不是只綁在一份靜態網域白名單上。
AID-H-020.001
URL Normalization & Allowlist Filtering
極高
這次具體的失敗點,是白名單上有一個過期的註冊,結果被攻擊者買回去了。URL 白名單需要持續維護:即時的註冊狀態檢查、所有權驗證,還有每天把 DNS 不再指向原廠的網域掃掉。
AID-D-003.002
Sensitive Information & Data Leakage Detection
ForcedLeak 的影響,就是敏感 CRM 資料透過 agent 回應流出去。輸出掃描應該在內容被呈現、寫進日誌或送到外部 URL 前,先攔下 PII、客戶紀錄、secrets,以及異常大量的資料筆數;就算目的 URL 在允許清單裡也一樣。
AID-H-002.002
Inference-Time Prompt & Input Validation
會流進 agent 上下文的使用者表單文字,必須在推論(inference)時就先驗證過——把所有外部來源的文字標成不可信資料、把看起來像指令的內容標記或移除,並確保 agent 架構不會去執行這塊不可信欄位裡的指令。
AID-M-009.002
Authority Envelope & Action Risk Classification
大量 CRM 匯出和紀錄異動,對一個負責收進潛在客戶、自動回覆的 agent 來說,是落在權限範圍外的高風險動作。真正劃好的權限範圍會要求:任何夾帶客戶紀錄的對外請求都必須走一道升級核准的程序,不管目的 URL 是什麼。
AID-H-018.007
Dual-LLM Isolation Pattern
結構上的根本解,是把「讀不可信內容的 LLM」和「呼叫工具的 agent」切開,中間只傳一份型別明確、schema 驗證過的結構化摘要。如果有做雙 LLM 隔離,帶工具權限的 agent 是看不到原始的 Description 欄位的,ForcedLeak 這條鏈就串不起來。

身為資安防禦者,我們應該這麼做

  • 盤點每一個會讓 SaaS AI agent 攝入使用者輸入的地方(網頁表單、上傳、留言、email thread),確認 agent 架構是把這段內容當「資料」、還是當「指令」在處理。
  • 對每個 agent 輸出白名單和 CSP 裡的網域,做一次所有權與註冊狀態盤點——確認註冊和所有權都還在、DNS 也還指向可信的主機;過期、或 DNS 已經指向別處的網域一律從白名單移除。
  • 會讓 agent 送出客戶紀錄、動到 CRM 狀態、或執行付費/敏感 API 的動作,一律多加一層升級核准的程序,不管目的 URL 是什麼。
  • 對 agent 輸出加上資料機敏程度標籤和流量指標;一旦 agent 試圖把大筆紀錄送出去就發出警示通知,就算目標 URL 在白名單裡也一樣。
  • 如果架構能動,就採用雙 LLM 或工具隔離的 pattern——讓「讀不可信使用者輸入的那塊」和「持有工具權限的那塊」不是同一個。

2 個額外的防禦考量

白名單網域的所有權監控

除了上面列的技術,依賴網域白名單(CSP、Trusted URLs、agent 輸出白名單)的團隊,還應該再加一層:對每個白名單網域的註冊狀態和 DNS 狀態做持續監控,因為被攻擊者搶回去的過期網域會把整份策略悄悄打穿。
建議做法: 跑一個每日排程:對每個白名單網域確認(一)註冊仍屬於自家組織或一個明確列名的可信廠商,(二)DNS/MX/NS 還指向預期的主機;任何異動立刻發出警示通知,每月一次不夠,要每天跑。

Agent 輸出的流量異常偵測

除了 URL 白名單,防禦方還要記錄 agent 實際送出去的內容,並對每次呼叫標上資料機敏程度和紀錄筆數。送一筆潛在客戶資料到第三方表單是正常的;一次送整份客戶清單就不是,不管目的在不在白名單上。
建議做法: 對 agent 的工具呼叫加上每次呼叫的資料機敏程度標籤和紀錄筆數 metadata;在高流量或高機敏的出口上做速率限制或升級核准,就算 URL 在白名單裡也一樣。

結論

ForcedLeak 是很經典的一個案例,說明為什麼 agentic AI 安全一定要採用縱深防禦(defence-in-depth)策略,不能押在單一一條可信控制上。這條鏈有三層都可以擋下——攝入時的輸入驗證、agent 動作範圍上的權限劃分、或資料出口的 sink 層策略——任何一層守住了,外洩就不會發生。AIDEFEND  在這三層都已經給出對應技術;這個案例想告訴防禦方的是:把靜態 URL 白名單當成防外洩的主力太脆弱,每份白名單都必須搭配對網域的持續把關,和對出口流量的監控。