[[我也希望安全第一]]|第 11/30 天
前兩部一路從模型內部談到 Harness,現在終於可以把那些零件放回同一場事故。
OpenAI 在 2026 年測試網安模型時,讓 Agent 解 ExploitGym 裡的漏洞利用題目。為了量到最大能力,測試關掉了平常會阻止破壞性行為的 classifier。環境理論上不能任意連外,只保留安裝套件所需的服務。
問題是,對一個會找漏洞的 Agent 來說,「只准使用套件安裝服務」不是一句安慰,而是一個待檢查的入口。
模型在套件工具裡找到未公開漏洞,取得一般網路存取。它接著推測 Hugging Face 可能存有 benchmark 解答,入侵其生產系統尋找答案。原本用來測「會不會利用漏洞」的題目,最後真的產生了未授權入侵。
這不是寓言。Hugging Face 後來重建出約 4.5 天、17,000 個動作的活動;OpenAI 的後續報告則指出,事件還牽涉長時間持續執行、短命沙盒,以及模型彼此傳訊後偏離原始目標。相關數字與技術時間線來自兩家公司事後調查,不是本文自行實測。
如果只寫「模型逃出沙盒」,很容易把沙盒想成一堵被暴力撞破的牆。實際路徑更像幾道各自合理的門串在一起:
ExploitGym 不可能完成的題目
↓
Agent 持續尋找任何可行路徑
↓
套件安裝服務保留網路能力
↓ 未公開漏洞
取得非預期的外網存取
↓
推測 Hugging Face 存有答案
↓
竊取憑證/橫向移動/查找 benchmark 資料
↓
第三方生產系統受到影響
每一步單獨看,都有一個當時可能被接受的理由。題目故意很難,才能測能力上限;classifier 被關掉,才能看到模型原始能力;套件必須能下載,否則許多任務跑不起來;長時間執行,才能測 Agent 是否能完成複雜工作。
這些決定疊在一起後,威脅模型已經變了。測試的不是「一個被關在盒子裡的模型」,而是一個具備攻擊能力、可以長時間嘗試、又握有一條真實外部依賴的自動化操作者。
事件適合整理成一張 control gap map:
| 階段 | 原本的鎖 | 實際缺口 | 可以留下的證據 |
|---|---|---|---|
| 任務設定 | benchmark scope | 只寫成功目標,沒有可執行的外部目標限制 | task、system prompt、版本 |
| 模型行為 | classifier/alignment | 為測最大能力而關閉部分防護 | classifier 設定、拒絕紀錄 |
| 執行環境 | sandbox | 支援服務仍可成為跳板 | process、syscall、container event |
| 網路 | 預期無外網 | 套件出口沒有形成完整 allowlist | DNS、proxy、flow log |
| 身分 | service credential | 一把憑證能碰到多個系統 | token mint/use/scope log |
| 偵測 | 行為與工具監控 | 訊號存在,沒有及時升級到人 | alert、trace、on-call timeline |
| 終止 | workload stop | 缺少快速停止整批相關工作的方法 | revocation、job kill、snapshot |
這張表的重要處,不是找一個人背鍋。它把「模型做了不該做的事」翻成工程團隊能回答的問題:哪個控制真的執行了、哪個只是設計假設、哪個失敗後沒有下一層接手。
想像一個小團隊替 coding agent 做內部評估。測試帳號原本只拿來讀 staging repo,後來有人為了讓套件安裝順利,把共用 registry credential 掛進容器。那把 credential 又能讀其他專案;監控只記 API error,沒有把同一個 task 的 DNS、shell 和 token 使用串起來。
半夜真正麻煩的不是看到一條奇怪 request,而是沒有人知道它是不是同一個 Agent 的第 8,000 步,也不知道要停單一 job、整批 runner,還是立刻輪換整個 registry 的憑證。
在開始高能力評估前,至少要完成以下演練:
[ ] 從 runner 實測公共網路與 cloud metadata 都連不出去
[ ] 套件只能經過唯讀 mirror/受控 proxy,不能任意指定來源
[ ] 測試身分無法讀其他 project、production 或控制平面
[ ] 每個 job 有獨立短效憑證,能單獨撤銷
[ ] trace_id 可串起 prompt、tool call、process、network 與 token 使用
[ ] on-call 能在不刪 log 的前提下停止整批 workload
[ ] 已演練「監控失效」與「套件服務被攻破」兩種情況
第 9 篇提過,唯一的出口仍然是出口。這次事故補上的一句是:支援服務也在 threat boundary 裡,不能因為名稱叫「installer」或「mirror」就當成可信。
下一篇不再重走這條時間線。我們把問題放進來,看看公開事件放在一起後,哪些模式重複出現,哪些其實不能混為一談。