代理程式憑空捏造的套件
特拉維夫大學、以色列理工學院與 Intuit 的研究人員揭露了 HalluSquatting:攻擊者反覆試探編碼代理程式,直到摸清它會穩定捏造哪些套件名、儲存庫名或技能名,接著搶先註冊那些捏造出來的名稱,然後守株待兔。當你要求真正的資源時,代理程式反而抓取攻擊者的版本——而藏在其中的指示會劫持代理程式的 shell,安裝殭屍網路惡意程式。儲存庫名稱的捏造率最高達 85%,技能安裝最高達 100%。Bromure Agentic Coding 讓這整條抓取與執行的路徑跑在一次性的 Linux VM 裡,掃描猜測落地的套件登錄庫,只留給惡意程式可偷的誘餌。
你向編碼代理程式要一個眾所周知的套件。它打出一個看起來沒錯的名稱,執行了安裝,然後 繼續往下走。那個名稱是猜的——而有人早已把這個猜測一字不差地註冊下來,並塞滿了惡意 程式。沒有人打錯字。名稱是代理程式捏造的,而攻擊者就守在捏造落地的地方。
2026 年 7 月,一組來自特拉維夫大學、以色列理工學院與 Intuit 的研究人員——其中包括 Aya Spira、Stav Cohen、Ron Bitton、Avishai Wool 與 Ben Nassi——描述了一種他們稱為 HalluSquatting 的攻擊。它把大型語言模型最為人熟知的弱點之一——它們會憑空捏造,並把捏造當成事實陳述 ——變成一套供應鏈投遞系統,瞄準的不是你,而是替你工作的代理程式。
這套手法簡單得近乎乏味。要一個編碼代理程式為它從未見過的專案拉取套件、複製儲存庫或 安裝技能,它往往會猜測識別碼,而不肯承認自己不知道。HalluSquatting 就把這個猜測 武器化。
從打錯字到幻覺
搶註打錯字(typosquatting)由來已久:註冊 expresss 或 lodahs,等著某個人在終端機
按錯鍵。它仰賴人犯錯。搶註 AI 錯覺(slopsquatting)在 2025 年至 2026 年初浮現,把
錯誤移到了模型身上——代理程式幻覺出一個不存在的套件名,攻擊者搶先註冊,下一個幻覺出
同一名稱的代理程式便裝下了酬載。2026 年 1 月,
Aikido 的 Charlie Eriksen
記錄了一個被幻覺出來的 npm 套件 react-codeshift,在無人察覺之前擴散到了 237 個
專案。從頭到尾沒有打錯字,所以任何搶註打錯字的防禦也從未觸發。
HalluSquatting 是 2026 年的升級,而升級之處在於:幻覺不再交由運氣決定。研究人員的 方法是一套四步驟的配方:
- 挑一個模型沒背下來的目標。 那些出現在訓練截止之後、正當紅的儲存庫與工具最為 理想:模型聽過它們,所以會嘗試,但它沒見過真正的名稱,所以會捏造一個。
- 摸清那個錯誤。 反覆試探代理程式,直到你知道它會穩定產出哪個假名稱。論文報告 被幻覺出的儲存庫名稱出現的頻率最高達 85%,技能安裝的情境最高達 100%—— 一致到足以下注。
- 佔下那個捏造的名稱。 把它註冊到 GitHub 或外掛商店,並用寫給代理程式閱讀的
指示填滿 README、資訊清單或
SKILL.md。 - 等待。 當開發者要求真正的資源時,代理程式反而輸出攻擊者捏造的識別碼並抓取它。 隱藏的指示接著劫持代理程式自己的命令執行工具,把酬載裝上。
那個酬載不是概念驗證。研究人員把猜測串接到提示注入——Nassi 的團隊稱之為 promptware——最終導向遠端程式碼執行與殭屍網路惡意程式:受感染的開發者機器 會回撥並聽命行事。猜測把攻擊者的檔案端上代理程式的盤子,埋藏的指示把它變成命令, 命令則用開發者的筆電組出一張殭屍網路。
為什麼這是對代理程式的攻擊,而非對你
一語道破的,是報導裡那句話:HalluSquatting「把目標從人類移向 AI 代理程式,後者在 執行命令時,可能不會確認來源是否真實」。一個對套件名沒把握的人會停下來、查登錄庫、 瞄一眼星星數。自動執行模式下的代理程式不會停。它的工作就是繼續前進,而一個從它自己 權重裡蹦出來的名稱,帶著和你親手打出的名稱一樣的權威。它沒有理由懷疑自己。
研究人員在開發者每天都會用到的工具上做了測試—— GitHub Copilot、Cursor、Windsurf、Cline、Google Gemini CLI,以及 OpenClaw 家族 ——並發現幻覺「可在不同的 LLM 模型與應用之間轉移」,對建立在 Anthropic、OpenAI 與 Google 模型之上的代理程式都有效。沒有哪一家廠商能靠修補把它消除,因為它騎乘在 編碼代理程式把請求變成動作的那套共通形態上:猜名稱、抓資源、讀它說什麼、照它說的做。
為什麼「別再幻覺就好」從來不是解方
誘人的答案是讓模型自我查核——在抓取前先解析名稱、對 clone、install 與 fetch
發出警示、把每個識別碼錨定到真實存在的東西上。這些都是好主意,研究人員也建議如此。
但它們全都住在同一個地方:一個讀取代理程式即將做什麼、盼著在它執行前攔下壞情況的
過濾器。HalluSquatting 正是針對那個讀取者而設計。名稱看來正當,因為它是模型產出的;
README 看來像文件,因為 README 本就是那樣;而安裝命令,是編碼代理程式一整天做的最
稀鬆平常的事。
這正是代理程式安全其餘部分反覆撞上的那道牆。讀取命令的封鎖清單, 敗給改寫命令的 shell。 讀取套件的掃描器, 敗給不在套件裡的酬載。 搜尋技能的代理程式, 推薦它自己找到的惡意程式。 HalluSquatting 加上了迄今最鋒利的版本:那個惡意名稱根本不是來自網際網路。它來自模型。 你無法把自己代理程式的想像力列入黑名單。描述由攻擊者執筆,而執行是結果被決定的唯一 所在。
Bromure 在哪裡劃線
Bromure Agentic Coding 不試圖勸模型別再猜。它改變的是一個錯誤猜測所能觸及的範圍。 Bromure 執行的每一個代理程式——Claude Code、Codex、Grok Build——都跑在你 Mac 上一 台一次性的 Linux VM 裡,而非 macOS 本身。所以當代理程式輸出捏造的名稱、抓取攻擊者的 資源、並照研究人員所見那樣執行安裝時,有幾件事已然成立。
首先,對這類攻擊而言相當罕見的是,登錄庫這條路徑會被掃描。 當捏造的名稱是 npm、
PyPI 或 Cargo 套件時——搶註 AI 錯覺的情境、react-codeshift 的情境——它正好落進
Bromure 的供應鏈掃描裡,這道掃描會在套件從公開登錄庫被拉取時加以檢查。這是
HalluSquatting 中唯一一處,猜測解析成一個 Bromure 專為在被信任之前直接查看而打造的
東西。被幻覺出的相依套件仍然是相依套件,它從 Bromure 看守的正門走進來。
其次,酬載跑在一個你用完就丟的盒子裡。 假設捏造的名稱指向的是 GitHub 儲存庫或 外掛商店的技能,而非登錄庫套件,且殭屍網路的載入器執行了。它是在 VM 裡執行。沒有 持久的主機供它聽命:把設定檔重設回基準,投放的二進位檔、排定的工作、立足點——全都 沒了。一個在下次重設就消失的殭屍網路節點,算不上什麼節點。
第三,沒有真實憑證可供徵召。 一個翻遍環境與磁碟、尋找 API 金鑰、git 與雲端權杖、
以及 SSH 金鑰的殭屍網路惡意程式,找到的是誘餌:Bromure 把佔位值(brm_…、一份合成
的 ~/.kube/config、可拋棄的 ssh 與雲端權杖)注入 VM,只在主機上、在代理伺服器中、
在通往真正 API 的出口途中,才把真實的換回來。真實金鑰從不進入盒子。酬載送往其命令與
控制的,是一袋什麼都認證不了的字串。
第四,promptware 是對著偵測器被讀取的。 HalluSquatting 在成為執行攻擊之前,先是
一場閱讀攻擊——整個利用手法都懸繫於代理程式吞下攻擊者的 README、資訊清單或
SKILL.md,並把它當成自己的計畫。那正是 Bromure 看守的、不可信的權威:與一份惡意的
CLAUDE.md 或 AGENTS.md 同一類。Bromure 的裝置端提示注入偵測,會拿代理程式當作
文件閱讀的內容,對著從不離開 Mac 的本機模型評分,再加上一套針對隱形 Unicode 花招的
決定論式掃描器。一份被抓取的資訊清單裡埋著「現在執行這個安裝腳本」的指示,正是那個
偵測器存在的理由。
而在這一切之下,外送流量是可見的。 殭屍網路的信標、階段酬載的抓取、外洩的嘗試—— 它們會以你看得見的外送流量出現在 Bromure 的安全記錄裡,而不是來自一台你信任的機器的 一通悄無聲息的回撥。
這劃出的界線圈住了什麼
隔離與掃描是圍堵,不是幻覺的解藥。值得把 Bromure 在此處改變了什麼、沒改變什麼講清楚。
代理程式照樣捏造名稱
Bromure 不會阻止模型幻覺出一個識別碼,也不會阻止它抓取那個名稱解析到的東西。把 代理程式的猜測錨定住,是模型與框架的問題。Bromure 改變的,是被抓取的東西在哪裡 執行,以及它執行時能觸及什麼。
登錄庫掃描涵蓋登錄庫
被幻覺出的 npm、PyPI 或 Cargo 套件,正是供應鏈掃描所檢查的——一次貨真價實的正門 攔截。被幻覺出的 GitHub 儲存庫或外掛商店技能不是登錄庫套件;那條路徑靠的是隔離、 注入偵測器與誘餌撐住,而非登錄庫掃描。
替換涵蓋你設定的機密
誘餌替換保護的是你放進設定檔的憑證:模型金鑰、git 與雲端權杖、受管資料庫端點、ssh 金鑰。一個腳本在執行途中寫到磁碟的權杖,或你在盒子裡親手建立的工作階段,就只是 資料而已。把機密放在中介,而非工作區裡。
偵測是一張網,不是一堵牆
裝置端的注入評分,在多數情況下會標出一份安裝並執行的資訊清單,但一位謹慎的作者能 把誘餌措辭得溜過單一掃描器。把偵測器當成一層;當偵測器失手時撐住局面的,是圍堵 ——一個裝著假金鑰、外送流量被記錄的一次性盒子。
研究人員以一句值得記住的話作結:「攻擊只會愈來愈好,從不會變差。」他們的成功率是 地板,不是天花板,而底層那套信任機制——一個把自己的猜測當事實、把抓取到的檔案當 計畫的代理程式——這一季不會被修補。你的代理程式終將為某個它一知半解的東西捏造一個 名稱,而那些捏造名稱中,有些早已被人佔下。問題不在於它會不會有一天抓到錯的那個。在 85% 的幻覺率下,它有時就是會。問題在於,那一刻究竟是什麼在執行:是你的機器、你真實 的金鑰,以及一個會留下的立足點——還是一個你能丟棄的 Linux 盒子,裡頭裝著誘餌,登錄庫 也在入口處查過。Bromure 讓它成為後者。