有人一晚看到 OpenAI 帳單多了 281 美元、Anthropic 多了 168 美元;另一個人把損失寫成 1,700 美元。OpenCode 說可能被碰到的,是 Console 工作區裡貼進去的第三方金鑰,範圍是 Console 用戶的 1.4%。沒收到主旨為「Action Required: Potential provider key breach」那封信的人,公司說不在這批裡。
OpenCode 本身是模型無關的寫程式代理,命令列、桌面端、編輯器都能用,用來讀程式、加功能、修錯誤。Console 才是可選的託管閘道:工作區存一份 OpenAI、Anthropic 或 Google 金鑰,由 Console 代打供應商,讓組員不必看見那串密鑰。共同創辦人 Dax Raad 在回覆裡把範圍寫窄:「是 OpenCode Console,不是 OpenCode 本身」;本機命令列與桌面端自行填的金鑰,留在那台機器上的 SQLite,公司說「never come to us」。The Hacker News 把這段機制講清楚:供應商金鑰是 bearer credential,誰拿到複本,就能對帳戶發可計費請求,直到供應商端撤銷。從 Console 刪掉金鑰,供應商那頭不會跟著作廢;Console 自己的預算上限也擋不住繞過閘道的用量。
Safeguard 把信件原文再核一次:團隊「identified unauthorized access to a legacy system that we were in the process of decommissioning」,「third party provider keys (eg OpenAI, Anthropic) saved in your workspace may have been exposed」。X 文補充正在跟 Google 一起處理,所以 Gemini 金鑰也應視為同一範圍。信件發出時間是 10 月 17 日早上;X 文時間戳 18:08 UTC,內容寫 breach 發生在「last night」。BleepingComputer 當時發郵件問細節,截稿前沒有回覆。
時間線能核的,比攻擊者名字多
The Hacker News 寫:入侵發生在 10 月 16 日夜裡,目標是一套正在除役的舊系統。10 月 17 日早上,受影響用戶收到那封 Action Required 信。同日稍晚 OpenCode 在 X 發文,把事件稱作「與大規模知識蒸餾攻擊有關」,並說正在與 Anthropic、OpenAI、Google 處理。BleepingComputer 轉述給用戶的信件:最早可能曝光時間寫成 10 月 17 日 00:30 UTC,並稱目前看起來沒有其他資料外洩。The Hacker News 同時註明:公司沒有說明未經授權存取何時開始、舊系統是什麼、怎麼進去、裡面有多少把金鑰、1.4% 對應多少人。
10 月 18 日 Raad 又寫:攻擊方過去 48 小時不停打他們的系統,「副作用是所有東西都在被加固」。BleepingComputer 說攻擊過程動用了 AI 代理。事件被標成「進行中」時,公開資訊停在這幾句。The Neuron 把同一事件放進 10 月 19 日摘要,強調受影響的是「連了外部供應商」的 Console 用戶子集,不是全部 OpenCode 安裝。
用戶側的帳單是另一組尚未被公司逐筆確認的數字。Dealroom 轉述 Colin Parsons:OpenAI 金鑰被用掉 281 美元、Anthropic 168 美元;Preston Zeller 寫 1,700 美元。Notebookcheck 轉 Reddit:有人說 Anthropic 帳戶出現約 400 美元未經授權用量,另有人說 Google 約 200 歐元,專案隨後被停。BleepingComputer 寫部分用戶的 Google Cloud 專案被標成「abusive activity consistent with hijacked resources」——這是雲端平台自己的風控先動手,不一定等你在帳單頁發現。OpenCode 自己的用詞一直是「may have been exposed」,沒有公開說哪一把金鑰確定被複製、被拿去打了哪些模型。中文快訊另寫 OpenAI 幫部分用戶退了被刷的額度,還開放了防禦用的網路安全設定;這句來自第二手簡報,OpenAI 沒有對這次事件單獨發新聞稿。OpenCode 信件提到可能補償受影響者,金額、條件、時限都還沒寫成公開政策。
「蒸餾攻擊」公司沒把因果鏈寫完
蒸餾本身是合法訓練手法:用大模型的輸出去教小模型。變成攻擊,是因為有人用偷來的帳號、信用卡或金鑰,對前沿模型做大規模未授權取樣。Anthropic 9 月的威脅情報把這類行動寫成:假帳號網路、盜刷卡、收割來的 API 金鑰。OpenAI 稍早也公開過對抗蒸餾的阻斷數字,並點名過其他實驗室,獨立研究則說有些抽取路徑仍在。OpenCode 把這次 Console 入侵「related to」大規模蒸餾,但沒有指認誰、沒有說明舊系統跟蒸餾流水線怎麼接、也沒有公布被偷打的是哪家模型的輸出。
實務上,一把被複製的供應商金鑰不一定只拿去蒸餾。犯罪市場轉賣 token 額度、直接拿來跑代理、或把帳單刷到上限,都會在同一把 bearer key 上發生。用戶看見的是供應商後台多出來的用量;那些請求是在訓練別人的模型、還是只是被拿去當免費算力,公開材料分不出來。
這也是為什麼「只在 Console 刪 key」不夠。閘道看不見繞過它的流量。要停損,得在 OpenAI、Anthropic、Google 各自的控制台撤銷舊 key、換新的、檢查至少回溯到 10 月 16 日的用量,並在供應商端設花費上限。一把金鑰給所有工具共用,被複製一次就全線失守;每個工具一把、再加告警,損失比較容易對上是哪一條整合被打穿。
調查中途,模型先拒答
BleepingComputer 與後續技術寫作都記了同一段:OpenCode 用大型語言模型幫忙查攻擊者時,模型做到一半開始拒絕。Raad 後來寫他們拿到 OpenAI Daybreak Blue,情況比較好。Daybreak 是 OpenAI 給合格資安團隊的 Trusted Access。Blue 降低 GPT-5.5、GPT-5.6 Sol、GPT-6 Sol、GPT-6 Luna 等主流模型在已授權防禦工作上的拒答,Astra 在 Blue 仍走標準護欄,也拿不到網路安全專用模型。Red 才給 GPT-5.5-Cyber、GPT-5.6-Cyber 這類模型,審核更嚴。官方幫助中心把適用場景寫成:安全開發生命週期、防禦營運、已授權的攻擊測試。寫死的限制是:不要把 Daybreak 開在面向客戶的應用、下游產品流量或第三方存取。OpenCode 這次是事故回應,符合「自己系統、已授權」這條;一般開發者把 Console 金鑰外洩之後,不能指望同一套放寬套用到自己的產品流量上。
拒答本身不是這次入侵的原因。它解釋的是另一件事:當攻擊者也在用代理打系統、防守者也在用代理做鑑識,雙方都會撞上同一套安全護欄。護欄擋住的不一定是壞人。Daybreak Blue 把這扇門為通過審查的防守者開大一點,沒有取消使用政策,也沒有把 Cyber 專用模型自動送進 Blue。
本機 OpenCode 不受這次 Console 舊系統影響——前提是你從來沒把同一把金鑰貼進 Console 工作區。本機路徑把供應商金鑰放在那台電腦的 SQLite,公司伺服器按官方說法碰不到。貼進 Console 之後,同一把 key 就變成「閘道代管的複本」;本機那份就算沒被偷,供應商端那把仍可能已經在別處被打。輪替是供應商端的動作,不是重裝客戶端,也不是只把 Console 工作區清空。
The Hacker News 列的停損順序很短:先在 OpenAI、Anthropic 或 Google 自己的控制台撤銷並換新;再改所有還在用舊 key 的程式與腳本;再對供應商帳單至少回溯到 10 月 16 日;最後在供應商端設上限,並讓每個工具用不同的 key。刪 Console、重開瀏覽器、等 OpenCode 發下一則更新,都不會讓已經流出去的 bearer credential 失效。
託管閘道現在多了一條採購條件
把組員金鑰集中放進託管 Console,換來的是「同事不必看見密鑰」。代價是:除役中的舊系統一旦被進,集中存放會變成集中失守。1.4% 看起來很小,公司沒說分母;就算分母只有數萬,分子也已經夠讓供應商端出現可觀的異常用量。Google 用「hijacked resources」停專案,說明雲端帳號的風控不一定等你自己發現帳單。
對還在選閘道的團隊,能直接寫進檢查清單的是託管層能不能回答三件事:舊系統何時下線、金鑰能不能在供應商端設上限、遭竊後誰負責退款。本機 OpenCode 的金鑰沒有進公司伺服器,這次失守的是代管那一層。Anthropic 先前已把蒸餾寫進威脅情報,OpenAI 也公開過阻斷數字;被打到的是夾在開發者與三家模型之間的鑰匙盒。供應商端的花費上限、每工具一把 key、以及「刪 Console 不等於撤銷」,這三條現在比任何產品口號都具體。
