オープンソースエコシステムで高まる悪意のあるパッケージの脅威
2023年3月23日
0 分で読めます編集者注:2025年3月5日
悪意のあるオープンソースパッケージを取り巻く状況は、今も変化し続けています。
2024年、Snykは3,600件を超える悪意のあるパッケージを特定しました。主な標的となったのはnpm(3,000件以上)とPyPI(600件以上)です。2025年に入ってからは、すでに1,000件を超える新たな事例にフラグを立てており、引き続きJavaScriptが最も大きな影響を受けているエコシステムです。
Snykは、現実世界での影響がないパッケージよりも、実際に利用者がおり、お客様に影響を及ぼす可能性のある悪意のあるパッケージをデータベースに追加することを優先しています。
2023年初頭以降、SnykはPyPIとnpmレジストリで約6,800件の悪意のあるパッケージを記録しました。そのうち約860件は、ほとんど、あるいはまったくユーザー操作を必要としないもので、Snykが発見しました。
2022年半ばから、各エコシステムに公開される悪意のあるパッケージが急増していることを確認しました。新たに追加されたこれら6,800件の悪意のあるパッケージは、数カ月前に起きた大規模なフィッシングキャンペーンに続くものです。Checkmarxが2022年12月に発見したこのキャンペーンでは、14万4,000件を超える悪意のあるパッケージがオープンソースソフトウェアのレジストリに公開され、タイポスクワッティングやフィッシングを通じて各エコシステムを汚染しました。このインシデントは、npmエコシステムを狙った、また別のよく知られたフィッシング事件に続くものでした。この事件では、開発者をフィッシングに誘導するため、1万7,000件を超える悪意のあるnpmパッケージがアップロードされました。Python開発者も、PythonライブラリのレジストリであるPyPIを狙ったセキュリティインシデントの被害に遭い、1,130件を超える悪意のあるパッケージが公開されました。
この記事では、悪意のあるパッケージに関するセキュリティインシデントをSnykのセキュリティチームがどのように監視し、開示しているかを幅広くご紹介します。悪意のあるパッケージに関する報告が数多く寄せられていることを踏まえ、Snykが確認した実際のリスクと影響、そしてリスクを軽減できるレベルまで低減する方法について、さらに詳しくお伝えします。
悪意のあるパッケージの公開が近年増加しているのは、明らかな傾向です。2021年にSnykが追加した悪意のあるパッケージは82件でしたが、2022年と2023年には規模が大きく変化しました。Snykが追加した影響の大きい悪意のあるパッケージは9,900件を超え、2021年と比べて11,973%増加しました。
この増加は主に、悪意のあるパッケージの問題への認識が高まる中、パッケージの特定と影響の無効化に向けた取り組みを強化したことによるものです。
Snykでは、PyPIやnpmなど、さまざまなエコシステムに存在する悪意のあるパッケージを検出してソースコードを取得し、分析したうえで迅速に公開できる動的解析ツールを開発しています。また、オープンソースコミュニティとの連携や協力を通じて、悪意のあるパッケージを公開するリソースをさらに追跡し、最新情報を把握できるようになっています。
次のグラフは、2021年以降にSnykのセキュリティインテリジェンスに追加された悪意のあるパッケージ数の変化を示しています。

公開される悪意のあるパッケージが急増する一方で、すべてのパッケージが開発者に同じリスクをもたらすのかどうかを評価することも重要です。実際には、そうではありません。
公に知られている悪意のあるパッケージの多くは、標的型のフィッシングを目的としています。こうしたパッケージを悪用するにはユーザーの操作が必要です。パッケージをダウンロードするだけでなく、標的となるユーザーがリンクを自らクリックし、フィッシングサイトに誘導される必要があります。一方、preinstallやpostinstallスクリプトなどのライフサイクルフックを利用する、影響の大きい悪意のあるパッケージの多くは、マルウェアをダウンロードしたり、標的のマシンから機密情報を盗んだりできます。こうしたパッケージは、インストール後にユーザーが操作しなくても動作します。そのため、悪用に能動的なユーザー操作が必要なパッケージよりも重大なリスクをもたらします。
2023年以降、Snykは、パッケージのダウンロード以外にユーザー操作を必要としない悪意のあるパッケージを681件発見しました。その一例が、django-yauthというJavaScriptのnpmパッケージです。
ソースコードを調査したところ、preinstallスクリプト./pre.shが含まれており、次のコードが記述されていました。
このpreinstallスクリプトは、ユーザーがnpm install django-yauthコマンドでパッケージをインストールすると実行されます。
このケースでは、マルウェアの動作は単純です。マシンのホスト名、ユーザー名、現在のディレクトリなどの機密情報を収集します。攻撃者が管理するエンドポイントにPOSTリクエストを送信し、これらの情報を共有します。
このパッケージは、ypvpctpbamdhxtkzduというユーザー名のユーザーによってnpmにアップロードされました。このユーザーは、次のような類似コードを含む悪意のあるパッケージも公開しています。
悪意のあるパッケージの被害を防ぐ方法
パッケージをインストールする前に、インストールしようとしているものとパッケージ名が完全に一致していることを確認してください。
また、システムに正体不明の悪意のあるパッケージが入り込まないよう、プロジェクトやアプリケーションを定期的にスキャンしましょう。
開発者は、他のバージョンと比べて極端に高いバージョン番号のリリースや、タイポスクワッティングを狙った名前など、不審な兆候に注意し、ダウンロードしたパッケージのソースコードを確認する必要があります。
プロジェクトを保護するためのヒントや手法については、Snykで悪意のあるパッケージやサプライチェーン攻撃を防ぐに関する前回の記事をご覧ください。
未来に向けたセキュリティ
悪意のあるパッケージが増加しているとはいえ、オープンソースセキュリティ組織やオープンソースコミュニティ全体が後れを取ることはありません。こうしたパッケージを迅速に検出するための自動化ツールや機械学習ツールがさらに開発されており、オープンソースコミュニティでは、悪意のあるパッケージとの戦いに協力が欠かせないことが認識されています。同業者や専門家と情報を共有することで、より広範囲に目を向け、遭遇する可能性のある悪意のあるパッケージへの認識を高めることができます。
最後に、最近のインシデントでは悪意のあるパッケージが大量に公開されましたが、いずれもエコシステムから速やかに削除され、Snykのお客様への影響は軽微でした。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。


