技術

Claude自己安裝npm套件,而其中一個就可能悄悄帶走你的檔案

Susan Hill

Claude的Computer Use功能能做一般聊天機器人做不到的事。它在你的電腦上開一個終端機,替你安裝軟體,其中包括直接從全球最大的開源程式碼倉庫npm拉下來的套件。誘惑顯而易見,因為它把「幫我把這個專案搭起來」縮成了一句話。風險也藏在同一句話裡,因為一個套件抵達的那一刻,npm就能執行這個套件隨身帶來的啟動程式碼,而如今扣下扳機的,是一個自主的代理。

對任何讓AI代理寫程式或跑程式的人來說,而這是一個由開發者、愛好者和沒有技術背景的好奇者迅速壯大的族群,現實的問題很直白。如果Claude安裝了一個你從未看過的套件,而這個套件就是為了在落地那一刻複製你的檔案而造的,本該由誰來攔下它?一位資安研究者最近的影片正好走了一遍這個情境,展示一個設了陷阱的套件在一次例行安裝中讀取本機檔案,而AI毫不猶豫地把這次安裝做完了。

這套機制並不新,而這恰恰是它嚴重之處。npm的套件可以宣告安裝指令稿,也就是一旦某個套件被加進專案就自動執行的小指令,早在它的任何一行被刻意使用之前就先跑了。這是有據可查的行為,不是瑕疵。它讓正派的工具得以自我編譯或準備執行環境。它同時意味著任何套件都能在安裝時以和你相同的權限在你的機器上執行程式碼,而資安團隊為此已經警告了許多年。

世界被狠狠提醒了一次賭注有多大,是在攻擊者奪取了Axios維護者帳號的時候。Axios是一個每週被下載數千萬次的網路函式庫,攻擊者往裡塞進一個惡意相依套件,在開發者的機器上裝上了一個遠端存取木馬。他們根本沒碰Axios的真實程式碼,活兒是安裝指令稿幹的。而Axios恰好也是Claude Code自身內部的一塊磚,旁邊還有數不清的其他應用程式,這說明你所信任的工具,和它在背後悄悄拉進來的程式碼之間,距離有多近。

這段示範替這幅熟悉的畫面添上的,是代理。親手執行安裝的人至少還能停一下,讀一讀套件名稱,察覺它拼錯了或者是剛剛才發布的,然後退回去。一個按模糊指令行事的AI代理沒有這種反射。它把自己判斷需要的東西裝上。而且由於Computer Use還會讀螢幕、移動游標、敲鍵盤,一個被下了毒的相依套件不會被困在程式碼編輯器裡。它在整個桌面上來去自如。

值得把它是什麼、不是什麼說清楚。它不是Claude獨有的隱藏後門,也不是模型被騙著繞過自身規則的證據。它是把安裝軟體的權力交給任何一個自主程式,再疊加上一個十多年來預設就會執行安裝程式碼的倉庫,所得到的可預料結果。把Claude換成任何一個擁有相同權限的別的程式設計代理,畫面一模一樣。危險住在自主性和倉庫裡,而不在某一家公司的聊天機器人裡。

Anthropic其實一直在朝相反的方向使力。公司不久前為自己的程式設計工具推出了一個沙箱,把代理同系統其餘部分隔開,限制它能讀哪些檔案、能搆到哪些伺服器,並把支撐它的隔離工具包作為開源發布,供其他開發者使用。其中的道理,正是這段示範所揭開的。一個搆不到你SSH金鑰的代理沒辦法把它們洩漏出去,一個聯絡不上陌生伺服器的代理也沒辦法把你的檔案送到任何地方。公司稱,這些邊界把它向使用者跳出的權限詢問減少了大約百分之八十四。這一點很要緊,因為一個事事都問的工具,很快就會把人訓練成一律按同意。

對真正在用這些工具的人來說,防禦既乏味又有效。把代理放進沙箱、容器或者一次性的虛擬機裡執行,讓一個壞套件能搆到的最糟的地方,也不過是一個可以丟棄的環境。在工作流程允許的地方關掉自動安裝指令稿,有幾個較新的套件管理器已經預設這麼做了。把憑證、金鑰和個人檔案,放在代理可以為所欲為的那台機器之外。並且,要用對待「打開這封郵件的附件」的那份警惕,去對待「幫我把這個裝上」,因為骨子裡它離前者比看上去更近。

示範裡那個具體的套件,是一名研究者的證明,而不是一場真實的爆發,也沒有跡象顯示它觸及了真實使用者。不會停下來的,是它背後的那套模式。靠代理寫程式正在以快過那些本該讓它安全的習慣的速度變成預設,而這些代理所倚靠的倉庫,從來不是為一個敲下安裝指令的不是人的世界而建的。在那道裂縫闔上之前,軟體安全裡最古老的那條規矩如今指向了一類新的使用者:你的代理裝下什麼,就會執行什麼,所以在放它開始之前,先決定好它可以碰什麼。

討論

共有 0 則留言。