Skip to main content

ESLint Prettier Pluginのメンテナーがnpmサプライチェーンマルウェアの攻撃を受ける

著者
blog feature security alert purple

2025年7月22日

0 分で読めます

2025年7月19日から、npmレジストリ上の人気オープンソースnpmパッケージのメンテナーを標的とした、npmサプライチェーンのセキュリティインシデントが発生しています

npmマルウェアの要点

  • 攻撃者は、正規のnpmjs.comレジストリに似せたドメインnpnjs.comを登録しました(タイポスクワッティング)。

  • メンテナーはメールフィッシングの標的となり、npmレジストリの認証情報を乗っ取られました

  • 影響を受けたパッケージ:eslint-config-prettier、eslint-plugin-prettier、synckit、@pkgr/core、napi-postinstall、got-fetch

  • メンテナーはnpmトークンの認証情報をリセットし、マルウェアが含まれるパッケージを非推奨としてマークしました。npmレジストリは、悪意のあるバージョンをすでに削除しています

悪意のあるgot-fetchのバージョンに関するSnyk Vulnerability Databaseのアドバイザリの例:

eslint-config-prettierのnpmサプライチェーン侵害に関連する、got-fetch npmパッケージの悪意あるバージョン

eslint-config-prettierパッケージは、現在週あたり3,000万ダウンロードされ、着実に利用が広がっています。このことからも、今回のマルウェアの影響の大きさがわかります。

npm.chart.devウェブサイトに表示されたeslint-config-prettierパッケージのnpmダウンロード数

Prettierプラグインを狙ったnpm攻撃について

正規のnpmjs.comレジストリにパッケージを公開するには、有効なメールアドレスを登録したアカウントが必要です。npmパッケージが公開されると、この情報は誰でも閲覧できる状態になります。

たとえば、私自身のnpqパッケージの情報を見れば、メンテナーのメールアドレスを簡単に取得できることがわかります。

npmレジストリのパッケージ情報に表示されるメンテナーのメールアドレス

これは目新しい話ではありません。攻撃者はこの情報を使って、次のような潜在的な弱点を探せます。

  • 期限切れのメールドメインを見つけて購入し、パスワードリセットの手続きを行って、新しいバージョンを公開できるアクセス権を得る

  • 標的型フィッシングメールで対象者を狙い、npmトークンの認証情報を盗む

今回の攻撃で攻撃者が利用したのは、まさに後者の手口です。メールの手続きを装ってメンテナーをだまし、npmレジストリの認証情報を収集しました。こうしてレジストリの認証情報を入手した攻撃者は、メンテナーになりすましてパッケージの新しいバージョンを公開できるようになります。

実際にこのシナリオが発生し、参考例の1つであるeslint-config-prettierでは、Windows向けマルウェアに感染した複数のバージョンが公開されていたことが確認されました。

メンテナーはこれを確認し、ESLint Config Prettier PluginのGitHubページで証拠を提示しました。受信したメールも公開されています。

eslint-config-prettierのメンテナーを標的としたフィッシングキャンペーン

感染が拡大

マルウェアが1人のメンテナーに侵入した場合、どうなるでしょうか。広く利用される悪意のあるバージョンが1つ公開されるだけで、侵害を受ける他のメンテナーへと拡散するのは容易です。

実際にそのとおりの事態が起こりました。eslint-config-prettierのマルウェアは公開期間が短かったものの、すでに別のメンテナー、npmパッケージisのメンテナーにも影響を及ぼしています。その結果、バージョン3.3.1および5.0.0のnpmパッケージisがマルウェアとして検出されました。この問題はその後修正され(7月19日午後9時21分、UTC+3時点)、修正版の3.3.2が新たに公開されています。メンテナーのJordan Harbandによると、パッケージのリセットには6時間かかりました。

npmサプライチェーン攻撃から身を守る方法

まず、次のインシデント対応手順を実施してください。

  • このインシデントで言及されたパッケージの既知のマルウェア感染バージョンを使用していないことを確認してください。CIシステム、本番環境へのデプロイ、開発チームの環境にインストールされていないことも確認してください。

  • 感染が見つかった場合は、シークレットをローテーションし、社内外のパッケージレジストリ資産を監査したうえで、社内のセキュリティチームのガイドラインに従ってください。

今後のマルウェアインシデントから身を守るため、メンテナーと開発者の双方に、予防策として次のセキュリティのベストプラクティスを推奨します。

  • npmレジストリアカウントで2要素認証を有効にしてください。特にメンテナーは、侵害時の影響範囲が非常に大きいため、必ず有効にしましょう

  • オープンソースCLIのnpqを使い、npmパッケージをインストールする前にヒューリスティック分析を実行しましょう

  • ユーザー単位の設定ファイル.npmrcにignore-scripts=trueを追加すると、インストール時にpostinstallスクリプトが自動実行されなくなります

今回のnpmサプライチェーン攻撃は、堅牢なセキュリティ対策がいかに重要かを示しています。こうした脅威への理解を深め、プロジェクトを守るための予防策を学ぶには、Snyk Learnのサプライチェーン攻撃に関するレッスンをご覧ください。

Snykの開発者向けセキュリティトレーニング

必要なときに、専門家から実際のコードを使って学べます。