.NET開発者は注意:MoqのNuGetパッケージがGitからユーザーのメールアドレスを流出
2023年8月9日
0 分で読めます編集者注:2023年8月10日
このブログ記事は、現在進行中の状況に関する新たな情報を反映するために更新されました。今後の更新をお待ちください。
概要
2023年8月8日、.NETコミュニティは、Moqというテストライブラリが開発用マシンから開発者のメールアドレスを抜き取り、サードパーティーのリモートサーバーに送信していることを知らされました。
Snykはすでにセキュリティアドバイザリを公開しており、Snykで.NETプロジェクトをスキャンして監視している開発者に通知します。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。
2023年8月10日時点の最新情報:
NuGetパッケージDevlooped.SponsorLinkは、NuGetレジストリチームに報告されました。
Moqのフォークが複数作成されています。取り扱いには注意してください:
同じメンテナーアカウントが公開している他のパッケージも評価することをおすすめします。
.NET向けテストライブラリMoqについて
Moqは.NET開発者向けのテストライブラリで、自らを「.NETで最も人気があり、使いやすいモックライブラリ」と紹介しています。リリース以来、累計4億7,500万回という驚異的なダウンロード数を記録し、GitHubで5,300件のスターを獲得していることからも、コミュニティから支持されていることがわかります。
何が起きたのか?Moqが開発者のメールアドレスを収集
バージョン4.20.0から、Moqのメンテナーはビルド時の新たな動作を追加しました。`git config`コマンドを実行し、開発者のGitユーザープロファイルに設定されたメールアドレスを特定して抽出します。
開発者のメールアドレスが抽出されると、そのアドレスをURLにハッシュ化して含めたHTTP HEADリクエストがAzure Blob Storageサービスに送信されます。このリモートエンドポイントサービスはサードパーティーのSponsorLinkサービスと連携し、開発者がそのGitHubアプリをインストールしているかどうかを判定します。
このプロセスは、開発者がMoqプロジェクトを現在支援しているかどうかを判定することを目的としていますが、メールアドレスという個人識別情報(PII)が明示的に外部へ流出し、サードパーティーのサービスエンドポイントと共有されます。
今回発覚した事案は、実際にはメンテナーの活動資金を集めるための実験の一環であり、2023年1月以降、メンテナーが管理する他のオープンソースプロジェクトでも行われていました。
Moqのサプライチェーンセキュリティとパッケージの健全性に関する懸念
Moqの事案も、オープンソースライブラリに起因するサプライチェーンセキュリティ上の懸念が表面化した事例です。企業や開発者のエコシステムでオープンソースの採用が急速に広がるなか、その影響は広範囲に及びます。
セキュリティ脆弱性とは異なり、今回のNuGetパッケージの事案は、オープンソースソフトウェアのメンテナーが活動への協賛、資金、評価を得るために負わされている責任の不均衡を浮き彫りにしています。
善意からだったのかもしれませんが、Moqはライブラリの利用者に「ご支援ありがとうございます」というメッセージをコンソールに表示しました。しかし、利用者の同意を得ることなく、個人を特定できる情報であるメールアドレスをさらに収集し、SponsorLinkというサードパーティーのサービスに送信していました。
メンテナーによるGitHub上のコメントがすべてを物語っています:

Moqの影響範囲
バージョン4.20.0はNuGetレジストリから削除されましたが、過去のダウンロード統計から、このバージョンの影響範囲を推測できます。公開されていたのは24時間未満だったにもかかわらず、すでに10,356回インストールされていました。
なお、メンテナーは2023年1月の投稿で、メールアドレスは平文では送信されず、一方向アルゴリズムのSHA256でハッシュ化されると認めています。
データ流出の動作がないMoqの旧バージョン4.18.4は、過去6週間で6,765,006回ダウンロードされています。開発者が問題に気づき、コミュニティに報告していなければ、プライバシー侵害の影響がどれほど広がっていたかがわかります。
この事案の影響を受けたプロジェクトには、MicrosoftのPowerToys開発チームやJellyfinなどがあり、Moqのテスト機能に依存しながら、おそらくこの問題を知らなかったプロジェクトリポジトリは、ほかにも数千に上ります。

Moqの事案:次にすべきこと
要点:
Moqのバージョン4.20.0を使用していなければ、Moqライブラリによるユーザーのメールアドレス(PII)の流出は回避できています。
バージョン4.20.0はNuGetレジストリから非公開になりました。
プルリクエスト #1375が作成され、マージされました。ただし、ユーザーデータの流出がどの程度取り消されたかは確認されていません。
4.20.2など、より新しいバージョンのMoqも公開されています。しかし、データ流出が起きないことが確認されていないため、インストールは推奨しません。
次にすべきこと:
データ流出を防ぐため、4.20.0への依存関係を削除してください。
ほかの開発者が誤ってインストールしないよう、ArtifactoryやNexusなど、組織のパッケージ管理ツールでこの依存関係をブロックしてください。
意図しないデータ漏えいを避けるため、SponsorLinkに関連するDNSレコードの向き先を変更することを検討してください。
CIやビルドワークフロー、GitリポジトリにSnykを追加して、Moqの脆弱なバージョン4.20.0をはじめ、その他のセキュリティ脆弱性、悪意のあるライブラリ、ソフトウェアライブラリに潜む潜在的なデータ漏えいを検出しましょう。
Snykは開発者向けセキュリティツールを提供する企業です。.NET開発者向けに、.NETプロジェクトの依存関係をスキャンし、セキュリティ脆弱性や、Moqの事案のような望ましくない動作の問題を検出するツールを提供しています。NuGetおよびPaketプロジェクトの依存関係については、こちらからご利用を開始ください。
Snyk Codeは静的解析ツールです。C#開発者がコードプロジェクト内の安全でないコードを見つけるのに役立ちます。



