227 個安裝指令出現在企業文件中,指向無人擁有的程式碼。

超過 100 個網站上的文件檔案引用了潛在危險的可執行內容,當許多 AI 代理程式存取時會自動安裝。數十家公司,其中一些是財星 500 強企業,已執行了概念驗證程式碼。至少有一個設定錯誤的網站正將訪客(無論是人類或 AI)導向實際的惡意軟體。

潛在危險的內容存在於 llms.txt 和 llms-full.txt 檔案中,這是網站提供機器可讀的網站內容摘要及其高層次結構的新興慣例。這些檔案相當於指示搜尋引擎如何索引網站內容的 robots.txt 標準。Google Lighthouse,一個協助網頁開發者的工具,有更多資訊。正確設定的 Cloudflare llms.txt 和 llms-full.txt 檔案在此處和此處。

以色列一家隱密新創公司的研究人員掃描了 6,214 個屬於國防承包商、財星 500 強和大型科技公司的活躍網域。在他們找到的 8,265 個 llms.txt 和 llms-full.txt 檔案中(許多網站同時託管 llms.txt 和 llms-full.txt),有 120 個檔案(每個都在不同的網站上)指向一個或多個未註冊的程式碼套件或網域名稱。為了測試當 AI 代理程式處理這些檔案時會發生什麼事,研究人員註冊了其中幾個無人認領的名稱,並託管了導致任何執行它們的機器連線到其伺服器的套件。在一小時內,研究人員就收到了來自一家財星 500 強公司的回撥回應。隨著時間推移,他們又收到了幾十個,有些來自更多財星 500 強公司,有些來自新創公司。他們的回撥信標還記錄了產生每個安裝的父程序鏈,最終揭示了包括 Claude、OpenAI 的 Codex 和 Nous Research 的 Hermes 在內的編碼代理程式參與其中。截至出版時間,Anthropic、OpenAI 和 Nous Research 均未回應置評請求。

「信任模型已經崩潰了,」研究人員之一 Alon Hertz 在一次訪談中寫道。「代理程式將供應商文件視為事實真相,並且不質疑它們——監督它們的人類也是如此。代理程式式 AI 的使用正在爆炸式增長,代理程式正在滲透到每個層面——SaaS、雲端、端點。隨著它們的增多,供應鏈的表面積也隨之增加,而今天的防護措施無法涵蓋它。」

這些檔案之所以設定錯誤,是因為它們列出了來自 PyPI、npm 等註冊中心的非現有套件,以及如何安裝它們的說明。例如,一個檔案包含提示「安裝:pip install [研究人員要求已編輯]。」在另一個檔案中,則是:「npm install [已編輯]。」由於套件名稱未註冊,攻擊者可以註冊一個並用它來託管勒索軟體或任何其他類型的有害套件。當有權限執行 shell 命令的編碼代理程式將該檔案視為權威設定文件時,就會發生漏洞。一些 AI 代理程式會下載並執行該套件。在其他情況下,LLM 檔案指向不存在的網域名稱。在一個案例中,它是:「作為編寫 [已編輯] 應用程式整合測試的範例,您可以使用 [Citrus] 測試框架。」攻擊者隨後可以註冊該網站並在其上植入惡意指令。

正如研究人員的概念驗證所示,編碼代理程式確實這樣做了,包括一些在世界上一些最強大的公司內部運行的代理程式。這遠非理論上的威脅,至少已經有一項實際攻擊正在利用這種混淆。研究人員在合法網站 clerk.com 上發現了一個託管的 LLM 檔案。它包含文字:「npx clerk-next-fix-auth-protection。」與傳統的安裝命令不同,npx 可以將套件提取到 npm 的快取中,並執行其暴露的二進位檔案,而無需將其添加到專案的依賴項清單中。研究人員很快發現有人已經佔用了這個曾經空的槽位,並用它來託管實際的惡意軟體。

Clerk 此後已解決了該問題。該公司還指出,如果代理程式已經安裝了 @clerk/eslint-plugin 套件中包含的二進位檔案,則沒有威脅。否則,將會安裝惡意套件。目前尚不清楚這種混淆是否導致了實際感染。

新發現的威脅只是對 AI 基本限制的最新提醒。LLM 無法可靠地區分直接輸入提示中的真實使用者指令與它們在不受信任的第三方來源上找到的內容。除非有精心建構的防護措施逐一設置,否則模型在檢索內容中遇到的指令與使用者輸入的指令一樣容易被執行。這種迄今為止無法解決的缺陷會導致提示注入。

「代理程式無法區分頁面和命令,」研究人員週四寫道。「它讀取的一切都是輸入,而每一個輸入都可能是一個指令。這意味著代理程式現在被連接起來消耗的整個已發布數據庫已經悄悄地成為一個執行表面——而其中幾乎沒有一個帶有我們應用於實際程式碼的完整性保證。」

研究人員發現的 120 個設定錯誤的檔案包含 227 個安裝非現有套件或查看無人認領網域的指令。目前尚不清楚這些錯誤條目是如何出現的。在許多情況下,這些條目早於 AI 時代,最初被包含在網站上的非 LLM 檔案中。這表明這些錯誤條目是由人類手動生成的。研究人員懷疑其他條目是由 AI 創建的,這些 AI 要麼產生幻覺,要麼就像瀏覽其檔案的 AI 代理程式一樣,無法區分合法和非法的指令。

在週四的貼文中,研究人員詳細說明:

安全控制…可能無法捕捉到這一點,因為系統依賴的每一個信號都指向錯誤的方向。

當 AI 代理程式遇到 llms.txt 檔案時,它看到的是一個通過 HTTPS 服務的檔案,位於公司官方網域上,採用標準化格式供 AI 使用,由公司本身或其信任的合作夥伴發布。

代理程式沒有理由質疑其中任何一個。該檔案就是權威——這就是它的全部目的。因此,當檔案指示 pip install internal-tool 時,代理程式不會停下來檢查 internal-tool 是否真正屬於該公司。它不會驗證 PyPI 上的命名空間。它不會注意到文件連結指向一個三個月前過期的網域。它只會按照檔案的指示操作。

信任鏈也是傳遞性的。llms.txt 不必位於財星 500 強公司自己的網站上。代理程式從受信任的第三方提取上下文——合作夥伴的文件、供應商的 SDK 參考、社群專案的設定指南。如果代理程式信任該第三方,而該第三方檔案指向一個無人認領的套件,則鏈條的工作方式相同。

端點偵測也沒有反應。對於任何 EDR 或代理伺服器來說,這看起來都像是一個開發人員正在運行一個合法的套件管理器:來自 pypi.org 的 pip install——這是每個公司代理伺服器都已允許的網域——並將公司故意安裝的編碼代理程式作為父程序。沒有異常。沒有警報。失敗發生在上游,在指令和執行之間的差距中。端點可能沒有機會,因為它從未問對問題。

這項研究有力地證明,在 AI 時代,數據和可執行程式碼之間曾經清晰的界線正在消失。代理程式可以處理的任何內容都可能是一個指令,如果它有權限運行命令,它可能會對其採取行動。

「Clerk 的案例是最清晰的證明,」研究人員寫道。「該命令看起來就像供應商會發布的東西——因為它在供應商自己的指令檔案中。唯一缺少的是註冊中心中的名稱。信任的每一個層級都完好無損,除了那個沒人想到要檢查的層級。」

這個新暴露問題的來源與提示注入的根本原因相同。然而,這種較新的弱點更為廣泛。

「在提示注入中,有人故意植入惡意指令,」Hertz 解釋道。「在這裡,指令本身可能完全無害,來自合法來源——一家真實公司的自有文件——在編寫時沒有惡意行為者參與。危險來自後期,當它指向的套件或網域被放棄,而其他人聲稱它時。」

這意味著問題遠不止於託管在網站上的 llms.txt 和 llms-full.txt 檔案。無論是隱含還是明確的指令,幾乎存在於代理程式遍歷的每個地方。這種瓦解的界限,加上大型科技公司將 AI 推向各處的衝動,並不能讓人對未來感到溫暖和模糊的感覺,但肯定會讓安全人員(或取代他們的人工智慧代理程式)忙碌起來。