AIDEFEND in Action AIA-0095 實際事件 發布於 AIA: 2026年10月1日

MemTensor sckit 供應鏈攻擊:OpenClaw 記憶外掛在啟動與記憶擷取時執行惡意程式

StepSecurity 揭露未經授權發布的 @memtensor/memos-cloud-openclaw-plugin 0.1.21、0.1.23 與 0.1.25 版本夾帶了原生 sckit 執行檔形式的惡意酬載。該惡意程式利用的是外掛正常的生命週期而非 npm 安裝階段(install/postinstall 指令碼):當 OpenClaw Gateway 啟動或執行記憶擷取(memory recall)時,launchStageZero 即會被呼叫;記憶擷取時的掛鉤(hook)還會將當前的使用者提示詞與繼承的父程序環境變數傳遞給獨立運作的子程序。惡意套件內容與啟動行為已獲技術核實,但公開鑑識尚未證實機密已成功對外傳輸或存在自動蠕蟲擴散。

Malicious PackagesPackage VettingAI Supply ChainSoftware Dependencies
13 項對應的 AIDEFEND 防禦手法
來源: Sckit Supply Chain Worm Hits MemTensor npm & PyPi scopes 
作者: Rohan Prabhu
原文發布: 2026年9月23日

威脅分析

遭植入惡意內容的 npm 套件,利用的是 OpenClaw 記憶外掛在執行時呼叫的掛鉤。兩條路徑都需要先載入受影響的外掛;之後 gateway 啟動或擷取記憶,任一事件都能讓同一個原生惡意程式啟動,不需要兩者依序發生。因此,停用 npm 安裝指令,仍無法阻止這些執行期掛鉤。

  1. 未授權的 npm 版本 0.1.21、0.1.23、0.1.25 夾帶惡意程式碼,沒有對應的儲存庫提交或標籤。
  2. OpenClaw 載入受影響的外掛。受檢套件沒有 install、preinstall 或 postinstall 指令。
  3. 下列任一生命週期掛鉤都能呼叫 launchStageZero:
    • gateway 啟動時,註冊流程直接呼叫,不傳入提示。
    • 每次擷取記憶時,掛鉤傳入目前使用者提示;呼叫發生在後續的短提示檢查之前。
  4. 每次呼叫都可能以背景子程序啟動內附的各平台執行檔。stageZeroEnvironment 複製父程序環境並加入 SCKIT_EVENT_TEXT;啟動時這個值為空字串,擷取記憶時則是目前的提示。

StepSecurity 已重現實際接入的 JavaScript 路徑,並分析惡意程式的靜態跡象。另一個 collectStageZero 輔助函式雖然會處理 NPM_TOKEN,但沒有接入所公開的 index.js。對外傳送是否成功、原生程式是否避免重複執行,以及是否會自動蠕蟲式擴散,都仍未獲驗證。

適用的 13 項 AIDEFEND 防禦手法

AID-H-028.006
Client Distribution, Plugin & Update Integrity Verification
極高
OpenClaw 外掛啟用前必須強制通過具備數位簽章的允許清單,該清單嚴格綁定每款核准外掛的發布者、確切版本與 SHA-256 雜湊值;在所有待載入外掛通過比對前,外掛程式碼一律禁止執行。@memtensor/memos-cloud-openclaw-plugin 的三個未授權發布版本皆無經核准的雜湊值,因此在 Gateway 啟動時註冊程序與 launchStageZero 即會被攔截。此項防禦於外掛載入時施行而非 npm 安裝階段,因此對不含安裝指令碼的套件同樣具備防護效果。OpenClaw 內建的 plugins.allow 僅依 ID 進行比對而非雜湊值,因此此為部署方於啟動前針對外掛目錄執行的存取把關機制(即指引所述之主機專用配接器),並非現成開箱設定。
AID-H-003.001
Software Dependency & Package Security
高
在 Gateway 的 lockfile 鎖定檔中將記憶外掛固定於精確版本與完整性雜湊值,拒絕使用浮動版本範圍(floating ranges)或自動更新機制。在固定版本後,除非經過正式審查變更 lockfile,否則 0.1.21、0.1.23 與 0.1.25 的套件內容就不會被解析載入;惡意版本因此不會透過例行重新安裝或重新部署進入 Gateway 啟動流程。此控制適用於透過 lockfile 管理外掛之場景(例如容器映像檔封裝),不適用於個別筆電上的臨時 openclaw plugins install 操作。
AID-I-002.002
Secure External AI Service Connectivity
高
將 OpenClaw Gateway 主機置於預設拒絕的輸出網路允許清單保護下,僅開放連線至模型提供商、MemOS 雲端 API 及部署實際使用的通訊平台端點。由於外掛運行於 Gateway 程序內部且隨附的原生子程序直接繼承主機網路,因此阻斷惡意程式組態中所列 skyleen.fr 收集端點的關鍵在於此項主機層級防線,而非外掛本身的沙箱;StepSecurity 自家建議的 Harden-Runner 實踐的亦為相同防禦概念。
AID-E-003.003
Confirmed Malicious Code & Persistence Eviction
高
將三個惡意外掛版本自所有權威來源徹底移除,包括 lockfile、內部鏡像庫與本機外掛目錄,絕不可僅發布乾淨的新版本便草率結案;載入時必須拒絕其雜湊值,並透過雜湊比對確認無任何 Gateway 仍可能載入此類版本。僅檢查檔名是否刪除並不足夠,因其惡意酬載為 lib/ 目錄下的平台專屬二進位執行檔,並非套件本體名稱。
AID-E-001.001
Root & Long-Lived Credential Object Eviction
高
獨立盤點受影響 Gateway 帳號或背景子程序可取得的根憑證與長效憑證,包括環境變數及可讀的憑證檔案。對確認暴露或無法排除暴露的確切憑證物件,在簽發端撤銷並實測舊憑證被拒絕。公開跡證不能證明每項憑證都已被讀取或傳出;已簽發 JWT 與工作階段須另依 AID-E-001.002 審查撤銷,根金鑰輪替本身不會封閉這些路徑。
AID-H-023
Publisher Integrity & Workflow Hardening
中
在受管套件引入流程中,要求具備經驗證的 npm 來源與建置證明(provenance attestation),並綁定核准的發布者身分、建置工作流程及精確套件雜湊值。缺少 Git commit 或 tag 屬於審查風險訊號,不能直接推論缺少 npm 來源證明;若攻擊者控制了合法建置管線,亦可能產出有效證明。此防線唯有在 MemTensor 正式版本持續發布證明且組織嚴格阻絕未驗證更新時方能發揮實效。
AID-H-022.002
Pre-Merge Dependency Change Risk Review
中
若 OpenClaw 外掛是透過受管 lockfile 與 Pull Request 流程管理,每次版本變更在合併前皆須通過依賴套件安全審查。比對精確的 npm tarball 套件內容、維護者身分、原始碼與發布證據,並重點標記新引入的原生執行檔;凡必要證明資料缺漏即嚴格拒絕合併。臨時執行 openclaw plugins install 無法涵蓋該 PR 閘道;僅依據原始碼 tag 無法確保發布成品的完整性。
AID-M-001.003
Agentic Skill & Instruction Asset Inventory
中
以明確設定的受管 OpenClaw 收集程序找出完整外掛套件目錄,記錄所有成員雜湊,再與經驗證的資產清冊、負責人及掃描紀錄核對。版本字串或單一入口檔雜湊,不是完整套件證據。無法讀取或未量測的目錄仍未完成驗證;將確切受影響清單交給載入審查或清除控制負責人,資產盤點本身不會核准載入,也不能證明處置完成。
AID-H-028.002
Client Credential Secure Storage & Lifecycle Management
中
將 Gateway 機密資訊自明文環境變數與組態檔移出,存放於受管密碼保管庫或平台 Keychain 中,僅在獲授權元件需要使用時取用。此舉可大幅減少經由 stageZeroEnvironment 複製至子程序的機密資料,但若惡意外掛已於 Gateway 同一程序內運行,仍可能以該程序身分呼叫憑證 API。此外,此措施無法防護使用者可讀取之本機檔案(如 ~/.aws/credentials 或 ~/.npmrc)。
AID-I-001.005
Safe Ephemeral Detonation & Attested Raw Observation Reporting
中
在准許載入前,於不含憑證、預設拒絕的分析環境執行確切外掛內容,測試須涵蓋 Gateway 啟動與記憶擷取。獨立驗證程序啟動、網路遙測、完整測試情境與環境銷毀,並將背景子程序列為行為異常。讀取 process.env 可能只存取記憶體而不產生系統呼叫,觀察環境變數讀取須另行加入量測,不能由通用 Falco 規則推定。不支援的觀測仍未完成驗證;簽章報告是交給另一道載入閘道的證據,不是核准。
AID-D-011.004
Non-Human Identity & Delegated Token Abuse Detection
中
對能獨立驗證 token 生命週期與資源使用事件的簽發端,將確切暴露憑證清單與未核准的 client、資源、scope 或撤銷後請求比對。使用前須確認 AWS、GitHub 或供應商事件的欄位與涵蓋範圍。npm 公開發布資料無法辨識確切 token,因此該簽發端的 token 使用涵蓋範圍仍屬未確認,不能由發布者名稱推定。這能提供憑證遭濫用的證據;沒有警示不能證明資料未外洩。
AID-E-002
AI Runtime Process, Lease & Pod Eviction
中
終止已載入惡意版本的 Gateway 程序及每個背景 sckit 子程序,以確切 PID、啟動時間與執行檔雜湊辨識,並獨立確認已停止。每次記憶擷取都可能再啟動執行個體;只移除套件(AID-E-003.003)不會終止已執行的子程序。
AID-I-001.002
MicroVM & Low-Level Sandboxing
中
把整個 OpenClaw gateway、外掛載入器與背景子程序都放進經驗證的外層微型虛擬機或使用者空間核心沙箱,再加上作業系統權限限制;不要掛載開發者家目錄中的憑證、主機通訊端或無關的憑證目錄。這樣才能限制惡意程式設定檔所列的憑證檔案掃描範圍。隔離必須在載入外掛前就生效,並逐一驗證子程序與掛載目錄;只隔離模型要求執行的工具,會漏掉外掛生命週期掛鉤。同一個 gateway 內仍需使用的提示與供應商金鑰依然可能暴露,所以這項控制只能限制影響,不能證明套件安全,也不能據此認定已發生外洩。

身為資安防禦者,我們應該這麼做

  • 清查裝有 @memtensor/memos-cloud-openclaw-plugin 0.1.21、0.1.23 與 0.1.25 的主機;停止載入這些版本並獨立終止脫離的子程序。全面盤點 Gateway 帳號可接觸的憑證,針對確認暴露或調查後仍無法排除暴露的確切憑證,在簽發端撤銷;公開鑑識未能證實每項憑證皆已外洩。
  • 後續引入之替代套件必須強制要求符合精確版本與雜湊值檢查。僅在合法發布者能提供可驗證證明的情況下要求 npm provenance;同時須審查套件內容與新增的原生二進位程式。
  • 最大限度限縮外掛可見的機密資訊,實施對外連線預設拒絕,並針對外掛啟動與記憶擷取時的掛鉤(hook)進行測試,不可僅測試 npm 安裝過程。

1 個額外的防禦考量

證據與部署界線

觀察到的惡意套件發布屬於確認之資安事件,然而既有的成品鑑識追蹤無法證明哪些受害者的機密已被成功外傳。
建議做法: 立即清查所有部署環境中的 @memtensor/memos-cloud-openclaw-plugin 0.1.21、0.1.23 與 0.1.25;停止載入上述版本、強制終止獨立子程序,並將 Gateway 使用者有權讀取的所有憑證(包括環境變數與 ~/.aws/credentials、~/.npmrc 等檔案)皆視為已暴露並執行處置。

結論

AIDEFEND  指出本案的關鍵防禦位置:引入受管套件時的審查、外掛啟用前的精確雜湊值驗證,以及 Gateway 對外連線管制。來源證明僅在發布者主動提供且防禦方落實驗證時具備防護力;事件後的憑證撤銷與輪替必須緊扣實際暴露或面臨外洩風險的資產清冊。

最後更新: