Recentemente, o Projeto Moq foi criticado por coletar dados discretamente ao usar outro projeto, o SponsorLink.
O projeto de código aberto Moq atraiu fortes críticas por incluir discretamente uma dependência controversa em seu último lançamento.
Projeto Moq foi criticado por coletar dados discretamente
Distribuído no registro de software NuGet, o Moq recebe mais de 100.000 downloads em um determinado dia e foi baixado mais de 476 milhões de vezes ao longo de sua vida útil.
O lançamento do Moq 4.20.0 desta semana incluiu discretamente outro projeto, o SponsorLink, que causou alvoroço entre os consumidores de software de código aberto, que compararam a mudança a uma quebra de confiança.
Aparentemente um projeto de código aberto, o SponsorLink é realmente enviado no NuGet como código fechado e contém DLLs ofuscadas que coletam hashes de endereços de e-mail do usuário e os enviam para o CDN do SponsorLink, levantando questões de privacidade.
Na semana passada, um dos proprietários do Moq, Daniel Cazzulino (kzu), que também mantém o projeto SponsorLink, adicionou o SponsorLink às versões 4.20.0 e superiores do Moq.
Essa mudança causou ondas de choque em todo o ecossistema de código aberto em grande parte por dois motivos – embora Cazzulino tenha todo o direito de alterar seu projeto Moq, ele não notificou a base de usuários antes de agrupar a dependência e as DLLs SponsorLink contêm código ofuscado, dificultando para engenharia reversa, e não exatamente “código aberto”.
“Parece que a partir da versão 4.20, o SponsorLink está incluído”, relatou o desenvolvedor de software alemão Georg Dangl, referindo-se ao lançamento 4.20.0 do Moq.
“Este é um projeto de código fechado, fornecido como uma DLL com código ofuscado, que parece pelo menos escanear dados locais (git config?)”
“A capacidade de verificação faz parte da ferramenta analisadora .NET que é executada durante o processo de compilação e é difícil de desativar”, adverte Dangl.
“Eu posso entender o raciocínio por trás disso, mas isso é honestamente muito assustador do ponto de vista da privacidade.”
O SponsorLink se descreve como um meio de integrar o GitHub Sponsors em suas bibliotecas para que “os usuários possam ser vinculados adequadamente ao seu patrocínio para desbloquear recursos ou simplesmente obter o reconhecimento que merecem por apoiar seu projeto”.
O usuário do GitHub Mike (d0pare) descompilou as DLLs e compartilhou uma reconstrução aproximada do código-fonte. A biblioteca, de acordo com o analista, “gera um processo git externo para obter seu e-mail”.
Em seguida, ele calcula um hash SHA-256 dos endereços de e-mail e o envia para o CDN do SponsorLink: hxxps://cdn.devlooped[.]com/sponsorlink.
Código de telemetria oculto em Moq e SponsorLink (GitHub)
“Honestamente, a Microsoft deveria colocar na lista negra este pacote trabalhando com os provedores NuGet”, escreve o desenvolvedor Travis Taylor, de Austin.
“Não se pode confiar no autor. Este foi um movimento incrivelmente estúpido que acabou de criar uma tonelada de trabalho para muitas pessoas.”
Em comentário, Cazzulino explicou as suas razões, admitindo que a versão “4.20” foi “um golpe para que as pessoas não a levassem tão a sério”.
“Estou testando as águas com o SponsorLink há algum tempo (cerca de 6 meses desde o anúncio)”, diz Cazzulino.
“Tem sido difícil obter feedback real, por isso, mesmo que os comentários sejam um pouco duros, eu realmente aprecio isso!”
Cazzulino atualizou ainda mais o README do projeto SponsorLink com uma longa seção “Considerações de privacidade” mostrada abaixo que esclarece que nenhum endereço de e-mail real, apenas seus hashes, está sendo coletado.
A atualização veio algumas horas atrás – depois que a reação surgiu.
Houve alguma preocupação de que o SponsorLink pudesse estar coletando seu e-mail sem o seu consentimento explícito. Isso está incorreto e pode ser facilmente verificado executando o Fiddler para ver que tipo de tráfego está acontecendo.
Especificamente, o e-mail real nunca é enviado ao realizar a verificação de patrocínio. O e-mail em sua máquina local é hash com SHA256 e, em seguida, codificado em Base62. A string opaca resultante (que nunca pode revelar o e-mail de origem) é a única coisa usada.
O único momento em que o SponsorLink realmente obtém seu endereço de e-mail (para executar a associação de back-end dessa string opaca com seu e-mail real e o usuário do GH para vincular seu patrocínio) é depois que você instala o aplicativo SponsorLink GitHub e concede permissão explícita para isso .
Além disso, no momento em que você suspende ou desinstala o aplicativo, excluímos todos os registros associados à sua conta e ao(s) seu(s) e-mail(s).
“O aviso parece ser uma resposta reativa à reação online, em vez de o projeto ser direto sobre quais dados estavam sendo coletados”, disse Ankita Lamba, pesquisador sênior de segurança da Sonatype após detectar a atualização.
No passado, Cazzulino também defendeu sua decisão de manter o código do SponsorLink fechado e ofuscado para evitar que algumas de suas verificações fossem contornadas. Em suas palavras, as características opacas da biblioteca são “projetadas”.
A inclusão discreta do SponsorLink em projetos, como moq, é uma questão de privacidade do ponto de vista ético e legal.
Primeiro, vem a questão de uma obscura dependência de código fechado (SponsorLink) sendo distribuída por canais de código aberto e incluída em projetos OSS populares, como o GitInfo – que também é criado por Cazzulino e baixado milhões de vezes.
A coleta de hashes de endereço de e-mail também não pode ser totalmente anônima.
Pelo menos em teoria, o desenvolvedor do SponsorLink poderia comparar os hashes colhidos com um banco de dados de endereços de e-mail vazados em algum lugar e identificar os usuários.
“Considero seu hash mais como uma segurança por obscuridade. Mesmo mensagens com hash devem ser enviadas somente após consentimento”, afirma Michał Rosenbaum.
“Eu diria que sérias preocupações foram levantadas agora. A grande maioria dos usuários nem sabe que essa mudança foi feita e teria um problema”, afirma outro engenheiro de software, Kevin Walter.
“A confiança com o moq agora está quebrada, assim como o GDPR. Isso é no mínimo dissimulado. Seja um dos mocinhos”, Walter pediu a Cazzulino que fosse mais transparente em relação ao obscuro pacote SponsorLink.
Em reação, vários desenvolvedores ameaçaram interromper o uso do Moq] em favor de alternativas e criar ferramentas que detectariam e bloqueariam qualquer projeto que executasse o SponsorLink.
Alguns foram um passo além, sugerindo que iriam boicotar projetos que usam SponsorLink ou mesmo relatar “SponsorLink” como malware para o registro do NuGet.