開発者を狙う“自己拡散型npmワーム”の全貌 400超のパッケージに感染拡大:GitHubやClaude Codeも悪用
週1億回以上ダウンロードされる人気ライブラリ「keyv」の保守担当者のGitHubアカウントが侵害された。これをきっかけにnpmエコシステム全体に感染を拡大させる自己増殖型マルウェアが出現している。開発者が今すぐ確認すべきポイントとは。
Aikido Securityは2026年8月4日(現地時間、以下同)、キーバリュー型ストレージライブラリ「keyv」の保守担当者の「GitHub」アカウントが侵害され、認証情報を盗むマルウェアが関連のnpmパッケージに混入したと報告した。
keyvは週約1億2700万回ダウンロードされる人気ライブラリ。同保守担当者が管理する「cacheable」「flat-cache」「file-entry-cache」なども被害に遭ったことが分かっている。
攻撃者は悪意のあるファイルをmainブランチに直接追加し、その直後に新版を公開した。パッケージは「GitHub Actions」による正規のビルドとして署名された状態でnpmに配布されたため、利用者からは通常の正規アップデートと見分けが付きにくかったという。
影響パッケージ全体の月間導入数は20億回越え マルウェアの挙動を分析
悪意あるコードを含む版には「keyv 6.0.0」「flat-cache 6.1.24」「file-entry-cache 11.1.6」「cacheable-request 13.0.20」「cacheable 2.5.1」「cache-manager 7.2.10」などが含まれる。
被害は同管理者のパッケージだけでなく「@deliveroo/reevent」「@picsart/ai-sdk」「@qlik/embed-runtime」「picasso.js」などにも波及した。keyv単体では週約1億2700万回ダウンロードされているが、2026年8月5日午後1時15分の時点では、少なくとも444パッケージ、1381バージョンが侵害され、影響を受けたパッケージ全体の月間導入数は20億回を超えたという。
各パッケージには「setup.mjs」と「Math_Symbol.js」が追加され、「package.json」には「preinstall: node setup.mjs」が書き込まれていた。影響を受けた版で「npm install」を実行すると、インストール完了前にsetup.mjsが自動実行される。setup.mjsは難読化されたドロッパーで、実行環境としてBun JavaScriptランタイムを取得し、その後728KBの難読化ファイル「Math_Symbol.js」を起動する。
Math_Symbol.jsは、npmトークンやGitHubトークンをはじめ、「Amazon Web Services」(AWS)認証情報、「Kubernetes」のサービスアカウント、「HashiCorp Vault」のトークン、「Stripe」のAPIキー、「Slack」のトークンなど、開発環境で利用されるさまざまな認証情報を収集する。
GitHub Actions環境では、ランナープロセスのメモリからシークレットやnpm公開用OIDC(OpenID Connect)トークンの取得を試みる。AWSでは設定ファイルや環境変数、「Amazon EC2」「Amazon Elastic Container Service」(Amazon ECS)のメタデータ、「AWS Secrets Manager」を調査し、KubernetesではAPI経由でシークレットを取得する。Vaultでも複数の認証方式を試し、KVストア内の秘密情報を列挙する。
開発者端末に保存された約200種類のファイルも探索対象となる。.envファイルや秘密鍵、SSH設定、「Terraform」の状態ファイル、「Docker」の認証情報、「KeePass」データベース、VPN設定、「Visual Studio Code」(VS Code)や「Claude Code」の設定ファイルなどを収集対象とし、5MBを超えるファイルは除外した上で最大64件を並列処理する。正規表現も利用し、秘密鍵や「Microsoft Azure」ストレージキー、認証情報を含むデータベース接続文字列なども検出する。
収集したデータはRSA方式で暗号化され、「Shai-Hulud: Here We Go Again」という説明文を持つ公開GitHubリポジトリに送信されていた。確認時点では約1300件のリポジトリが被害者ごとのデータ保存先として利用されており、攻撃者はGitHubをコマンド&コントロール(C2)インフラの一部として悪用していた。
GitHubへの送信に失敗した場合は、「npm-cache[.]com」に転送する。この接続先はEthereumのスマートコントラクトから動的に取得される仕組みとなっており、攻撃者はマルウェア本体を更新することなく接続先だけを変更でき、インフラ停止への耐性を高めていた。
自己増殖するマルウェアにどう対抗すればいい? すぐできる防御策
今回の攻撃で特徴的なのは、マルウェアが自己増殖する点だ。盗み出したnpmトークンを利用して公開権限を持つパッケージを調べ、最新版のtarballを展開した後、パッチ番号を1つ増やして悪意あるコードを埋め込み、再公開する。この自己拡散機能によって、初期侵害から400超のパッケージに感染が広がった。二次感染では「Math_Symbol.js」と同じ機能を持つ「math_init.js」が利用されていた。
また、GitHubの「ghs_」形式トークンを取得すると、各リポジトリで最大50ブランチにコミットを作成し、「.claude/settings.json」や「.vscode/tasks.json」へフックを追加する。これにより、開発者がVS Codeでリポジトリを開いたり、Claude Codeのセッションを開始したりするだけで、npm installを実行しなくてもマルウェアが動作する仕組みとなっていた。コミットの作成者名は「claude」、メッセージは「chore: update config」とされ、通常の更新に紛れ込むよう工夫されていた。
Aikido Securityは利用者に対し、中央フィードでマルウェア関連の重大アラートを確認し、必要に応じて手動で再スキャンするよう呼び掛けている。また、無料のマルウェア検査や、端末上のソフトウェアを可視化する「Device Protection」、npmやyarnの実行時にパッケージを照合するオープンソースツール「Safe Chain」の利用も案内した。
開発者は、影響を受けたバージョンを利用していないかどうかを確認するとともに、該当パッケージを導入していた場合はnpmやGitHubのアクセストークン、CI/CD(継続的インテグレーション/継続的デリバリー)環境のシークレット、クラウド認証情報などを速やかに失効・再発行することが望ましい。CI/CDの実行ログやGitHub Actionsの履歴に不審な公開処理がないかを確認し、サプライチェーン攻撃を検知する仕組みの導入も検討したい。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
Claude暴走、企業に侵入 AnthropicとOpenAIの事例から学ぶ3つの教訓
AIエージェントは人間の指示通りに動くだけの存在ではない。OpenAIとAnthropicは、それぞれのAIモデルが評価環境を飛び出し、外部インフラに自律的にアクセスしたインシデントを相次いで公表した。両事例から見えた教訓とは。
日立はMythosをどこまで使いこなしたのか? 実証で見えたリアルな性能
日立製作所はClaude Mythos Previewを使った脆弱性の特定と修正に関する実証成果を発表した。日立グループ内の100件を超えるユースケースに適用した結果、同社はMythosをどう評価したのか。リアルな性能を紹介する。
AI時代に「守る」はもう古い Gartnerが『五輪書』で説いた新たなセキュリティ論
「守る」という発想だけでは、AI時代のサイバーリスクには太刀打ちできない──。Gartnerは宮本武蔵の『五輪書』を題材に、ガバナンスからAI防御、人材育成まで、セキュリティ戦略の転換を提言した。
Linuxカーネルで432件のCVEが一斉公開 「重要な脆弱性だけ直す」運用は限界か
Linuxカーネル向けのCVE IDが短期間に432件公開され、セキュリティ関係者の間で議論を呼んでいる。従来は脆弱性ごとにリスクを見極め、優先順位を付けて対応することが一般的だったが、その前提自体が崩れつつあるという。大量のCVE時代に求められる新たな運用とは何か。
悪用成功率99%、Linuxカーネルに新ゼロデイ「Bad Epoll」が見つかる
成功率は約99%。Linuxカーネルで見つかった新たな権限昇格の脆弱性は、極めて短い競合タイミングにもかかわらず、高い確率でroot権限を奪えることが実証された。さらに、この脆弱性はAndroidにも影響する可能性があるという。
低温物流大混乱 ニチレイを襲ったサイバー攻撃、OSINTから見えた“明確な弱点”
ニチレイへのサイバー攻撃は、低温物流を混乱させ、外食チェーンやスーパーなど日本の食卓にまで影響を広げた。なぜ被害はここまで拡大したのか。OSINT調査を基に事件を分析。攻撃を許した可能性のある弱点まで、攻撃者視点で詳しく解説する。