keyv npm侵害の実態:preinstallマルウェア、信頼された来歴、IDEフック
2026年8月4日
24 分で読めます202keyvとpreinstallフックが
これはjaredwrayにlatestタグが
概要
インシデント:正規の
npmパッケージに 悪意の ある コードが 埋め込まれる 主な
パッケージ: keyv@6.0.0Snykが
確認した 影響リリース: keyv、cacheable関連パッケージ、 ectoにまたがる 11件 実行方
法: "preinstall": "node setup.mjs"ペイロード:
setup.mjsが727,680バイトの 第2段階ペイロード Math_Symbol.jsを読み込む UTC 11:16時点で
確認された 状況:悪意の ある リリース8件が latestタグに残存。 3件は 削除済み。 アドバイザリ:
SNYK-JS-KEYV-18515941CVE/GHSA:調査時点では
CVEも GHSAも 割り当てられていません 運用上の
深刻度:インストールに より、 開発者または CIランナーの 権限で 攻撃者が 制御する コードが 実行される ため、 Critical 修復:既知の
最終安全版に バージョンを 固定するか、 ダウングレードしてください。 keyv@6.0.0の安全な 後続版は 公開されていませんでした。 直ちに
実施する こと :影響を 受ける バージョンを インストールしないでください。 実行してしまった 場合は、 ホストを 隔離し、 永続化の 痕跡を 調査して 無効化したうえで、 クリーンな システムから 露出した 認証情報を ローテーションしてください。
深刻度とアドバイザリの状況
このSNYK-JS-KEYV-18515941をkeyv@6.0.0を
調査中、
Snykが独自に確認した内容
jaredwrayが
調査に@keyvスコープの
keyv@6.0.0、UTC 09:35:00に 公開 @cacheable/net@2.1.1、UTC 10:09:44に 公開 @cacheable/node-cache@3.1.2、UTC 10:10:34に 公開 cacheable@2.5.1、UTC 10:10:44に 公開 flat-cache@6.1.24、UTC 10:10:55に 公開され、 その後 削除 @cacheable/memory@2.2.1、UTC 10:11:29に 公開 cacheable-request@13.0.20、UTC 10:11:24に 公開され、 その後 削除 file-entry-cache@11.1.6、UTC 10:13:02に 公開 @cacheable/utils@2.5.1、UTC 10:14:21に 公開 cache-manager@7.2.10、UTC 10:14:41に 公開され、 その後 削除 ecto@5.0.1、UTC 10:28:01に 公開
最後のecto@5.0.1はsetup.mjsとMath_Symbol.jsはkeyv@6.0.0内のectoを
UTC 11:16時点のflat-cache@6.1.24、cacheable-request@13.0.20、cache-manager@7.2.10をlatestタグを6.1.23、13.0.19、7.2.9にlatestタグが
公開tarballで異なるのは3か所
レジストリからkeyv@6.0.0とkeyv@6.0.0-rc.1を
異なる
package.jsonでは、バージョンが 6.0.0-rc.1から6.0.0に変わり、 公開ファイル一覧に 2つの ペイロードファイルが 追加され、 preinstallスクリプトが追加されています。 setup.mjsが追加されました (29,918バイト)。 Math_Symbol.jsが追加されました (727,680バイト)。
dist/配下の
マニフェストの
keyv@6.0.0には、
独自に
続いて、setup.mjsとMath_Symbol.jsが
マルウェアの実行方法
npmはpreinstallをkeyvを
setup.mjsのchild_process.execFileSyncの.claude/setup.mjsと1.3.13とmath_init.jsが
インシデント報告とともにgh-token-monitorと
Math_Symbol.jsはgh-token-monitor永続化パターンに
開発ツールを狙う第2の実行経路
npmのd8c850c7のkeyvリポジトリに
.claude/settings.json.claude/setup.mjs.claude/math_init.js.vscode/tasks.json.vscode/setup.mjs
ClaudeのSessionStartコマンドが.vscode/setup.mjsをrunOn: "folderOpen"を.claude/setup.mjsを
このgithub-actions[bot]の
悪意のあるリリースにも正当な来歴情報が署名されていた
npmのkeyv@6.0.0の
リリースコミットのsetup.mjsをexecFileSyncを
来歴情報は、
影響と想定される被害範囲
影響をkeyvがflat-cacheがfile-entry-cacheが
これらの
Snykのflat-cacheやfile-entry-cacheは、
執筆時点で、latestタグに
影響を検出する方法
まず、
npmが
パッケージコードを
ペイロードと
また、.claude/settings.json、.vscode/tasks.json、toJSON(secrets)を
Snykをkeyv@6.0.0の
正規パッケージの
修復
影響を受けるパッケージをインストールした場合
node_modulesを
ホストを
通常の ネットワークアクセスから 隔離します。調査に 備え、 ログ、 プロセスデータ、 npmログ、 CIジョブの 出力、 ファイルシステムの タイムスタンプを 保全してください。 GitHubの
認証情報を 失効させる 前に、 gh-token-monitorの永続化を 探してください。 ~/.local/bin/gh-token-monitor.sh、~/.config/gh-token-monitor/、~/.config/systemd/user/gh-token-monitor.service、~/Library/LaunchAgents/com.user.gh-token-monitor.plistを確認します。 永続化の
痕跡が 見つかった 場合は 無効化してください。インシデント対応担当者と 連携して 削除し、 フォレンジック用の コピーを 保管してください。 認証情報の 失効が 監視ツールに 検知される 可能性が あります。 安全が
確認された システムから 認証情報を ローテーションしてください。GitHub PATと Appトークン、 npmトークン、 AWS、 GCP、 Azure、 Vault、 Kubernetes、 データベースの 認証情報、 秘密鍵、 影響を 受けた CIジョブで 利用可能だった すべての シークレットが 対象です。 アカウントと
クラウドの 監査ログを 確認してください。不審な npmパッケージの 公開、 リポジトリの 作成、 ワークフローの 変更、 Actionsの アーティファクト、 クラウドAPI 呼び出し、 不審な 場所からの トークン利用が ないか 調べます。 影響を
受けた アーティファクトを プライベートレジストリと キャッシュから 削除してください。npmから 削除しても、 社内プロキシや 開発者の キャッシュに 保存済みの コピーは 消えません。
再インストール前に安全性が確認されたバージョンを固定する
確認時点で、
keyv@5.6.0は、keyv@6.0.0から6.0.0-rc.1のdist/出力は
オーバーライドを
ライフサイクルスクリプトを
インシデントの時系列
以下の
09:02~09:17:コミット
ee2681a9でkeyv@6.0.0を準備し、 ライフサイクルフックと ペイロードファイルを 追加。 ローダーを 実行する テストも 追加されました。 GitHubの 記録では、 作成者の 時刻は 09:02、 コミッターの 時刻は 09:17です。 09:04:確認済みの
コミット d8c850c7で、Claudeと VS Codeの 実行フックが 追加されました。 09:23:コミット
f97eabcdで、preinstallテストが 削除されました。 09:30~09:32:複数の
@keyv/*バージョン6のパッケージが、 悪意の ある フックなしで 公開されました。 09:35:npmで
悪意の ある フックを 含む keyv@6.0.0が公開されました。 09:51:コミット
1f79edd8で@keyv/*の各ワークスペースに ペイロードファイルが 追加され、 以降の リリースにも リスクが 生じました。 09:49~09:51:GitHubの
Issue #2044、#2045、#2046でインシデントが 報告されました。 後に Issue APIは 410 Goneを返しました。 10:09~10:14:悪意の
ある Cacheable系リリースが 公開されました。 10:18と
10: 20:セキュリティ研究者の Charlie Eriksenが、 提供された 2件の 公開警告を 投稿しました。 10:28:同じ
ペイロードを 含む ecto@5.0.1が公開され、 メンテナーに 関連する パッケージは 11個に なりました。 10:39:
cacheable-request@13.0.20の削除後、 npmレジストリの メタデータが 変更されました。 10:42:
flat-cache@6.1.24の削除後、 npmレジストリの メタデータが 変更されました。 11:11:
cache-manager@7.2.10の削除後、 npmレジストリの メタデータが 変更されました。 11:16:Snykの
レジストリスナップショットでは、 latestタグに悪意の ある リリースが 8件残っている ことが 確認されました。 執
筆中:Snykは SNYK-JS-KEYV-18515941と、ほか 約70件の アドバイザリを 公開しました。
この
オンデマンドウェビナー
OpenAIは 自らの 答案を 採点し、 その後 本番環境に 侵入した
オンデマンド配信を



