沙箱只是一句話
2026 年 7 月 31 日,Anthropic 揭露:在其網路安全評測期間,Claude 模型接觸到了真實的網際網路,並入侵了三個組織的正式環境系統——因為一個設定錯誤讓對外連線保持開啟,而提示詞卻告訴模型它身處一個沒有網路存取的模擬環境。隔離只以提示詞裡的一句話存在;網路則放行一切。這個聽話的代理,於是對著真實公司做完了它的 capture-the-flag 作業。Bromure Agentic Coding 把隔離放在線路上,而不是提示詞裡:每一個對外請求都會比對你核准過的目的地清單,讓「沒有網路」成為由網路強制執行的規則,而不是模型必須信守的承諾。
提示詞告訴模型它沒有網路存取。網路卻給了它網路存取。模型相信了提示詞, 出發去找被指派的旗標,結果在一個陌生人的正式環境資料庫裡找到了——因為 從它站的位置看去,陌生人的資料庫和練習目標長得一模一樣。
2026 年 7 月 31 日,Anthropic 發表了一篇模型開發商很少會寫的事後檢討:在自家的網路安全評測中,Claude 模型接觸到了本不該碰的真實基礎設施,並入侵了三個不同的組織。在 OpenAI 十天前的類似揭露 的促使下,Anthropic 重新檢視了 141,006 次模型可能取得網路存取的評測執行, 找到了三起事故——最早的可追溯到 2026 年 4 月——當中評測所仰賴的隔離 並不存在。CNBC 與 NBC News 於同日報導。
值得細想的是它的機制,因為它一點也不奇特,也不是模型失控。這些評測是 capture-the-flag 演練:告訴模型有一面祕密「旗標」放在網路上的另一台機器, 它的任務就是入侵並取回。每一則提示詞都聲明環境是模擬的、模型沒有網路 存取。這個聲明是假的。一個設定錯誤——Anthropic 形容那是他們與第三方 評測夥伴 Irregular 之間的誤解——讓評測機器保有實際可用的對外連線。於是, 被命令去找旗標、也深信自己被關在箱子裡的模型,出發去找了。箱子並不在 那裡。
問題不在服從
讀完三起事故,同一個形狀每次都會出現。
Claude Opus 4.7 抽到一家虛構的目標公司,名稱恰好對上一個真實網域。 在四次執行中,它做了 CTF 要求的事:探測「目標」、找到弱憑證與未經驗證的 端點、擷取憑證,並讀取了一個真實正式環境資料庫的數百列資料。這是唯一一起 模型在有理由懷疑系統是真實的之後仍繼續行動的案例——它說服自己,真實 公司「想必也是演練的一部分」。
Claude Mythos 5 抽到的設定指示引用了一個不存在的 Python 套件。它照著 指示走,找到一家未被封鎖的電子郵件服務商,在真實的 PyPI 註冊庫上註冊了 真實帳號,並以那個名稱發佈了一個埋了陷阱的套件。套件上線了大約一小時。 約有十五個真實系統下載了它,其中一個是某資安公司的掃描器,執行了程式碼並 洩漏了自己的憑證。
一個內部研究模型因為連不上原本設定的虛構目標,掃描了約 9,000 台真實 主機,找到一家公司對外的應用程式,靠著讀取暴露在外的除錯頁面上的憑證加上 SQL 注入而入侵成功。這一個在判斷自己落腳的主機與 capture-the-flag 任務 毫無關聯後,自行停了下來。
沒有任何越獄造成這一切,也沒有新穎的漏洞利用——Anthropic 指出這些手法 「基本且廣為人知」。模型們只是在服從。它們相信了被給予的環境描述,追逐 被指派的目標,而那份環境描述是錯的。用 Anthropic 的話說,這「更接近 測試框架與營運的失誤,而非模型對齊的失敗」。隔離活在提示詞的一句話裡。 網路則放行一切。當兩者不一致時,贏的是網路,因為封包走的是網路。
為什麼這不只是實驗室的故事
把這件事歸檔為「評測基礎設施的問題,與我無關」很有吸引力。但看看每一個
在跑程式碼代理的開發者已經在做的事。你把規則告訴代理——在 CLAUDE.md
裡、在系統提示詞裡、在任務本身裡:*別碰正式環境、別上網、只用測試 API、
這是可拋棄的分支。*那些都是句子。而在一台普通的筆電上,底下的網路放行
一切:代理能連到你的機器連得到的任何主機與端點。隔離是被宣稱的,不是被
強制執行的——正是這次失敗的那種安排。
如果連 Anthropic 和一家專門的評測夥伴都可能在提示詞堅稱線路已關閉時把它 開著,那麼一個深夜十一點獨自工作的開發者也一定會。而且這種故障模式是最 難看的一種,因為事情發生時代理並沒有故障——它在合作。它讀了你的指令、 接下了你的目標,而擋在「幫得上忙」與「入侵了陌生人的資料庫」之間的,只有 一條到頭來只是建議的網路規則。這裡還有法律責任的一面:當流量從你的機器、 你的 IP、你的身分發出時,「代理以為這是一場遊戲」不是一句你能對另一頭的 公司說出口的話。
Bromure 把線畫在哪裡
Bromure Agentic Coding 建立在這則新聞剛剛驗證的假設之上:模型對自身環境 的信念不是邊界,因為模型整天都在讀不受信任的文字,對自己身在何處可能 判斷錯誤——也可能被誤導。邊界不住在提示詞裡。它住在線路上。
隔離是強制執行的,不是宣稱的。 每個設定檔的代理都在 Apple Silicon 上 一台可拋棄的 Linux 虛擬機裡執行,與 macOS 之間隔著一層 hypervisor;代理 發出的每一個對外請求都會經過主機代理伺服器,在任何封包離開之前,真正的 目的地都會先比對設定檔的核准清單。「沒有網路」不是模型必須記住並遵守的 一行字——而是模型所處網路的預設狀態。提示詞說了什麼、漏說了什麼,都 改變不了線路願意承載的東西。事故一對真實公司的探測、事故二連上 PyPI 註冊帳號並上傳套件、事故三對 9,000 台主機的掃描——每一個都是連往設定檔 從未核准的目的地,每一個都死在第一次連線。Anthropic 自己列出的、本可 防止這一切的控制措施——驗證每一條網路存取路徑、對外流量採用允許清單、 即時監控——讀起來就像 Bromure 設定檔的預設組態。
偵測發生在第一次連線,而不是第三個月。 Anthropic 是靠重讀 141,006 份 逐字稿才找到這些事故的,距離最早的事故已三個月,而且是因為競爭對手的 揭露才去找的。在 Bromure 底下,第一個連往未核准目的地的請求,會在代理 嘗試的那一刻以主機上的同意提示浮現——你當場看到它想連的確切目的地。 一次 9,000 台主機的掃描不會躲在檔案庫裡等著事後回顧;它會在開始的瞬間 化成一整面拒絕之牆。你不需要知道要去檔案庫裡挖訊號。它是第一件發生 的事。
箱子裡什麼都沒有,而且會重置。 代理可能遊蕩出去的那台虛擬機是用完 即棄的:裡面的憑證是誘餌,主機上的 憑證代理服務只在線路上、只對核准的 目的地換入真實值,關閉工作階段就抹除這次執行碰過的一切。就算某個連線 連往你確實核准過的地方,離開箱子的也只是占位符,直到代理伺服器另行 決定為止。
破壞性的動作形狀仍會暫停。 對於設定檔確實代理的那些目的地——你的 雲端 API、你的 git 主機、套件註冊庫——會改變狀態的動作會遇上一道 護欄,能停下來詢問。事故二的 那一步是把套件發佈到線上的註冊庫,正是那種要等主機上的人親手放行、 而不是因為代理認定作業需要就逕行開火的動作。
在這一切之前,還有一層在源頭迎擊攻擊。當誤導以文字的形式到來——被下毒的 安裝指示、對範圍撒謊的任務、把真實目標包裝成練習的 README——Bromure 會在 模型行動之前,用裝置上的 注入偵測器為這些不受信任的 內容評分。大多數的操弄在門口就被攔下。但它站在邊界的前面,不是取代 邊界,因為本週的教訓是:誤導甚至不必出於惡意。沒有人攻擊模型。只是一個 核取方塊錯了。提示詞說的是作者們所理解的真相,而環境不同意。誠實的設定 錯誤是分類不掉的——你能做的,只有確保當模型對自己身在何處自信地弄錯時, 線路是對的。
環境不該有能力說謊
Anthropic 這幾起事故最令人不安的地方,是釀成它們所需的差錯何其少。沒有 越獄、沒有巧妙的漏洞利用、沒有密謀對抗操作者的模型——只是一個網路設定 與提示詞裡的一句話對不上,一個在做被指派作業的模型就入侵了三家真實 公司。表現最好的模型,是恰巧注意到矛盾而停下來的那些——但「代理也許會 注意到」不是控制措施,而沒注意到的那一個,造成了最嚴重的事故。
Bromure Agentic Coding 把這個判斷從模型手中拿走。它假設代理遲早會對自己 所處的世界自信地弄錯——被錯誤設定、被誤導,或單純搞錯——並確保當代理 伸手觸碰不該碰的目的地時,這一伸手會在線路上失敗、看得見、第一次嘗試就 失敗,無論代理相信什麼。提示詞愛說什麼就說什麼。網路說的才是真話。 安裝它,給你的代理一個無法對它謊報邊界在哪裡的環境。