跳到主要內容
CAMP 04找觀念›裝了一個 AI 套件,怎麼知道是誰發布的?
第五架構:防禦控制與 Git 安全網|第 13 篇

裝了一個 AI 套件,怎麼知道是誰發布的?

套件被下毒,被換掉的常常是你沒審過的下一版。要問的是誰有權發布新版本、你裝到的是不是官方發的:離開的貢獻者沒收回發布權、名字仿冒官方、先發十幾個正常版本再加後門,三種都發生過。裝之前看發布者和來源證明,裝之後鎖版本、記下它碰得到哪些金鑰。

2026-10-22 發布 · 2026-10-25 更新 · 作者整理:Lucas

假設你的團隊上個月替內部的 AI 助理裝了一個開源套件,用來接資料庫和寄信。今天早上資安同事傳來一則新聞:這個套件有幾個版本被植入惡意程式,裝到的電腦要當成已經被入侵。你打開專案一看,套件確實在,版本號你不確定,也想不起來當初是誰裝的。

大家的第一個反應多半是:「我們有審過程式碼。」可是這類事件裡,被換掉的常常是你沒審過的下一版。要查的是兩件事:誰有權發布新版本,以及你裝到的那一份到底是不是官方發的。

審外掛和技能的內容,看它會執行什麼、會碰哪些檔案,在別人的技能就是別人的程式:裝之前先看那篇講過。這篇往上游看一層,談發布權和套件來源。本文談資安做法,不構成法律意見;出事後要不要通報、責任怎麼分,請問公司法務。

三個事件,三種發布權出問題的方式

第一種,人離開了,權限還在。2026 年 6 月,AI 代理框架 Mastra 在 npm 上有 140 多個套件被發布了帶毒的新版本。Microsoft 說入口是一個維護者帳號被接管,那個帳號有整個 Mastra 套件群的發布權。SafeDep 的調查寫得更細:那是一位真實的前貢獻者,他的發布權從來沒有被收回;npm 也不會因為帳號很久沒動就自動撤掉權限。套件本身的程式一行沒改,每個套件只多了一個依賴 easy-day-js,名字在模仿熱門的日期套件 dayjs,安裝時就會下載並執行竊取加密貨幣的遠端控制程式。攻擊者前一天先發了一個乾淨的 easy-day-js,到大量重新發布 Mastra 套件前幾分鐘,才把它換成惡意版。

SafeDep 另外指出:Mastra 的正式版都是從自動化流程發布,附有來源證明,攻擊者用個人權杖發的版本沒有這份證明。可是專案沒有規定一定要有,所以照樣發得出去。SafeDep 的判斷是,安裝時要求驗證來源證明的話,這一波的每個套件都會被擋下來。

第二種,名字是假的。2025 年 9 月,Postmark 官方發公告:npm 上一個叫 postmark-mcp 的套件冒用他們的名字,跟官方完全無關,Postmark 在這之前也沒有在 npm 發過自己的 MCP 伺服器。攻擊者先發了 15 個版本累積信任,到 1.0.16 版才加上後門,把經過它的信件偷偷密件副本寄到外部伺服器。之前一直用得好好的,說明不了下一版。

第三種,惡意程式叫你電腦上的 AI 幫它找金鑰。2025 年 8 月 26 日,建置工具 Nx 在 npm 上出現幾個惡意版本,安裝後自動執行的腳本會用電腦上已經裝好的 AI 命令列工具(包括 Claude、Gemini、Q),帶著略過權限確認之類的危險參數,叫它們去翻檔案、找權杖和金鑰。Wiz 說這招在數百個案例裡成功,有些時候 AI 廠商的防護有攔下來。事後查出的源頭,是 Nx 專案自己一個自動化流程的設定有漏洞,讓外人能從合併請求(pull request)的標題注入指令。BleepingComputer 引述 Wiz 的事後評估:三個階段合計 2,180 個帳號、7,200 個儲存庫受影響,這個數字不全是 AI 命令列那一段造成的。

我的判斷是,三件事都有人的部分:權限沒人收、名字沒人核、流程設定沒人檢查。AI 在第三件裡是被借去用的工具。

 要裝一個套件或外掛
        │
        ▼
 發布者是官方嗎?(官方文件有列)
   ├─ 否/查不到 → 先別裝
   ▼ 是
 這一版的發布者、來源證明跟前幾版一樣嗎?
   ├─ 不一樣 → 暫停,先查
   ▼ 一樣
 鎖定版本,用不自動執行腳本的方式安裝
        │
        ▼
 記下:誰裝的、哪一版、它碰得到哪些金鑰
        │
        ▼
 出事公告 → 照清單退版本、換金鑰

裝之前、裝之後檢查表

時間點檢查什麼怎麼看沒過的話
裝之前發布者是不是官方從官方網站或官方文件點進套件頁,不從搜尋結果挑名字最像的官方文件沒列的,當作冒牌貨
裝之前名字有沒有拼得很像跟官方名稱逐字比,多一個字母、多一個連字號都算不裝
裝之前這一版的發布方式跟前幾版一樣嗎看套件頁的發布者與來源證明,跟前幾版比發布者換人或證明消失,先暫停
裝之前安裝時會不會自動跑腳本請 AI 讀套件設定裡的安裝後腳本,只讀不執行用不執行腳本的方式安裝,或不裝
裝之後版本有沒有鎖住鎖定版本的檔案有進版本控制,不設定「永遠抓最新」補上鎖定,每次更新由人看過
裝之後誰裝的、裝在哪幾台一份清單:套件、版本、安裝人、機器出事時只能全部重灌
裝之後它碰得到哪些金鑰同一份清單加一欄出事時不知道要換哪幾把
你自己也發布套件時離開的人還有沒有發布權定期看一次維護者名單當天移除
你自己也發布套件時正式版是不是只從自動化流程發要求來源證明,沒有證明的版本不收一個人的權杖就能發新版

作者整理,非官方。

表裡最容易被跳過的是「它碰得到哪些金鑰」那一欄。三個事件的善後建議都繞著這件事:SafeDep 建議 6 月 16 日之後裝過受影響版本的,整台電腦當作已被入侵,退回事件前的版本,換掉它碰得到的雲端金鑰、AI 服務金鑰和加密貨幣錢包;Postmark 建議立刻移除、檢查寄信紀錄,並考慮更換可能透過信件寄出的密碼;Microsoft 建議鎖定已知安全的版本,安裝時加上不執行安裝後腳本的參數。清單上沒有這一欄,出事那天就只能每一把都換。

AI 命令列工具也要算進「它碰得到什麼」。Nx 那次被借用的,就是開了略過權限確認的 AI 工具。平常用來工作的電腦,別讓它長期處在略過確認的狀態,這部分在按到煩了就勾「一律允許」,你簽了什麼?那篇有分級。

動手做

裝任何新套件或外掛之前,把它的套件頁網址和設定檔交給 AI,只讀不裝:

我準備安裝下面這個套件(或 MCP 伺服器、外掛)。請只閱讀,不要安裝、不要執行任何檔案。
請用白話回報:
1. 發布者:套件頁上的發布者是誰?跟官方網站或官方文件列的名稱一字不差嗎?官方文件有沒有提到這個套件?
2. 名字:有沒有跟某個知名套件只差一兩個字元?
3. 版本歷史:最近一版的發布者、有沒有來源證明,跟前幾版比有沒有改變?最近有沒有突然新增的依賴?
4. 安裝時會自動執行的東西:設定檔裡有沒有安裝前、安裝後腳本,它們做什麼?
5. 它需要哪些金鑰或權杖才能運作?
看不懂或可疑的地方,列出檔名和那一段原文。
套件網址與設定檔:(貼上)

團隊自己有發布套件或技能的話,今天就可以打開維護者名單,看看上面有沒有已經離開的人。

站內延伸

來源: Microsoft Threat Intelligence:Inside the Mastra npm supply chain compromise(2026-06-17,06-19 更新;140+ 套件、維護者帳號被接管且有整個套件群的發布權、easy-day-js 仿冒 dayjs、建議鎖定已知安全版本與不執行安裝後腳本);SafeDep:Mastra npm scope takeover(2026-06-17;前貢獻者發布權從未收回、npm 不因閒置撤權、前一天先發乾淨版本、正式版附來源證明但未強制、要求驗證即可擋下、善後建議;歸因未確認);SecurityWeek(2026-06-22;套件數與時間窗各家寫法不同,本文只取「140 多個」);Postmark 官方公告(2025-09-25;冒名、此前未在 npm 發布、15 個版本後於 1.0.16 加後門密件副本、移除與檢查紀錄建議、考慮更換密碼);Wiz:s1ngularity(2025-08-27,08-29 更新;2025-08-26 惡意 Nx 版本、利用 AI 命令列工具與危險參數、數百個案例成功且防護有時攔下、源頭為自動化流程設定漏洞);BleepingComputer(2025-09-06;引 Wiz 事後評估三階段合計帳號與儲存庫數)。檢查表與流程圖為作者整理。

← 看更多找觀念文章
取得 AI 實戰工具與更新

之後會不定期整理:新方法、指令包(Prompt Pack)、Checklist 與模板。免費、無廣告;送出後會收到一封確認信,點了連結才算訂閱成功,之後每封信都附一鍵退訂。