受欢迎的开源项目 Moq 因悄悄收集数据而受到批评

发布时间:2023-08-10 08:17

哎呀

开源项目 Moq(发音为“Mock”)因其在其最新版本中悄悄包含有争议的依赖项而招致了尖锐的批评。

Moq 分布在 NuGet 软件注册表上,每天的下载量超过 100,000 次,在其生命周期内下载量超过 4.76 亿次。

Moq 本周发布的 4.20.0 版本悄然包含了另一个项目 SponsorLink,该项目在开源软件消费者中引起了轩然大波,他们将此举比作违反信任。

SponsorLink 看似开源项目,实际上是作为闭源代码在 NuGet 上提供的,并且包含混淆的 DLL,这些 DLL 收集用户电子邮件地址的哈希值并将其发送到 SponsorLink 的 CDN,引发了隐私问题。

起订量破坏了用户信任

上周,Moq 的所有者之一 Daniel Cazzulino ( kzu )(同时维护 SponsorLink 项目) 将 SponsorLink 添加到 Moq  4.20.0 及更高版本中。

这一举动在开源生态系统中引起了巨大的冲击,主要有两个原因——虽然 Cazzulino 完全有权更改他的项目 Moq,但他在捆绑依赖项之前没有通知用户群,而且 SponsorLink DLL 包含混淆的代码,这使得它很难 实现。进行逆向工程,而不是完全“开源”。

德国软件开发商 Georg Dangl在谈到 Moq 的 4.20.0 版本时表示:“似乎从 4.20 版本开始,就包含了 SponsorLink。”

“这是一个闭源项目,以带有混淆代码的 DLL 形式提供,它似乎至少会扫描本地数据(git config?)并将当前开发人员的哈希电子邮件发送到云服务。”

Dangl 警告说,扫描功能是在构建过程中运行的 .NET 分析器工具的一部分,并且很难禁用。

“我可以理解其背后的原因,但从隐私的角度来看,这确实非常可怕。”

SponsorLink将自己描述为一种将GitHub 赞助商集成到您的库中的方法  ,以便“用户可以正确链接到他们的赞助商以解锁功能,或者只是获得他们支持您的项目应得的认可。”

GitHub 用户 Mike ( d0pare ) 反编译了 DLL,并分享了源代码的粗略重构。据分析师称,该库“产生外部 git 进程来获取您的电子邮件。”

然后,它计算电子邮件地址的 SHA-256 哈希值并将其发送到 SponsorLink 的 CDN:  hxxps://cdn.devlooped[.]com/sponsorlink

遥测代码隐藏在 Moq 和 SponsorLink 中
隐藏在 Moq 和 SponsorLink (GitHub)中的遥测代码

“老实说,微软应该将这个与 NuGet 提供商合作的软件包列入黑名单,”奥斯汀的开发人员 Travis Taylor写道。

“作者不可信任。这是一个极其愚蠢的举动,却为很多人创造了大量的工作。”

开发商捍卫变革

卡祖里诺在评论中解释了他的理由,承认“4.20”版本是“一种刺痛,这样人们就不会那么认真地对待它”。

“我已经用 SponsorLink 试水一段时间了(自 宣布以来约 6 个月),”Cazzulino 说。

“很难得到实际的反馈,所以即使评论‘有点’严厉,我真的很感激!”

Cazzulino 进一步更新了 SponsorLink 项目的自述文件 ,其中包含如下所示的冗长的“隐私注意事项”部分,该部分澄清了没有实际的电子邮件地址,仅收集了它们的哈希值。这一更新是 在几个小时前——在强烈反对出现之后——发布的。

有人担心 SponsorLink 可能会在未经您明确同意的情况下收集您的电子邮件。这是不正确的,可以通过运行 Fiddler 来查看正在发生的流量类型来轻松验证。

具体来说,在执行赞助检查时永远不会发送实际的电子邮件。您本地计算机上的电子邮件使用 SHA256 进行哈希处理,然后进行 Base62 编码。所得到的不透明字符串(永远不会泄露原始电子邮件)是唯一使用的东西。

SponsorLink 真正获取您的电子邮件地址(以执行该不透明字符串与您的实际电子邮件和 GH 用户的后端关联以链接您的赞助)的唯一时刻是在您安装 SponsorLink GitHub 应用程序并授予其 明确 的 许可 之后。

此外,当您暂停或卸载应用程序时,我们会删除与您的帐户和电子邮件关联的所有记录。

Sonatype 高级安全研究员 Ankita Lamba 在发现更新后告诉:“该通知似乎是对网上强烈反对的反应,而不是该项目预先说明正在收集哪些数据。”

过去,Cazzulino 还为自己保持 SponsorLink闭源 和混淆的决定进行了辩护,以防止其某些检查被绕过。用他的话说,图书馆的不透明特征是“设计使然”。

潜在的隐私问题

从道德和法律的角度来看,将 SponsorLink 悄然纳入 MOQ 等项目中是一个隐私问题。

首先是一个模糊的闭源依赖项 (SponsorLink) 的问题,该依赖项通过开源渠道分发,并包含在流行的 OSS 项目中,例如GitInfo,它也是由 Cazzulino 创建并下载了数百万次。

电子邮件地址哈希值的收集也可能不完全是匿名的。

至少从理论上来说,SponsorLink 的开发人员可以将收集到的哈希值与泄露的电子邮件地址数据库进行比较,并识别用户。

“我认为散列更多地是一种默默无闻的安全性。即使是经过散列处理的邮件也只能在征得同意后才发送,”  Michał Rosenbaum 说道。

“我想说,现在已经引起了严重的担忧。绝大多数用户甚至不知道已经进行了此更改,并且会遇到问题,” 另一位软件工程师 Kevin Walter表示。

“与 GDPR 一样,对起订量的信任现在已经被打破。至少可以说,这是卑鄙的行为。成为好人之一,”沃尔特敦促卡祖里诺在晦涩难懂的 SponsorLink 套餐方面更加透明。

作为回应,一些开发人员要么威胁停止使用 Moq [ 1 , 2 ],转而采用替代方案,要么构建工具来检测和阻止任何运行 SponsorLink 的项目。

有些人更进一步,建议他们 抵制使用 SponsorLink 的项目,甚至将“SponsorLink”作为恶意软件报告给 NuGet 注册表 [ 1 , 2 ]。

BleepingComputer 在发布前联系了 SponsorLink 的创建者 Cazzulino 征求意见。

客户热线:037125966675