Foto de Pixabay

Si haces tus deberes seguro que conoces esta polemica, en caso contrario, te interesa saber que pasó con Moq y mi opinión al respecto.

Introducción

El «mocking» es uno de los métodos utilizados en Test Driven Development (TDD) y las pruebas unitarias para aislar el sistema que estamos probando.

Moq es una biblioteca de «mocking» muy popular que podemos utilizar para escribir pruebas unitarias en .Net; nos permite crear objetos falsos para nuestras pruebas.

El problema

Daniel Cazzulino, el autor de la biblioteca Moq, introdujo una aplicación llamada Sponsorlink y la integró en la versión 4.20 de Moq.  Este Sponsorlink que agregó en la versión 4.20 almacena correo en Azure sin el consentimiento de los usuarios, una vulnerabilidad de seguridad crítica (https://github.com/devlooped/moq/issues/1372#issuecomment-1670344399).

¿Qué es SponsorLink?

SponsorLink es una iniciativa para «movitar» a los desarrolladores a que apoyemos financieramente a nuestros colegas desarrolladores que producen herramientas de código abierto de indudable valor. SponsorLink en una librería que envia recordatorios a los usuarios sobre la posibilidad de patrocinio dentro del entorno de desarrollo Visual Studio.

¿Cómo funciona Sponsorlink?

  • Un desarrollador está utilizando Visual Studio y si tiene conectividad a internet, SponsorLink ejecuta git config –get user.email durante la compilación para recuperar el correo electrónico configurado del desarrollador.
  • Este correo electrónico (codificado y cifrado) se utiliza para verificar si el desarrollador ha instalado la aplicación GitHub de SponsorLink (a un servicio de Azure).
  • Verifica si el desarrollador está patrocinando el proyecto.
  • Si el desarrollador no está patrocinando, mostrará enlaces para instalar la aplicación y patrocinar el proyecto.
El impacto de Sponsorlink

Es una gran violación de la privacidad. Si usas esta biblioteca, tu correo electrónico será procesado sin tu consentimiento en un servicio de Azure.

Si no eres un patrocinador o la verificación falla, recibirás una advertencia que romperá tu compilación si tienes TreatWarningsAsErrors en true.

Pero lo más importante, más que rompa tu compilación, es que estando en la Unión Europea, esto es una violación del GDPR porque el correo electrónico se considera información personalmente identificable y Sponsorlink no te da la posibilidad de hacer el proceso GDPR conforme a las leyes de la UE.

¿En que punto estamos ahora?

Los cambios relacionados con Sponsorlink se revirtieron en la versión 4.20.2. La razón para revertir el cambio no fue la la violación del GDPR, sino más bien a que no funciona en MacOS y Linux. Por tanto, el autor, cuando resuelva estos temas en esos sistemas operativos  puede agregar estos cambios cuando lo considere oportuno. Si quieres más detalles: https://github.com/devlooped/moq/pull/1375

Para ser claro y responder a la pregunta: Sponsorlink actualmente no está incluido en las últimas versiones de Moq, pero eso no significa que no regrese. Para más detalles: https://github.com/devlooped/moq/issues/1374

¿Continuar usando Moq?

Advierto: esto es mi opinión personal.

Si es posible, deberíamos eliminar la biblioteca Moq de todos nuestros proyectos. Estoy proponiendo NSubstitute. aunque existe un fork  de Moq llamado CleanMock que tiene eliminado SponsorLink.

Sea cual sea tu elección, al menos debes saber que si llevabas las bibliotecas actualizadas a la última versión, los correos electrónicos de tu equipo de desarrollo se han visto comprometidos.