ChatGPT 已經知道你其他的瀏覽行為

Back
Category : News

OpenAI 的廣告收集器位於 bzr.openai.com,它設定了一個名為 __obi 的 cookie。此 cookie 的作用域限定在 .openai.com,其值是在你使用 ChatGPT 時寫入,並與你的 ChatGPT 帳戶綁定,之後會從你造訪的一般網站發送回 OpenAI。任何在 ChatGPT 上購買廣告的公司,都會在其自家網站安裝一段 OpenAI 程式碼,就像零售商早已執行 Meta 和 Google 的標籤一樣。當該程式碼載入時,__obi 就會連同你在該頁面上的行為一起傳送給 OpenAI:你搜尋的產品、閱讀的文章、購買行為。OpenAI 可以將所有這些解析回你的帳戶。

一位研究人員在 Android 手機上重現了完整的機制,使用兩種獨立的擷取方法進行確認,並與涵蓋 936 個廣告商像素、1,029 個主機名稱的數個月流量進行交叉比對。



三步驟同步機制

在 chatgpt.com 上,用戶端會產生 16 個隨機位元組,並呼叫 POST /backend-api/bazaar/obi/sync-token(或在你登出時使用 /backend-anon/)。後端會回傳一個 RS256 JWT,將帳戶 sub 與 obi 識別碼綁定,使用 aud: bzr.openai.com 將其限定在收集器,並在 60 秒後過期。該權杖還會帶有 purpose: obi_sync 和 consent_decision: analytics_allowed。(bzr 是 bazaar,即 OpenAI 內部對廣告平台的稱呼;發行服務則是 wadi。)

用戶端接著會將該權杖以跨站方式 POST 到 bzr.openai.com/v1/obi/sync,並得到以下回應:

Set-Cookie: __obi=...; Domain=.openai.com; HttpOnly;
            Max-Age=31536000; Path=/; SameSite=none; Secure

進入全螢幕模式

退出全螢幕模式

SameSite=None 搭配 Secure 正是 cookie 需要用來搭乘跨站請求的設定,而 Max-Age 為一年。JWT 中的 obi 值與 cookie 值完全相同。在廣告商頁面上觀察到的其他 OpenAI cookie 都被瀏覽器阻擋;__obi 是唯一以 SameSite=None 設定的 OpenAI 識別碼。

從那時起,廣告商網站就會將它回傳。在存放有 __obi 的手機上,從廣告商頁面發送到 OpenAI 主機的每個請求類別都帶有此 cookie。像素 SDK 有一條省略憑證的程式碼路徑,但這並沒有影響:瀏覽器會在任何 OpenAI 程式碼執行前,就將 cookie 附加到載入 SDK 的 <script src> 請求。載入標籤就會揭露此識別碼。



還有什麼會一起傳送

相同的 SDK 會從廣告商頁面抓取身分資訊。酬載會依來源標記四種來源:in 表示廣告商故意傳遞的值,而 fm、ht、js 則是從表單欄位、渲染的頁面文字和標籤管理器匯流排抓取的值。被抓取的身分資訊數量超過廣告商提供的身分資訊,685 個事件對 255 個事件。SDK 會用自己的函式取代 window.dataLayer.push,讀取 adobeDataLayer,並透過解析 gtm.js 標籤中的 l= 參數來尋找重新命名的 GTM 層。目前版本會從匯流排取得電子郵件和電話;0.1.31 版還會取得姓名和地理位置,直到 8 月 27 日範圍被縮小為止。

電子郵件、電話和姓名在傳輸前會經過 SHA-256 雜湊。國家、地區、城市和郵遞區號則以明文傳送,而郵遞區號是被收集最多的表單欄位,在 28 個網站上共 100 個事件。網址會被簡化為來源加上路徑,在 23,929 個觀察到的案例中沒有一個帶有查詢字串,但路徑會被保留,而到達收集器的路徑中包含醫療狀況、債務解決漏斗和訴訟受理表單。一個拒絕清單會丟棄密碼、一次性驗證碼、信用卡號、社安號、生日、病史、診斷和法庭欄位。在 881 個已知設定的像素中,有 638 個開啟了自動配對,包括樣本中所有的信用和貸款廣告商。

在測試裝置上,單一 __obi 值從 12 個商業網站以 13 個像素 ID 發送到 OpenAI,包括 Chewy、Wayfair、ThriftBooks、Eventbrite、HelloFresh、Coursera 和 SeatGeek,每個都以 202 狀態接受。在更廣泛的擷取中,30 個不同的 __obi 值中有 12 個出現在超過一個廣告商下,其中一個出現在十個廣告商下。



即使登出也會執行

在 932 個解碼的同步權杖中,有 736 個是 account_user,196 個是匿名,而匿名主體與帳戶主體一樣穩定:每個裝置一個值,至少持續 27 天。

OpenAI 的 cookie 政策將 __obi 列在「分析」類別下,有效期一年,而且它是該區段中唯一的項目;政策指出分析 cookie 幫助 OpenAI 了解其服務的表現。OpenAI 將同意分為 oai_consent_analytics 和 oai_consent_marketing,而每個解碼的同步權杖都帶有 analytics_allowed。允許分析但拒絕行銷的使用者仍然會收到此 cookie 和跨站解析。

研究人員在 9 月 14 日向 OpenAI 提出兩個問題:為什麼 __obi 被歸類為分析,以及拒絕行銷是否能阻止它。OpenAI 支援團隊確認收到詢問,表示會在內部分享這些觀察,但兩個問題都沒有回答。



如果你運行這些系統,這代表什麼

此機制是標準的廣告技術。Meta 幾年前就建立了結構上等同的系統:已登入的帳戶、像素觸發時的第三方 cookie、解析到個人檔案的站外轉換。在 AI 聊天產品上運行這套系統是新的,而且很重要,因為人們會告訴這些系統他們永遠不會發佈到社群網路的事情,而且這些系統越來越會為他們採取行動。

此行為是在 Android 版 Chrome 上觀察到的。Safari 的智慧追蹤預防會阻擋所有第三方 cookie,而 iOS 上的 Chrome 底層是 WebKit,因此沒有 iOS 瀏覽器會運行它;桌面版 Chrome 尚未測試。閘控相當寬鬆:大約每五個 ChatGPT 工作階段會產生一個同步權杖,而行動網頁用戶端在完全沒有同步的情況下就會投放廣告,因此你可能會看到沒有附加 cookie 的像素觸發。伺服器端的 join 並未直接觀察;202 狀態確認收集器接受了帶有 cookie 的事件,而解析到帳戶則來自於設計本身。

如果你經營其中一個廣告商網站,你無法看到任何這些情況。__obi 屬於你的腳本無法讀取的域名,因此你安裝了一個轉換像素,卻無法得知你的訪客正被解析到 ChatGPT 身分。該像素的另一個 cookie __obref,是以每個網站不同的值設定在你自己的域名上,並不會跨站:在觀察到的 2,860 個值中,有 2,828 個僅出現在一個廣告商下。

https://dev.to/randomchaos/chatgpt-already-knows-your-other-browsing-1poj

https://www.worldprogramming.org/posts/chatgpt-already-knows-your-other-browsing-avxaji