Parameter Labs 披露了一條針對 ChatGPT 產物(artifacts)機制的完整攻擊鏈。所謂產物機制,指的是在沙箱 iframe 中展示可互動的自定義 HTML 應用。OpenAI 早期將這一功能稱為 Canvas,而最新版本似乎改名為 HTML 預覽。由於這些 HTML 應用直接執行在 ChatGPT 的主頁面環境中,一旦沙箱隔離不夠嚴密,不受信任的程式碼就可能與 OpenAI 的 API 互動,讀取使用者的私有資料。因此,嚴格的沙箱邊界是這項功能安全性的核心前提。
Parameter Labs 發現的攻擊鏈相當複雜,並非單點漏洞,而是多個看似無害的設計細節串聯起來的結果。第一步,OpenAI 在圖表支援中使用了 MathLive JavaScript 庫,而該庫自帶一個虛擬鍵盤元件。這個鍵盤可以被父頁面中的程式碼觸發,觸發方式正是來自沙箱 iframe 的 postMessage() 訊息。
問題出在接收這條訊息的程式碼:它使用 innerHTML 把收到的內容寫入父頁面,這意味著任何能夠傳送訊息的一方都可以向父頁面注入自定義 HTML。更關鍵的是,當時沒有任何機制阻止其他沙箱幀去呼叫這個方法,包括 HTML 預覽幀本身。於是,iframe 中的不受信任程式碼獲得了向父頁面插入 HTML 的能力。雖然 innerHTML 不會直接執行 script 元素,但攻擊者可以利用它注入一個新的、不帶沙箱限制的 iframe,從而繞過原有的隔離。
接下來要解決的是指令碼執行問題。OpenAI 的內容安全策略(CSP)完全禁止內聯指令碼,並且只允許從少數幾個域名載入指令碼,YouTube 正是其中之一。攻擊者發現,YouTube 的 oEmbed 端點可以被用來反射 JavaScript,並讓其在頁面中執行。這樣,攻擊鏈的最後一塊拼圖也補齊了。
一旦攻擊者在 ChatGPT 頁面上取得 JavaScript 執行許可權,後續操作就變得非常簡單:他們可以呼叫 API 獲取使用者的私有資料,再透過圖片引用將資料外洩。最終效果是,攻擊者可以構造一個 ChatGPT 分享連結,當另一名已登入使用者訪問該連結時,其私有資料就可能被竊取,或者攻擊者能夠以該使用者的名義執行操作。
OpenAI 在收到報告後修復了這個漏洞,並支付了 5,000 美元的漏洞賞金。Simon Willison 認為,對於如此嚴重的安全問題,這個金額略顯偏低。該事件也提醒人們,在整合第三方庫、使用 postMessage 通訊以及配置 CSP 白名單時,任何一處疏忽都可能被組合利用,形成影響使用者賬戶安全的完整攻擊路徑。