Skip to main content

.NET開発者は注意:MoqのNuGetパッケージがGitからユーザーのメールアドレスを流出

著者
blog feature pypi spoof

2023年8月9日

0 分で読めます

編集者注:2023年8月10日

このブログ記事は、現在進行中の状況に関する新たな情報を反映するために更新されました。今後の更新をお待ちください。

概要

2023年8月8日、.NETコミュニティは、Moqというテストライブラリが開発用マシンから開発者のメールアドレスを抜き取り、サードパーティーのリモートサーバーに送信していることを知らされました。

Snykはすでにセキュリティアドバイザリを公開しており、Snykで.NETプロジェクトをスキャンして監視している開発者に通知します。

CTFを始めよう

オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。

2023年8月10日時点の最新情報:

.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上のコメントがすべてを物語っています:

SponsorLink、Moqの刷新、プライバシーへの懸念、GDPR、持続可能性についてkzuが議論する、178件の低評価リアクションが付いたダークモードの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に依存する人気のGitHubリポジトリ5件を、リポジトリ名とスター数とともに一覧表示した表。

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#開発者がコードプロジェクト内の安全でないコードを見つけるのに役立ちます。

続きを読む

Blog

フロンティアモデルは脆弱性を発見した。攻撃者だけがエクスプロイトチェーンを見つけた。

静的解析で欠陥は見つかりましたが、ライブ攻撃テストで侵害につながる連鎖を実証できたのは唯一でした。Evo COS、Claude Security、Claude Code Securityを比較します。

feature insights context
Blog

自律型攻撃はすでに始まっている。防御もそのスピードに追いつかなければならない。

自律型攻撃者によって、防御に使える時間は短くなっています。継続的な検出、修復、検証、予防で、セキュリティチームが攻撃に歩調を合わせる方法をご紹介します。

Blog

AIコーディングエージェントが不適切なアクセス制御を繰り返し実装する理由

AIコーディングエージェントは、コンパイルが通りレビューも通過する一方で、あるテナントのデータを別のテナントに公開してしまう認可ロジックを生成することがあります。不適切なアクセス制御が検出しにくい理由と、その防止策をご紹介します。