oops

オープンソース プロジェクト Moq (「モック」と発音) は、最新リリースに物議を醸す依存関係を密かに組み込んでいることで厳しい批判を集めています。

NuGet ソフトウェア レジストリで配布されている Moq は、毎日 100,000 件以上のダウンロードがあり、その存続期間中に 4 億 7,600 万回以上ダウンロードされています。

今週リリースされた Moq の 4.20.0 には、別のプロジェクトである SponsorLink が密かに含まれており、オープンソース ソフトウェアの消費者の間でこの動きを背任に例えて大騒ぎを引き起こしました。

一見、オープンソース プロジェクトのように見える SponsorLink は、実際にはクローズド ソースとして NuGet に提供されており、ユーザーの電子メール アドレスのハッシュを収集して SponsorLink の CDN に送信する難読化された DLL が含まれているため、プライバシー上の懸念が生じています。

Moq はユーザーの信頼を損なう

先週、Moq の所有者の 1 人である Daniel Cazzulino ( kzu ) は、SponsorLink プロジェクトの管理者でもあり、 Moq バージョン 4.20.0 以降に SponsorLink を追加しました

この動きは、主に 2 つの理由からオープン ソース エコシステム全体に衝撃を与えました。Cazzulino にはプロジェクトの Moq を変更するあらゆる権利がある一方で、依存関係をバンドルする前にユーザー ベースに通知しなかったこと、およびSponsorLink DLL には難読化されたコードが含まれているため、変更が困難でしたリバースエンジニアリングするものであり、完全に「オープンソース」ではありません。

ドイツを拠点とするソフトウェア開発者 Georg Dangl 氏は、Moq の 4.20.0 リリースについて「バージョン 4.20 から SponsorLink が含まれるようです」と報告しました

「これはクローズドソースのプロジェクトで、難読化されたコードを含む DLL として提供されます。少なくともローカル データ (git config?) をスキャンし、現在の開発者のハッシュ化された電子メールをクラウド サービスに送信するようです。」

スキャン機能は、ビルド プロセス中に実行される .NET アナライザー ツールの一部であり、無効にするのは難しい、と Dangl 氏は警告しています。

「その背後にある理由は理解できますが、プライバシーの観点からすると、これは正直かなり恐ろしいことです。」

SponsorLink は、 GitHub スポンサーをライブラリに統合する手段であると説明しています。これにより、「ユーザーがスポンサーシップに適切にリンクされて、機能のロックが解除されたり、プロジェクトのサポートに値する評価を得たりすることができます」。

GitHub ユーザーの Mike ( d0pare ) が DLL を逆コンパイルし、ソース コードの大まかな再構成を共有しました。アナリストによると、ライブラリは「電子メールを取得するために外部 git プロセスを生成する」という。

次に、電子メール アドレスの SHA-256 ハッシュを計算し、それを SponsorLink の CDN: hxxps://cdn.devlooped[.]com/sponsorlinkに送信します。

Moq と SponsorLink 内に隠されたテレメトリ コード
Moq および SponsorLink (GitHub) 内に隠されたテレメトリ コード

「正直に言って、Microsoft は NuGet プロバイダーと連携するこのパッケージをブラックリストに載せるべきです」とオースティンを拠点とする開発者の Travis Taylor 氏は書いています

「作者は信用できません。これは信じられないほど愚かな行動で、多くの人に膨大な労力を費やしただけです。」

開発者は変化を擁護する

Cazzulino 氏はコメントの中でその理由を説明し、「4.20」バージョンは「人々があまり真剣に受け止めないようにするためのジャブ」だったと認めた。

「私はしばらくの間、スポンサーリンクを使って水をテストしてきました(発表から約 6 か月)」と Cazzulino 氏は言います。

「実際のフィードバックを得るのは難しいので、たとえ「少し」厳しいコメントであっても、本当に感謝しています!」

Cazzulino は、SponsorLink プロジェクトのREADMEをさらに更新し、以下に示す長い「プライバシーに関する考慮事項」セクションを追加しました。このセクションでは、実際の電子メール アドレスは収集されず、そのハッシュのみが収集されることを明確にしました。このアップデートは数時間前、反発が生じた後に行われた。

スポンサーリンクが明示的な同意なしにメールを収集しているのではないかという懸念がありました。これは誤りであり、Fiddler を実行してどのような種類のトラフィックが発生しているかを確認することで簡単に確認できます。

具体的には、スポンサーチェックを実行するときに実際の電子メールが送信されることはありません。ローカル マシン上の電子メールは SHA256 でハッシュされ、その後 Base62 でエンコードされます。結果として得られる不透明な文字列 (送信元の電子メールを明らかにすることはできません) のみが使用されます。

SponsorLink が実際にあなたの電子メール アドレスを取得するのは(スポンサーシップをリンクするために、その不透明な文字列と実際の電子メールおよび GH ユーザーとのバックエンド側の関連付けを実行するため)、 SponsorLink GitHub アプリをインストールし、そのための明示的な許可を与えたです。 。

また、アプリを一時停止またはアンインストールすると、アカウントと電子メールに関連付けられたすべての記録が削除されます。

「この通知は、プロジェクトがどのようなデータが収集されているかを率直に明らかにしたというよりは、オンラインの反発に対する事後対応のようだ」と、Sonatype の上級セキュリティ研究員である Ankita Lamba 氏はこのアップデートを発見した後に語った。

カズリーノ氏は過去にも、チェックの一部が回避されるのを防ぐために、スポンサーリンクをクローズドソースにし難読化したままにするという自身の決定を擁護した。彼の言葉によれば、図書館の不透明な機能は「仕様によるもの」だという。

潜在的なプライバシー上の懸念

moq などのプロジェクトに SponsorLink をひそかに含めることは、倫理的および法的な観点からプライバシーの問題です。

まず、オープン ソース チャネルを介して配布され、同じく Cazzulino によって作成され、何百万回もダウンロードされているGitInfoなどの人気の OSS プロジェクトに、あいまいなクローズド ソースの依存関係 (SponsorLink) が含まれているという問題が生じます。

電子メール アドレス ハッシュの収集も完全に匿名であるとは限りません。

少なくとも理論上は、SponsorLink の開発者は収集したハッシュをどこかに漏洩した電子メール アドレスのデータベースと比較し、ユーザーを特定することができます。

「私は、ハッシュ化を曖昧さによるセキュリティと考えています。ハッシュ化されたメールであっても、同意が得られた場合にのみ送信されるべきです」とミハウ ローゼンバウム氏は述べています

「深刻な懸念が提起されていると言えます。大多数のユーザーはこの変更が行われたことさえ知らず、問題を抱えているでしょう」と、別のソフトウェアエンジニアのケビン・ウォルター氏は述べています

「GDPRと同様、moqとの信頼関係も崩れた。控えめに言ってもこれは不当だ。善人の一人になれ」とウォルター氏はカズリーノ氏に、あいまいなSponsorLinkパッケージに関して透明性を高めるよう促した。

これに反応して、数人の開発者は、代替手段を選択し、SponsorLink を実行するプロジェクトを検出してブロックするツールを構築するために、Moq の使用を中止すると脅迫しました。

一部の企業はさらに一歩進んSponsorLink を使用するプロジェクトをボイコットしたり、「SponsorLink」をマルウェアとして NuGet レジストリに報告したりすることを提案しました [ 1、2 ]。

は、公開前に SponsorLink の作成者 Cazzulino にコメントを求めました。