
sckit: MemTensorのAIメモリパッケージに、エージェントの認証情報とプロンプトを窃取するバックドアが仕込まれていた
- OrcaNEWOrcaCyber: MiMo V2.6 Flash Abliterated2026-10-26$0.80 / $1.60 100万トークンあたり · 109 tok/s
- MoonshotNEWMoonshotAI: Kimi K3.1 Pro2026-10-2455知能
- OrcaNEWOrcaCyber: DeepSeek V4.1 Flash Abliterated2026-10-23$0.80 / $1.60 100万トークンあたり · 170 tok/s
- minimaxNEWMiniMax: M3.1 Flash2026-10-1943知能
- OrcaNEWOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 100万トークンあたり · 42 tok/s
- deepseekNEWDeepSeek: DeepSeek V4.1 Flash 10172026-10-1745知能
- DeepSeekNEWDeepSeek: DeepSeek V4.1 Flash2026-10-1740知能
- OrcaOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 100万トークンあたり · 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 100万トークンあたり · 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 100万トークンあたり · 228 tok/s
- OrcaOrca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 100万トークンあたり · 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の4つのリリースは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に公開されました。4つすべてがsckitを同梱しており、これはOpenClawエージェントゲートウェイの起動時に起動し、メモリリコールのたびに、ユーザーのプロンプトテキストを環境変数で渡されて再起動し、Pythonパッケージではmemosモジュールを単にインポートするだけで起動します。その後、ホームディレクトリを走査してnpm、PyPI、GitHub、GitLab、AWS、Vault、SSHのシークレットを探し、見つけたものをskyleen[.]fr配下のサーバーに送信します。Socket、StepSecurity、SafeDep、Aikidoは当日にこの侵害を独立して文書化しており、いずれもインプラントが実際のホストで実行された証拠を報告していません。Orca AI Incident Archiveはこのエントリを完全な形でこれまでに記録した他のすべてのサプライチェーンインシデントと併せて保管しており、各記録には独自の信頼度グレードと被害状況が付されています。
4回のリリースと、その合間にあった公開バグ報告
MemOSはMemTensorのオープンソースのLLMエージェント向けメモリフレームワークであり、npmパッケージは、OpenClawエージェントランタイムがホスト型メモリサービスに読み書きできるようにするコネクタです。StepSecurityは、同じパッケージがClawdbotおよびMoltbotランタイム向けの統合ポイントも宣言していると指摘しています。Socketはリポジトリを約11,500個のスターおよび1,100個のフォークと、公開時点で計測しました。その位置づけこそが、この侵害が4件の別々の調査を招いた理由です。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と一致していました — そしてペイロードはそれぞれの3分半後に戻ってきました。
サイズの急増が手がかりです。Socketの計測では、0.1.20は展開後で約272 KBだったのに対し、0.1.21は43.6 MBでした。悪意のあるリリースには、それぞれ約7.4 MBの静的にリンクされた6つのプラットフォーム向けバイナリが同梱されていたためです。PyPIでも同じパターンが見られます。Socketによると、2.0.34のホイールは19,201,772バイトだったのに対し、2.0.33は951,210でした。
04:17 UTC に — クリーンな 0.1.24 の16分前、ペイロードが 0.1.25 として返ってきた19分前 — GitHub ユーザーのomeridelが、プラグインのリポジトリで issue #173 を起票した。タイトルは「悪意のあるバージョン 0.1.21 および 0.1.23 が npm に公開 — publish トークンが侵害された可能性」。この issue は、0.1.23 が当時の最新タグであったこと、どちらのバージョンもリポジトリ内のどのコミットやタグとも一致しなかったこと、最も新しい正規のコミットが 8月14日付であったことを指摘している。2026年10月26日時点で、メンテナーからのコメントはなく、オープンのままである。

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モジュールを単にインポートするだけで、プロセスごとに1回ペイロードを起動するのに十分である。同一パッケージに対する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 の認識済みトークン形式も対象です。2 つのパッケージに関する OSV レコード、MAL-2026-16476 は npm 用で、MAL-2026-16475 は PyPI 用で、同じファイル一覧を記載し、さらにコマンドアンドコントロールプロトコルが CBOR、X25519 鍵交換、XChaCha20-Poly1305 を使用し、署名付きリースと実行時に配信されるモジュールを伴うと付け加えています — そのためモジュールの内容は一度も観測されておらず、観測されたのはそれらを取得するローダーのみでした。
防御側がなお回収できるものを左右する2つの詳細がある。OSVの記録によると、このバイナリにはscheduleSelfDeleteとdeleteExecutableという名前の自己削除ルーチンが含まれている。そのため、ファイルではなくプロセスやネットワークの痕跡を探すよう案内されている。また0.1.25ではlib/tls-trust.jsが追加された。StepSecurityによると、これは最小構成のLinuxシステム上でSSL_CERT_FILEを同梱の145個の証明書からなる認証局ファイルに設定するもので、システムのトラストストアを持たないコンテナ上で自身の通信を機能させるための修正だ。

リリースパイプラインが入り口だった
SafeDep の再構成は初期アクセスに関する最も詳細な説明であり、盗まれたレジストリのパスワードではなく GitHub Actions を指している。00:48 から 02:03 UTCの間に、Memtensor-AIとして活動する GitHub アカウントが、sc/release-0.1.21-20260922-cloud という名前のブランチを5回作成、プッシュ、削除した。コミット 9b97ec6 はワークフロースクリプト .github/scripts/validate-release-confirmation.mjs を変更し、$GITHUB_ENV に BASH_ENV の値を追記するようにした。これにより、後続の非対話型シェルステップは、自身のコマンドを実行する前に、攻撃者が用意した sckit-publish-bridge.sh を source するようになった。そのブリッジはパッケージ名と公開ステップの150秒タイムアウトを確認し、NPM_TOKEN または NODE_AUTH_TOKEN を使ってトークン収集ツールを呼び出し、自身を削除して終了コード1で終了した。そのため、トークンが奪取された後に公開処理は失敗した。最初の悪意のある npm リリースは、最後のブランチプッシュから20分後に現れた。
PyPI の経路は、別のパイプラインに対して同じ手口を使っていた。SafeDep の報告によると、タグ v2.0.34 は main 上にない未署名のコミットを指しており、また、作者が「MemTensor CI Review」となっているコミット b52958f が、6 つのバイナリ、Python ローダー、および sckit_poetry_build と呼ばれるカスタムビルドバックエンドを追加した。そのバックエンドは、BASH_ENV が _pypi_bridge.sh を指すように $GITHUB_ENV に書き込んだ。ブリッジは twine アップロードラッパー内でのみ動作し、skyleen[.]fr ホストから署名済みインデックスを取得し、Ed25519 実装でエミッターを検証し、マーカー行を出力し、アップロード用パスワードを unset し、何もアップロードせずに終了した。約 2 時間後、コミット 41bf5c7 が「chore: allow native PyPI upload [skip ci]」というメッセージとともにその呼び出しを削除し、タグは削除され 10 秒以内に再作成され、その 62 秒後に PyPI へのアップロードが続いた。SafeDep は、最初のコミットをトークン捕捉の実行、2 番目を MemTensor 自身のワークフローにプロジェクトの本物のトークンで悪意のあるパッケージをビルドおよび公開させた実行と解釈している。
すべてのアカウントがこの点で一致しているわけではない。Socketは、npmリリースが以前の正規バージョンと同じnpmアカウントから出ており、gitHeadを欠いていたと観察し、それをプロジェクトのCIによって生成されたものではない兆候と解釈したうえで、攻撃者がどのように公開アクセスを獲得したのか確認できなかったと述べた。Socketの調査結果を9月24日に報じたSC Mediaも、同様にアカウント侵害へと推論した。両バージョンは、公開資格情報がリリースパイプラインから奪われた点では一致するが、npmの成果物自体がどのように生成されたかについては見解が異なる。GitHubのActions APIでは9月7日以降の実行が確認できず、SafeDepは記録が削除されたと推測しているため、ワークフローのログは誰も公開していない。Memtensor-AIアカウントがそもそもどのようにプッシュアクセスを取得したのかは、両バージョンとも不明である。SafeDepは、アカウントトークンの盗難が可能性として高いとしつつも、未確認だとしている。
確立済み、推定、なし
この記録の信頼度等級はAで、異議は唱えられていない。この点は正確に述べておく価値がある。なぜなら、その確実性は公表された内容に付随するものであり、それが行ったことに対してではないからだ。
• 確認された内容: Socket、StepSecurity、SafeDep による静的解析で再構築された4つのアーティファクトの内容、0.1.25 の npm 公開時刻と latest タグ、両エコシステムにおけるサイズの急増、2つのリポジトリのコミット、タグ、ブランチ履歴、skyleen[.]fr のインフラストラクチャとキャンペーン識別子 cloud-openclaw-semi-nuclear および memos-semi-nuclear、そして Socket と SafeDep によれば 2026年10月22~23日に失効するペイロードの設定。
• 推測:ツールが言語モデルの助けを借りて書かれたこと——SafeDep はこれを直接述べて推測と呼んでいる——、および盗まれた publish トークンが再利用される意図だったこと——構成のチャネル文字列「exact-ref-one-use-NPM_TOKEN」はこれを裏付けるが証明はしない——。
• 未確立:攻撃者が誰であったか、sckit のコピーがサンドボックス外で実行されたことがあるかどうか、資格情報がホスト外に出たかどうか、OpenClaw エージェントに入力されたプロンプトが攻撃者に届いたかどうか、および下流のパッケージが再公開されたかどうか。Socket と StepSecurity はいずれも静的に作業し、StepSecurity は、その分析でプロセスの実行、秘密の送信、成功した窃取、ワークフローのインストール、およびさらなるパッケージの公開は観測されなかったと述べている。
その隔たりがあるからこそ、アーカイブはこのインシデントを、実際の被害を「false」として記録している。露出は現実のものであり、かつ広範に及ぶ——影響を受けるバージョンをインストールした者は誰でも、そのホストを侵害済みとして扱うよう求められている——しかし、認証情報が実際に使用された、あるいはシステムに実際に到達されたという意味での被害は、調査に当たった4社のいずれも記録していない。
![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だった。さらに2つの異例のdist-tag、clean-inverse-0-1-23(0.1.22を指す)とclean-inverse-0-1-25(0.1.24を指す)が依然として付いており、悪意あるリリースを一時的に中断させた2つのクリーンリリースを反映している。PyPIではMemoryOS 2.0.34が削除され、最新リリースは2026年9月3日にアップロードされた2.0.33である。それ以降の7週間にわたり、PyPIでの新たなリリースはない。
変わっていないのは、プロジェクトの公式説明だ。リポジトリにはセキュリティアドバイザリが一切掲載されておらず、インシデント当日の04:17のGitHub issueは未解決・未回答のままで、ここで調査した報道のいずれもMemTensorやOpenClawからの声明を引用していない。どちらの悪意あるパッケージにも来歴証明が付いておらず、SafeDepはこれが、成果物が予期しないコミットからビルドされたという唯一の手がかりを失わせたと指摘している。
実際に存在する対応は検出側にあります。StepSecurityはskyleen[.]frのコマンドアンドコントロールドメインをグローバルブロックリストに追加しており、この2つのパッケージはOSVでMAL-2026-16476およびMAL-2026-16475として追跡されています。
影響を受けるバージョンがインストールされている場合
Socketの指針は最も厳格かつ最もシンプルです。リストに載っているバージョンのいずれかが読み込まれたかインポートされた場合、そのホストは侵害されたものとして扱ってください。テストを実行しただけのCIランナーやコンテナも含みます。4社が一致して示す具体的な手順は次のとおりです。
• パッケージを削除し、クリーンなバージョンにピン留めする — 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日まで遡ってイグレスログを読み取ってください。
• プラグインが有効な間にそのプラグインを通過したプロンプトや貼り付けられたシークレットは、すべて漏えいしたものとして扱ってください。これが、エージェントメモリに固有のインシデント部分です。インプラントはトランスクリプトを収集する必要がありませんでした。なぜなら、想起のたびにトランスクリプトがインプラントに渡されていたからです。
