Parameter Labs 描述了他們在 ChatGPT 的「artifacts pattern」(OpenAI 曾稱之為「Canvas」,最新版本似乎稱為 HTML 預覽)實作中發現的一個漏洞。這些互動式自訂 HTML 應用程式會顯示在沙盒化的 iframe 中。確保這些 HTML 內容嚴格沙盒化至關重要,以避免不受信任的程式碼與 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 美元的錯誤獎勵,我認為對於如此嚴重的漏洞來說,這個金額有點太低了。