
sckit:MemTensor 的 AI 記憶套件遭植入後門,以竊取代理程式憑證與提示詞
- Orca新OrcaCyber: MiMo V2.6 Flash Abliterated2026-10-26$0.80 / $1.60 每百萬 tokens · 109 tok/s
- Moonshot新MoonshotAI: Kimi K3.1 Pro2026-10-2455智能
- Orca新OrcaCyber: DeepSeek V4.1 Flash Abliterated2026-10-23$0.80 / $1.60 每百萬 tokens · 170 tok/s
- minimax新MiniMax: M3.1 Flash2026-10-1943智能
- Orca新Orca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 每百萬 tokens · 42 tok/s
- deepseek新DeepSeek: DeepSeek V4.1 Flash 10172026-10-1745智能
- DeepSeek新DeepSeek: DeepSeek V4.1 Flash2026-10-1740智能
- OrcaOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 每百萬 tokens · 130 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2952智能
- anthropicAnthropic: Claude Sonnet 5.52026-09-2856智能
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 每百萬 tokens · 926 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2238智能
- OpenAIOpenAI: GPT-6 Sol2026-09-2248智能
- AnthropicAnthropic: Claude Opus 5.52026-09-2258智能
- xAIGrok 4.72026-09-2146智能
- OrcaOrca: OrcaCyber Zero 1.02026-09-17$3.00 / $7.50 每百萬 tokens · 228 tok/s
- OrcaOrca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 每百萬 tokens · 1906 tok/s
- OpenAIOpenAI: GPT-6 Astra2026-09-0453智能77程式
- GoogleGoogle: Gemini 3.8 Flash2026-09-0241智能76程式
- AlibabaQwen: Qwen3.8 Max (0902)2026-09-0245智能76程式
MemTensor 的四個版本發布於 2026 年 9 月 23 日,且都帶有同一個去符號的 Go 植入程式;每個版本在仍上架時,都是其套件庫中的最新版本。npm 的 @memtensor/memos-cloud-openclaw-plugin 以 0.1.21 於 02:23 UTC、0.1.23 於 03:49,以及 0.1.25 於 04:36 發布;PyPI 的 MemoryOS 則以 2.0.34 於 05:25 發布。四個版本都夾帶了 sckit;它會在 OpenClaw 代理閘道開機時啟動,並在每次記憶召回時再次啟動——透過環境變數取得使用者的提示文字——而且在 Python 套件中,只要直接匯入 memos 模組就會啟動。接著它會掃描家目錄,尋找 npm、PyPI、GitHub、GitLab、AWS、Vault 與 SSH 機密,並將找到的內容傳送到 skyleen[.]fr 下的伺服器。Socket、StepSecurity、SafeDep 與 Aikido 當天各自獨立記錄了這起入侵事件,且它們都沒有回報有證據顯示該植入程式曾在真實主機上執行。Orca AI Incident Archive 完整收錄了這筆條目,以及 它記錄過的所有其他供應鏈事件;每筆紀錄都帶有自己的信心評級與危害狀態。
四次發佈,中間還夾著一份公開的錯誤報告
MemOS 是 MemTensor 的開源記憶框架,專為 LLM 代理程式而設;npm 套件則是連接器,讓 OpenClaw 代理程式執行環境能讀寫託管的記憶體服務。StepSecurity 指出,同一個套件也宣告了 Clawdbot 與 Moltbot 執行環境的整合點。Socket 測得該儲存庫約有 11,500 顆星與1,100 個分叉(於其發布報告時)。這樣的地位正是這起入侵事件引來四項獨立調查的原因:正如 StepSecurity 所言,這「把外掛程式放進一個經常處理使用者輸入、且可能繼承有價值憑證的處理程序之中」。暴露於風險中的人,就是安裝了任一套件的人——在自己機器上的開發者,以及只跑過測試套件的 CI 執行器與容器。
npm 版本序列是紀錄中最清楚的部分,因為套件登錄庫的時間戳是公開的,而且有數家公司各自獨立擷取到這些時間戳。Socket 的報告與 SafeDep 的時間軸在每一分鐘上都一致:0.1.21 於 02:23:04,0.1.22 於 03:45:44,0.1.23 於 03:49:20,0.1.24 於 04:33:30,以及 0.1.25 於 04:36:58。0.1.22 與 0.1.24 版是乾淨的——Socket 表示,除了版本字串之外,它們與 0.1.20 相符——而酬載在它們各自之後三分半鐘再度出現。
大小跳變就是線索。Socket 測得 0.1.20 解包後約為272 KB,而 0.1.21 則是43.6 MB,因為惡意版本打包了六個靜態連結的平台二進位檔,每個約 7.4 MB。PyPI 也顯示相同模式:根據 Socket 的資料,2.0.34 的 wheel 為19,201,772 位元組,而2.0.33則為 951,210 位元組。
在 UTC 04:17 —— 在乾淨的 0.1.24 出現前十六分鐘、惡意酬載以 0.1.25 再度出現前十九分鐘 —— 一位名為omeridel的 GitHub 使用者在該外掛儲存庫開啟了 issue #173,標題為「惡意版本 0.1.21 與 0.1.23 已發布至 npm——發布權杖似乎已遭外洩」。該 issue 指出,0.1.23 當時是最新的 tag,這兩個版本都不符合儲存庫中的任何 commit 或 tag,而最近一次合法 commit 的日期為 8 月 14 日。截至 2026 年 10 月 26 日,該 issue 仍處於開啟狀態,且維護者尚未留下任何評論。

sckit 在套件載入後會做什麼?
這兩個套件都沒有使用安裝掛鉤,這就是為什麼關於--ignore-scripts的常見建議並不適用。StepSecurity 對 npm 版本的分析描述了一個新檔案 lib/sckit.js,它匯出一個啟動器,該外掛程式既有的啟動與記憶召回程式碼會匯入並呼叫它。在啟動時,它會以 .sckit/<os>-<arch>/sckit 產生一個分離的stage0 --config64 程序,並附帶父程序的完整環境;在召回時,它也會做同樣的事,並透過名為 SCKIT_EVENT_TEXT 的環境變數傳遞剝除後的使用者提示。Socket 直白地說明了後果:因此該二進位檔在每次召回時都會再次執行。
PyPI 變體較短,且在實務上更難避開。Socket 發現 memos/log.py 會在日誌記錄設定完成時呼叫 memos/_stage0.py 內的觸發函式;有 149 個模組在模組層級呼叫記錄器,因此單純匯入 memos 模組就足以在每個行程中啟動一次酬載。StepSecurity 對同一個套件的分析完全是靜態的——它並未安裝、匯入、建置或執行該套件。
收集範圍是整個家目錄。SafeDep 將盤點根目錄列為 $HOME,並將目標檔案列為 .npmrc、.pypirc、.git-credentials、.netrc、id_rsa、id_ecdsa、id_ed25519、.vault-token、msal_token_cache、access_tokens.json 與 access_tokens.db,以及名稱包含 token、secret、password、API key 或 database URL 的環境變數,還有 GitHub、GitLab、npm、PyPI、Hugging Face、Slack、Stripe、AWS 與 SendGrid 的已識別權杖格式。這兩個套件的 OSV 記錄——npm 的 MAL-2026-16476 與 PyPI 的 MAL-2026-16475——描述了相同的檔案清單,並補充指出命令與控制協定使用 CBOR、X25519 金鑰交換與 XChaCha20-Poly1305,具備已簽署的租約以及在執行階段交付的模組——因此從未觀察到模組的內容,只觀察到會擷取它們的載入器。
有兩個細節決定了防禦者還能追回哪些東西。根據 OSV 紀錄,該二進位檔帶有名為 scheduleSelfDelete 與 deleteExecutable 的自我刪除常式,因此建議改為追查處理程序與網路痕跡,而不是檔案。而 0.1.25 新增了 lib/tls-trust.js,根據 StepSecurity 的說法,它會在精簡的 Linux 系統上把 SSL_CERT_FILE 設為一個內附的 145 張憑證授權單位檔案——這項修正旨在讓它自身的流量能在缺乏系統信任存放區的容器中運作。

發布管線就是進入的途徑
SafeDep 的重建是對初始存取最詳細的說明,且指向 GitHub Actions,而非遭竊的 registry 密碼。時間在 00:48 至 02:03 UTC 之間,一個以 Memtensor-AI 名義運作的 GitHub 帳號建立、推送並刪除了名為 sc/release-0.1.21-20260922-cloud 的分支,共五次。提交 9b97ec6 修改了工作流程腳本 .github/scripts/validate-release-confirmation.mjs,使其將 BASH_ENV 值附加到 $GITHUB_ENV,導致後續的非互動式 shell 步驟在執行自身命令前,先載入攻擊者提供的 sckit-publish-bridge.sh。該橋接程式檢查了套件名稱與發布步驟的 150 秒逾時,使用 NPM_TOKEN 或 NODE_AUTH_TOKEN 呼叫權杖收集器,刪除自身並以 1 退出——因此權杖已被取走後,發布才失敗。第一個惡意 npm 版本在最後一次分支推送後二十分鐘出現。
PyPI 路徑對另一條流程採用了相同的手法。SafeDep 報告指出,標籤 v2.0.34 指向不在 main 上的未簽署提交,而該提交 b52958f 以「MemTensor CI Review」的名義撰寫,加入了六個二進位檔、一個 Python 載入器,以及一個名為 sckit_poetry_build 的自訂建置後端。該後端將指向 _pypi_bridge.sh 的 BASH_ENV 寫入 $GITHUB_ENV;該橋接程式只在 twine 上傳包裝器內運作,從 skyleen[.]fr 主機取得已簽署的索引,以 Ed25519 實作驗證發射器,印出一行標記,取消設定上傳密碼,然後在未上傳任何內容的情況下結束。大約兩小時後,提交 41bf5c7 移除了該呼叫,訊息為「chore: allow native PyPI upload [skip ci]」,該標籤在十秒內被刪除並重新建立,而 PyPI 上傳在該之後 62 秒接著發生。SafeDep 將第一個提交解讀為權杖擷取執行,第二個則解讀為讓 MemTensor 自身工作流程以專案的真實權杖建置並發布惡意套件的執行。
並非每個說法在這一點上都一致。Socket 觀察到,這些 npm 發行版與較早的合法版本來自同一個 npm 帳號,且缺少 gitHead;Socket 將此解讀為它們並非由該專案的 CI 產生的跡象,並表示無法確認攻擊者是如何取得發布存取權的。SC Media 於 9 月 24 日報導 Socket 的發現時,也同樣推斷為帳號遭入侵。兩種說法都同意發布憑證是從發布流程中被取得,但對於 npm 產物本身是如何產生的則有分歧;沒有人公布工作流程日誌,因為 GitHub 的 Actions API 顯示 9 月 7 日之後沒有任何執行紀錄,而 SafeDep 推測這些紀錄已被刪除。Memtensor-AI 帳號最初是如何取得推送存取權的,在兩種說法中均不明;SafeDep 稱遭竊的帳號權杖很可能,但尚未證實。
已確立、推斷及不存在
該紀錄的信心等級為 A,且沒有爭議;這一點值得精確說明,因為確定性附著於已公布的內容,而非它所做的行為。
• 已確認:四項產物的內容,由 Socket、StepSecurity 與 SafeDep 的靜態分析重建;npm 發佈時間與 0.1.25 上的 latest 標籤;兩個生態系統中的檔案大小躍增;兩個儲存庫中的提交、標籤與分支歷史;skyleen[.]fr 基礎設施與活動識別碼 cloud-openclaw-semi-nuclear 及 memos-semi-nuclear;以及酬載的設定,根據 Socket 與 SafeDep,該設定將於 2026 年 10 月 22–23 日到期。
• 推論:該工具是在語言模型的協助下撰寫而成,SafeDep 直接這麼說並稱之為推論;以及被竊取的發佈權杖原本打算重複使用,這一點可從設定中的 channel 字串——「exact-ref-one-use-NPM_TOKEN」——獲得支持,但無法證實。
• 尚未確定:攻擊者是誰;sckit 的任何副本是否曾在沙箱外執行;是否有任何憑證離開主機;輸入 OpenClaw 代理的任何提示詞是否送達攻擊者;以及是否有任何下游套件被重新發佈。Socket 與 StepSecurity 皆以靜態方式進行分析,而 StepSecurity 表示在其分析中未觀察到任何程序執行、任何祕密傳輸、任何成功的資料外洩、任何工作流程安裝,也沒有進一步的套件發佈。
這個落差正是檔案庫把這起事件的實際危害標記為 false 的原因。這次暴露是真實且廣泛的——任何安裝了受影響版本的人都被要求將主機視為已遭入侵——但四家調查公司均未記錄到傷害,也就是可證明憑證已被使用或可證明系統已被觸及的那種傷害。
![A self-built HTML card headed 'What the record supports', titled 'Four investigating firms, no confirmed victim', subtitled 'Socket, StepSecurity, SafeDep and Aikido documented the same four artefacts on 23 September 2026'. The left column, headed 'Established by static analysis', lists: four malicious releases, npm 0.1.21, 0.1.23 and 0.1.25 and PyPI MemoryOS 2.0.34; one implant, the same stripped Go binary sckit in all four; the publish window 02:23 to 05:25 UTC with 0.1.25 tagged latest; package growth from 272 KB to 43.6 MB on npm and 951 KB to 19.2 MB for the PyPI wheel; six builds per package for Linux, macOS and Windows on amd64 and arm64; collection scoped to the whole home directory across registry, source-control, cloud, Vault and SSH secrets; exfiltration to servers under skyleen[.]fr; and OSV tracking as MAL-2026-16476 and MAL-2026-16475. The right column, headed 'Not established', lists: the attacker's identity; how Memtensor-AI obtained push access; whether any copy ever executed outside static analysis; whether a stolen secret reached the attacker; whether any prompt text was received; and whether any downstream package was republished. A footer reads 'Archive classification for this record: incident, severity high, confidence A, real harm false.' The OrcaRouter logo is composited in the bottom-right corner.](https://cms.orcarouter.ai/api/media/file/4-2644.png)
從未見其傳播的蠕蟲
這些二進位檔不只包含竊取程式。SafeDep 列出名為 recursivePublish、prepareRemoteNode、prepareRemotePython 與 prepareRemoteWorkflow 的函式,另外還有一個內嵌的 GitHub Actions 範本會在推送時觸發,以及能夠將名為 runtime-update.yml 的工作流程檔寫入植入程式可觸及的儲存庫。Socket 發現關於編碼套件資訊清單與安裝儲存庫檔案的字串,並評估這些二進位檔或許能夠使用竊取的套件登錄服務權杖重新發佈套件。
那是一種蠕蟲設計。它不是被觀察到實際運作的蠕蟲。StepSecurity 未發現任何證據顯示該邏輯曾被用於傳播,而 Cloud Security Alliance 於 9 月 25 日的研究筆記將這項能力解讀為有限的自我傳播潛力,而非已確認的蠕蟲行為。多家媒體將此案例描述為首個針對 AI 代理記憶體基礎設施的供應鏈蠕蟲;作為對設計的陳述,這樣的描述是合理的,但這些報導並不支持將其作為對實際發生情況的陳述。
之後有什麼改變?
各套件庫已於同日完成清理。於 2026 年 10 月 26 日查核時,npm 套件中繼資料的版本清單已不再列出 0.1.21、0.1.23 或 0.1.25,latest 標籤指向 0.1.24,而該套件的最後修改時間為 9 月 23 日 11:53 UTC。目前仍附著兩個不尋常的 dist-tag——clean-inverse-0-1-23 指向 0.1.22,clean-inverse-0-1-25 指向 0.1.24——反映出曾短暫打斷惡意版本的兩個乾淨版本。在 PyPI 上,MemoryOS 2.0.34 已消失,最新版本是 2.0.33,於 2026 年 9 月 3 日上傳;此後七週內,PyPI 沒有再發布任何新版本。
始終未變的是該專案的公開說法。該儲存庫未列出任何安全公告,事發當天 04:17 的 GitHub issue 仍處於開啟且無人回覆的狀態,而本文檢視的報導中,沒有任何一篇引用 MemTensor 或 OpenClaw 的聲明。兩個惡意套件都未附帶來源證明,SafeDep 指出,這移除了唯一能顯示這些產物是從非預期提交建構而成的訊號。
確實存在的應對措施是在偵測端:StepSecurity 已將 skyleen[.]fr 命令與控制網域加入其全球封鎖清單,而這兩個套件已在 OSV 中被追蹤為 MAL-2026-16476 與 MAL-2026-16475。
如果已安裝受影響的版本
Socket 的指引最嚴格也最簡單:只要載入或匯入任何列出的版本,就將該主機視為已遭入侵,包括僅執行過測試的 CI 執行器與容器。四家公司共同得出的具體步驟如下:
• 移除該套件並固定至乾淨版本——npm 0.1.20、PyPI 2.0.33。StepSecurity 警告,其分析並未建立乾淨的 PyPI 基準,而 SafeDep 與 SC Media 都指稱 2.0.33 是最後一個良好版本。
• 尋找行程命令列,因為該執行檔可能會自我刪除:sckit stage0 --config64,以及環境變數 SCKIT_EVENT_TEXT。
• 刪除狀態目錄 ~/.openclaw/.cache/runtime 與 ~/.memos/.cache/runtime,並檢查各儲存庫是否有非預期的 runtime-update.yml 工作流程或 .sckit/ 目錄。
• 在乾淨的機器上,輪替所有可從家目錄與行程環境存取的憑證:npm、PyPI、GitHub、GitLab、AWS、Vault、SSH、Hugging Face、Slack、Stripe 與 SendGrid,以及任何 .env 值。套件庫與版本控制權杖優先處理。
• 檢視你自己套件的發行版本,以防有人使用遭竊的發佈權杖來發布不是你撰寫的版本。
• 封鎖 skyleen[.]fr 及其子網域,並讀取可追溯至 9 月 23 日的出口日誌。
• 將任何在外掛程式啟用期間經過該外掛程式的提示詞或貼上的機密,一律視為已外洩。這是這起事件中與代理記憶體特別相關的部分:植入程式不需要擷取對話紀錄,因為每次召回時,對話紀錄都會被交給它。
