AI-LECTURER 速報課|2026-11-01|約 25 分鐘

一個圖表加一個預覽:ChatGPT 分享連結如何變成帳號接管

取材:Do the math: How we took over ChatGPT accounts(Hacker News(AI 高人氣))
📍 真實場景
佳玲,32 歲,獨立接案的行銷文案寫手

她把客戶的合約條款、報價和產品企劃都丟進 ChatGPT 整理。今天同業群組有人貼來一則「超好用的 ChatGPT 對話」分享連結,她順手點開。

😖 卡住的地方:她以為「只是點開別人分享的對話」跟看一篇文章一樣安全,沒想過這個頁面可能正在用她的登入身分做事,也不知道自己的私人對話可能因此外流。
💡 這課帶你看資安團隊怎麼靠「圖表」和「預覽」這兩個看似無害的功能,串出只點一下連結就能接管帳號的漏洞。你也會學到工程師怎麼判斷一道牆有沒有真的擋住人。

🧭 這到底是什麼(白話版)

2026 年 10 月,一個資安研究團隊公開了他們在 ChatGPT 發現的漏洞。攻擊者先做一場惡意對話,再用 ChatGPT 正常的分享功能公開,最後把連結寄給受害者。受害者一點開,攻擊者的 JavaScript網頁裡負責讓畫面動起來、能主動做事的程式語言 就會以 chatgpt.com 的身分,跑在受害者「已登入」的狀態裡。

這不只是讓畫面彈出一個警告視窗。研究團隊證實,這段程式碼能列出受害者的對話清單,讀到從未分享給攻擊者的私人對話,還能把內容送到外部伺服器。它甚至能像受害者本人一樣呼叫 ChatGPT 的 API程式之間互相請求資料的正式窗口,網站自己的功能也是靠它運作,研究團隊因此說這等於接管了帳號。受害者不必安裝 App、不必貼程式碼、不必開開發者工具,唯一的動作就是打開連結。

整條攻擊鏈從兩個單獨看都無害的功能開始:一個互動圖表,和一個 HTML Preview(預覽)。ChatGPT 能把 HTML 程式碼區塊變成小網頁,因為這種網頁可能含任意程式碼,所以它被放進 沙盒一個被嚴格限制權限的隔離區,裡面的程式碰不到外面的東西 框架,而且放在另一個網址底下。瀏覽器把它當成「另一個網站」,所以它不能直接讀取外面那層已登入的 ChatGPT 頁面。

問題出在牆上有一個「信箱投遞口」。瀏覽器提供一個叫 postMessage讓兩個互相隔離的網頁框架仍能傳紙條給對方的瀏覽器功能 的機制,被關起來的預覽頁雖然走不進主頁面,卻還是能從投遞口丟訊息進去。這種機制只有在收件方檢查「寄件人是誰」時才安全。圖表載入的數學函式庫 MathLive 在主頁面裝了一個監聽器,而它對研究團隊鎖定的那個設定並沒有做這項檢查。OpenAI 在 10 月 26 日修補了漏洞,並把這份回報列為 P1最高等級之一的嚴重度分類,代表必須優先處理的重大問題。

🎯 為什麼值得你花時間

攻擊門檻低到只要點連結受害者不必安裝任何東西,也不必貼程式碼。分享連結本來就是 ChatGPT 鼓勵大家使用的功能,所以這條路徑對一般使用者來說幾乎沒有警覺點。
拿到的是整個登入身分,不只是畫面程式碼以 chatgpt.com 身分執行,能列舉對話清單、讀取沒分享過的私人對話,並直接呼叫已驗證的 API。實際影響比竄改頁面外觀大得多。
沙盒被突破的原因不是沙盒壞了預覽頁確實讀不到 parent.document,隔離本身有效。破口出在另一個零件:圖表函式庫在主頁面裝的訊息監聽器。安全設計要看整條鏈,單看一道牆是不夠的。

⚙️ 它是怎麼運作的

1
攻擊者做一場惡意對話並公開對話裡同時放了一個 HTML 預覽程式碼區塊和一個互動圖表,再用 ChatGPT 正常的分享功能產生公開連結,寄給目標。
▼
2
受害者打開連結這是唯一需要受害者做的動作。頁面載入時,圖表會在背後載入 MathLive 函式庫。
▼
3
預覽被關進另一個網址的受限框架預覽裡的程式碼能執行 JavaScript,但因為網址不同,它讀不到外層的 parent.document。到這一步隔離看起來完全正常。
▼
4
MathLive 在主頁面裝了訊息監聽器載入圖表時,MathLive 同時在主頁面安裝了一個處理螢幕鍵盤相關訊息的監聽器,等於在牆上開了一個信箱投遞口。
▼
5
預覽從投遞口丟訊息,監聽器沒驗寄件人被關起來的預覽頁用 postMessage 送訊息進主頁面。對研究團隊鎖定的那個設定,MathLive 沒有檢查寄件者就接受了。素材節錄在這裡截斷,後續如何一步步升級成完整接管,本課不臆測,只講原文已確認的部分。
▼
6
程式碼以受害者身分行動最終結果是攻擊者的程式碼以 chatgpt.com 身分跑在受害者的登入狀態中,能列對話、讀私人對話、把資料送往外部伺服器。
預期的安全設計 vs. 這次實際發生的事
環節設計意圖實際發生
預覽程式碼放進另一個網址的受限框架,碰不到主頁面隔離有效,讀不到 parent.document
圖表函式庫只負責畫圖與提供數學鍵盤同時在主頁面裝了訊息監聽器
訊息收件只接受可信寄件者的訊息對關鍵設定沒有檢查寄件者
分享功能讓人分享有趣的對話成為惡意內容送達受害者的管道

🔍 程式碼漫遊(點有 ● 的行看白話講解)

以下是為了教學而簡化的示意寫法,不是 MathLive 的真實原始碼。它只用來說明「收訊息時有沒有檢查寄件者」的差別。

●const TRUSTED = 'https://trusted.example';
💬 先寫下「我信任誰」。沒有這份名單,後面就無從判斷寄件者可不可信。
●window.addEventListener('message', (event) => {
💬 這就是在主頁面裝信箱投遞口。只要頁面還開著,任何能找到這個口的框架都能投遞訊息。
● // 有漏洞的寫法:直接相信訊息內容
💬 素材指出,漏洞的核心就是對某個設定缺少這道檢查。
● if (event.origin !== TRUSTED) return;
💬 重點行。event.origin 是瀏覽器填上的寄件者網址,攻擊者無法偽造,檢查它才算真的驗了寄件人。
● applySetting(event.data);
💬 通過檢查才處理訊息。少了上一行,被關在沙盒裡的預覽頁也能呼叫到這裡。
●});
💬 監聽器結束。修補的關鍵不是拆掉信箱,而是收信前先看寄件人。

🛠️ 動手做:體驗信箱投遞口:有沒有驗寄件人差在哪

  1. 先不要勾選「檢查寄件者來源」,按「以沙盒預覽身分寄出訊息」,觀察下方「主頁面設定」被改掉了。
  2. 按「重設」,再勾選「檢查寄件者來源」,重複同樣的操作,觀察訊息被拒收,設定不變。
  3. 按「以可信來源寄出訊息」,確認勾選檢查後,正常的訊息仍然能通過,所以防護沒有影響正常功能。
  4. 想一想:這個示範只改一個設定。如果被改的是會讓頁面執行程式碼的設定,後果會是什麼?這就是素材那條攻擊鏈需要擔心的地方。
👇 下面是活的,直接操作

🧠 工程思維透鏡(資深工程師看到的是什麼)

🔭 資深工程師看到「預覽被隔離在另一個網址」,會先放心還是先追問?
會先追問「它還剩哪些溝通管道」。把不可信程式碼放進不同網址的框架是正確且昂貴的設計,這次它也確實有效,預覽讀不到 parent.document。但隔離只切斷了直接讀取,沒有切斷 postMessage。安全邊界的強度取決於邊界上每一個開口,所以審查時要列出所有出入口,而不只確認牆存在。
🔭 為什麼是「第三方函式庫」成為突破口,而不是 OpenAI 自己寫的核心程式?
因為功能越豐富,主頁面載入的程式碼就越多,每個函式庫都可能在主頁面登記監聽器。圖表在使用者眼中只是畫圖,但載入 MathLive 的副作用是替主頁面多開了一個訊息入口。取捨是:用現成函式庫能快速做出好用的功能,代價是你要為它帶進來的所有副作用負責。
🔭 「收訊息要驗寄件者」這麼基本,為什麼還會漏?
因為缺少檢查不會讓功能壞掉。正常使用時一切運作良好,只有懷有惡意的寄件者才會暴露問題,所以一般測試很難抓到。防禦性程式的設計原則是預設不信任:監聽器先拒收,再明確列出允許的來源,而不是先接受,再想有沒有人會濫用。
🔭 分享功能本身有錯嗎?
分享功能沒有錯,錯在它成了不可信內容的送達管道。任何「讓一個人的內容出現在另一個人的已登入環境」的功能,都該被視為高風險輸入點。這是產品價值與安全風險之間的典型取捨,解法通常是限制內容在受害者環境能做的事,而不是拿掉分享。

📝 隨堂考(點選答案,立即回饋)

Q1. 根據素材,受害者需要做什麼才會被攻擊?
✅ 素材明確寫到,受害者不需要安裝 App、加入 Project、貼程式碼或打開開發者工具,打開分享連結是唯一必要動作。
Q2. 預覽(Preview)程式碼為什麼一開始「讀不到」外層的 ChatGPT 頁面?
✅ 預覽可以執行 JavaScript,但在另一個網址的受限框架中,瀏覽器不允許它直接檢查外層已登入的頁面。
Q3. postMessage 在這個案例中扮演什麼角色?
✅ 素材用「信箱投遞口」比喻它:預覽頁走不進主頁面,但仍能投遞訊息,是否安全取決於收件方有沒有檢查寄件者。
Q4. 這次漏洞的關鍵缺陷最貼近下列哪一項?
✅ 素材指出隔離一開始有效,問題出在 MathLive 裝在主頁面的監聽器,對該設定沒有做寄件者檢查。

🃏 翻牌記憶卡(先想答案,再點開對答)

這次攻擊鏈的起點是哪兩個看似無害的功能?點我翻面
互動圖表和 HTML Preview(預覽)。
預覽為什麼讀不到 parent.document?點我翻面
它被放進另一個網址的受限框架,瀏覽器視為不同網站,禁止直接檢視外層頁面。
postMessage 安全的前提是什麼?點我翻面
收件方必須檢查寄件者(origin)。沒檢查,被隔離的框架也能從投遞口影響主頁面。
圖表載入 MathLive 時,多做了什麼副作用?點我翻面
在主頁面安裝了處理螢幕鍵盤相關訊息的監聽器,形成一個訊息入口。
研究團隊證實程式碼能做哪些事?點我翻面
列舉對話清單、讀取未分享過的私人對話、把內容送到外部伺服器,並以受害者身分呼叫已驗證的 API。

✅ 離開前自測(全勾=這課真的學會了)

0%