信頼度ランク
| S | 公式ソース確認済み |
| A | 成功実績多数・失敗例少数 |
| B | 賛否両論 |
| C | 動作未確認・セキュリティリスク高 |
| Z | 個人所感 |
npm CanisterSprawlワーム——自己増殖するサプライチェーン攻撃がpostinstallでAI APIキー・クラウド認証情報を窃取
2026年4月21〜22日に発見された自己増殖型npmワーム「CanisterSprawl」は、postinstallフックで約40カテゴリの秘密情報を収集し、盗んだnpmトークンで被害者の全パッケージに感染を拡大する。PyPIにも波及するマルチエコシステム攻撃の仕組みと対策を解説。
一言結論
CanisterSprawlは1人の開発者感染から自動でその開発者が公開しているすべてのnpmパッケージを汚染し指数的に拡散する初の実環境ワーム。OpenAI/Anthropicを含むAI APIキー、クラウド認証情報、CI/CDトークンを窃取し、PyPI認証情報が見つかれば同じ手法でPythonパッケージへも侵入する。今すぐ`npm audit`と公開パッケージのpostinstallスクリプト確認が必要だ。
何が起きたのか
2026年4月21〜22日、セキュリティ研究機関のSocketとStepSecurityが、CanisterSprawlと命名された自己増殖型サプライチェーンワームをnpmで発見した。
このワームは Namastex Labs 関連アカウントが公開した16以上のパッケージに埋め込まれており、感染した開発者環境から取得したnpmトークンを使って被害者自身のパッケージに自動的に汚染バージョンを公開し続ける。
CanisterSprawlの伝播サイクル:
[被害者が感染パッケージをインストール]
↓
[postinstallフックが起動]
↓
[約40カテゴリの秘密情報を正規表現で収集]
(npmトークン, クラウドキー, AI APIキー, SSHキー, CI/CDトークン等)
↓
[被害者のnpmトークンで被害者のパッケージに感染バージョンをpublish]
↓
[新たな被害者が感染パッケージをインストール → サイクル継続]
自己増殖するnpmワームが実環境で確認されたのはこれが初めての事例とされている。
窃取される情報(約40カテゴリ)
感染パッケージのpostinstallスクリプトは、開発者環境の以下の情報を正規表現でスキャンし、外部サーバーに送信する。
窃取対象(主要カテゴリ):
☠ npmトークン → パッケージへの感染拡大に悪用
☠ AWS / GCP / Azureキー → クラウドインフラへの不正アクセス
☠ OpenAI / Anthropic /
Cohere APIキー → LLM APIの無断利用・コスト被害
☠ GitHubトークン → リポジトリへのアクセス・改ざん
☠ CI/CDトークン → パイプラインの乗っ取り
☠ SSHキー → サーバーへの侵入
☠ 暗号通貨ウォレット → 資産の窃取
☠ ブラウザ保存パスワード → 全体的なアカウント侵害
AI API キーが明示的なターゲットに含まれている点が今回の特徴で、盗んだキーを使ったLLMコスト請求攻撃(“LLMjacking”)への転用が危惧される。
マルチエコシステムへの波及
npmトークン以外にPyPI認証情報が見つかった場合、同じ手法でPythonパッケージにも感染を拡大する。.pthファイルを悪用してPythonの起動時に悪意コードが実行されるよう仕込む。
同週には以下の三つのサプライチェーン攻撃が並行して発生しており、協調した攻撃者グループの存在が疑われている。
同週に発生した関連攻撃:
npm → CanisterSprawl(自己増殖型ワーム)
PyPI → 別のマルウェアキャンペーン
Docker Hub → イメージへの悪意レイヤー挿入
確認された感染パッケージ(2026年4月22日時点)
@automagik/genie 4.260421.33 – 4.260421.40
pgserve 1.1.11 – 1.1.14
@fairwords/websocket 1.0.38 – 1.0.39
@fairwords/loopback-connector-es 1.4.3 – 1.4.4
@openwebconcept/design-tokens 1.0.1 – 1.0.3
@openwebconcept/theme-owc 1.0.1 – 1.0.3
(他6バリアント・調査継続中)
既知パッケージ以外にも感染済みのバージョンが継続的に公開されている。
今すぐ行うべき対応
1. 依存関係を監査する
# インストール済みパッケージのスクリプトを確認
npm audit
# postinstallスクリプトを持つパッケージを列挙
cat package-lock.json | \
node -e "
const d=JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));
Object.entries(d.packages||{}).forEach(([k,v])=>{
if(v.scripts?.postinstall) console.log(k, v.scripts.postinstall);
})
"
2. 自分が公開しているパッケージを確認する
npmパッケージを公開している開発者は、最新バージョンのpostinstallスクリプトを即座に確認する。
# 自分のパッケージの最新バージョン情報を取得
npm view <your-package> dist-tags scripts
postinstallスクリプトに見覚えのないURLへのcurlやfetch、obfuscatedなコードが含まれていれば即座にトークンをローテーションし、npmサポートに連絡する。
3. npmトークンをローテーションする
感染の疑いがある場合、または感染パッケージをインストールした可能性がある場合は今すぐトークンを失効させる。
# 既存トークンを確認
npm token list
# 不審なトークンを削除
npm token revoke <token-id>
# GitHubリポジトリのシークレットも同時にローテーション:
# Settings → Secrets and variables → Actions
4. インストール時のスクリプト実行を制限する(予防策)
# npmの場合: ignore-scripts を有効化(個別適用時)
npm install --ignore-scripts
# .npmrcに設定して恒久化(CI環境で特に有効)
echo "ignore-scripts=true" >> .npmrc
ただしignore-scriptsはネイティブアドオンや一部ツールを壊す場合があるため、本番導入前に影響を確認すること。
なぜこのワームが危険なのか
従来のサプライチェーン攻撃は「悪意ある第三者パッケージを踏み台にする」ものだった。CanisterSprawlは開発者自身を加害者に変える点が根本的に異なる。
❌ 従来型:
悪意パッケージ → 被害者のシステムを攻撃
✅(攻撃者視点で)今回型:
悪意パッケージ → 被害者の認証情報で
→ 被害者の信頼されたパッケージを汚染
→ 被害者の既存ユーザーを攻撃
正規開発者のアカウントから公開された「信頼済みパッケージ」の更新版に悪意コードが含まれるため、npm auditだけでは検出できないケースがある。
注意点・未確認情報
- 感染パッケージの全リストは調査継続中で、公表済みの16件以外にも拡大している可能性がある
- 窃取された情報の利用状況(どのAPIキーが実際に悪用されたか)は非公開
- 攻撃者の帰属は調査中
- PyPI/Docker Hubへの同時攻撃との関連は未確認
まとめ
- CanisterSprawlはnpmの自己増殖型ワームで、postinstallを通じて開発者の全公開パッケージを汚染する
- AI APIキー、クラウド認証情報、CI/CDトークンを含む約40カテゴリを窃取
- 今すぐ:
npm audit実施 + 自分の公開パッケージのpostinstallスクリプト確認 - npmトークンのローテーションと
.npmrcへのignore-scripts=true設定を検討する