Popular open source project Moq criticized for quietly collecting data
2023/08/09 BleepingComputer — オープンソース・プロジェクト Moq だが、最新リリースにおいて物議を醸す依存性が秘密裏に含まれていることで、厳しい批判を浴びている。NuGet ソフトウェア・レジストリで配布されている Moq は、1日に10万回以上もダウンロードされる存在であり、トータルでは 4億7600万回以上もダウンロードされている。そして、今週にリリースされた Moq の 4.20.0 には、SponsorLink という別のプロジェクトがひっそりと取り込まれていた。

オープンソース・プロジェクトに見える SponsorLink は、実際にはクローズド・ソースとして NuGet で出荷されており、難読化された DLL を含んでいる。その昨日は、ユーザーの電子メール・アドレスのハッシュを収集し、SponsorLink の CDN に送信するというものであり、プライバシーに関する懸念を引き起こしている。
Moq がユーザーの信頼を失う
先週のこと、Moq のオーナーの一人であり、SponsorLink プロジェクトも管理している Daniel Cazzulino (kzu) が、Moq のバージョン 4.20.0 以上に SponsorLink を追加した。
Cazzulinoには、自身のプロジェクトである Moq を変更する権利があるが、依存関係をバンドルする前にユーザー・ベースに通知しなかったこと、そして、SponsorLink DLL には難読化されたコードが含まれており、リバース・エンジニアリングが困難なことが問題視されている。
ドイツを拠点とするソフトウェア開発者である Georg Dang は、「Moq のバージョン 4.20 から、SponsorLink が含まれているようだ。これはクローズド・ソースのプロジェクトであり、難読化されたコードの DLL として提供されている。少なくとも、ローカル・データ (git config?) をスキャンし、その時点における開発者のハッシュ化された電子メールを、クラウド・サービスに送信するようだ」と報告している。
そのスキャン機能は、ビルド・プロセス中に実行される .NET アナライザー・ツールの一部であり、無効化するのは難しいと Dangl は警告する。彼は、「理由は理解できるが、プライバシーの観点からは正直かなり怖い」と付け加えている。
SponsorLink については、「GitHub スポンサーをライブラリに統合するための手段である。ユーザーがスポンサーシップに適切にリンクされ、機能のロック解除や、プロジェクトをサポートを得るための評価などが行われる」と説明されている。
GitHubユーザーである Mike (d0pare) は、問題の DLL を逆コンパイルし、ソースコードの大まかな再構築を共有した。このアナリストによると、一連のライブラリは、外部 git プロセスを起動して電子メールを取得するとのことだ。
そして、メールアドレスの SHA-256 ハッシュを計算し、SponsorLink の CDN:hxxps://cdn.devlooped[.]com/sponsorlink に送信するという。

オースティンを拠点とする開発者 Travis Taylo は、「正直なところ、Microsoft は NuGet プロバイダーと連携する、このパッケージをブラックリストに載せるべきだ。この作者は信用できない。これは信じられないほど愚かな行動であり、多くの人に多大な労力を強いることになった」と指摘している。
開発者による変更と弁明
Cazzulino はコメントを介して、「バージョン 4.20 は、人々がそれほど真剣に受け取らないようにするためのジャブだった。私は、発表から6ヶ月間ほど、SponsorLink でテストをしてきた。実際のフィードバックを得るのは意味のあることなので、たとえコメントが “少し” 辛辣であったとしても、本当に感謝している」と述べている。
さらに Cazzulino は、SponsorLink プロジェクトの README を更新し、以下に示す長い「プライバシーに関する考慮事項」のセクションを追加した。このアップデートは数時間前に行われた。
README — SponsorLink が、あなたの明示的な同意なしに、あなたの電子メールを収集しているのかという懸念があった。これは間違いであり、Fiddler を実行すれば、どのようなトラフィックが発生しているのかを簡単に検証できる。
具体的には、スポンサリング・チェックを行う際に、実際の Eメールが送信されることはない。ローカル・マシン上のメールは SHA256 でハッシュ化され、その後に Base62 エンコードされる。その結果得られる不透明な文字列 (送信元の電子メールが明らかになることはない) だけが使用される。
実際に SponsorLink が、あなたのメール・アドレスを取得するのは (その不透明な文字列と実際のメールおよび、GH ユーザーとの関連付けをバックエンド側で行い、あなたのスポンサーシップをリンクするため)、あなたが SponsorLink GitHub アプリをインストールし、明示的な許可を与えた後だけである。
また、このアプリを停止または、アンインストールした瞬間に、あなたのアカウントと電子メールに関連する全てのレコードは削除される — README
Sonatype の Senior Security Researcher である Ankita Lamba は、このアップデートを発見した後に、「過去に Cazzulino は、SponsorLink をクローズド・ソースにして難読化し、チェックの一部がバイパスされるのを防ごうとした、自身の決定を擁護したこともある。彼の言葉を借りれば、ライブラリの不透明な機能は “デザインによるもの” なのだ」と、BleepingComputerに語っている。
潜在的なプライバシーの懸念
Moq のようなプロジェクトに、SponsorLink が秘密裏に組み込まれていることは、倫理的/法的な観点においてプライバシーに関わる問題である。
まず、無名のクローズド・ソースの依存関係 (SponsorLink) が、オープンソースのチャネルを通じて配布されことが問題だ。さらに、Cazzulino により作成され、何百万回もダウンロードされている GitInf- などの、人気の OSS プロジェクトに含まれているという問題がある。
メールアドレス・ハッシュの収集も、完全に匿名というわけではないかもしれない。
少なくとも理論的には、SponsorLink の開発者は、どこかで流出したメール・アドレスのデータベースと、採取したハッシュを比較し、ユーザーを特定することができる。
Michał Rosenbaum は、「このハッシュは曖昧さによるセキュリティだと考えている。ハッシュ化されたメールであっても、同意の後にのみ送信されるべきだ。
ソフトウェア・エンジニアである Kevin Walter は、「深刻な懸念が提起されたと言えるだろう。大多数のユーザーは、この変更が行われたことすら知らないし、問題を起こすだろう」と述べている。
Moq との信頼関係は、GDPR のケースと同様に崩れた。これは控えめに言っても卑怯な方法だ。善人の一人になってほしい。不明瞭な SponsorLink パッケージに関して、Cazzulino は透明性を高めるべきだ。
その反応として、何人かの開発者は、Moq [1, 2] の使用を中止して代替品を選ぶと述べ、また、SponsorLink を実行するプロジェクトを検出して、ブロックするツールを構築している。
さらに一歩進んで、SponsorLink を使用するプロジェクトのボイコットや、NuGet レジストリに “SponsorLink” をマルウェアとして報告すると示唆する者もいた。
BleepingComputer は、この掲載に先立ち、SponsorLink の作成者である Cazzulino に連絡を取り、コメントを求めている。
たしかに何をやっても開発者の自由ですが、この Moq の依存関係に組み込まれた SponsorLink という存在は、今後のソフトウェア・リポジトリに、とても厄介な問題のタネを残しそうに思えます。そして、.NET の OSS プロダクトを流通させる NuGet ですが、Microsoft と .NET Foundation が立ち上げたと、Wikipedia には記されています。つい先日の 2023/08/08 には、「Microsoft VS Code に脆弱性:悪意のエクステンションに認証トークン窃取の構造的な欠陥?」という記事もポストされていました。いろんな問題を抱え込む、Microsoft ですね。

You must be logged in to post a comment.