Casi todos los desarrolladores utilizan bibliotecas de terceros, donde millones de desarrolladores comparten sus creaciones con el mundo, ya que utilizar módulos para ayudarte a solucionar tus tareas puede ser muy eficaz. Pero, cuando utilizas el código de otra persona, estás confiando plenamente en los creadores de ese código, ¿verdad? BitPay, desarrollador del monedero de criptomonedas de Copay, ha descubierto las desventajas de utilizar activos de terceros de código abierto.
Copay es básicamente una multiplataforma de monedero de criptomonedas Bitcoin/Bitcoin Cash que permite a los usuarios crear monederos compartidos; se ha desarrollado con JavaScript y TypeScript y depende de una gran cantidad de bibliotecas de código abierto de terceros.
Uno de ellos es un módulo Node.js de código abierto llamado event-stream. Su repositorio en el servicio de control de versiones GitHub se mantenía gracias a un desarrollador que había perdido interés en el proyecto hace mucho tiempo y que no se había interesado por el repositorio en años. Por tanto, cuando otro desarrollador con poca o ninguna actividad previa en GitHub se acercó y preguntó si podía obtener los derechos de administrador para mantener el repositorio, el desarrollador original le concedió derechos de acceso.
El nuevo desarrollador se puso directamente a trabajar. Primero, la biblioteca event stream comenzó a utilizar el módulo llamado flatmap-stream del repositorio de GitHub del mismo desarrollador. Entonces, modificó el módulo añadiendo un código malicioso y, tres días después de la actualización, subió otra versión de flatmap-stream, este sin el código malicioso, seguramente para ocultar su actividad.
Así acabo comprometida la biblioteca de evento-stream, la cual no solo utiliza BitPay, sino muchas otras compañías. Supuestamente, estuvo comprometida durante tres días, tiempo suficiente para que los desarrolladores de Copay, quienes no se percataron de la modificación con la carga maliciosa, incluyeran la versión actualizada en la biblioteca de su proyecto. El software del monedero de criptomonedas se publicó en tiendas de aplicaciones y muchos de sus usuarios lo acabaron descargando.
Quizá, los desarrolladores de Copay no quisieron dedicar mucho tiempo en revisar los cambios de las bibliotecas que utilizaron y de esta forma garantizar la seguridad del software. Actualmente, la actualización de las bibliotecas que se utilizan en un proyecto se puede automatizar fácilmente para que ofrezca servicios de gestión como npm, ya que con él un desarrollador puede ejecutar un único comando para actualizar todos los módulos de terceros utilizados en el proyecto.
Aunque los desarrolladores echaran un vistazo a las bibliotecas actualizadas, sería complicado encontrar el código malicioso. Las bibliotecas utilizadas en un proyecto pueden depender de otras bibliotecas (al igual que event-stream dependía de flatmap-stream) y comprobar todas las dependencias puede conllevar mucho tiempo.
Según CCN, la biblioteca de flatmap-stream fue modificada para filtrar claves privadas (básicamente, contraseñas de monederos de criptomonedas) desde aplicaciones que dependían tanto de las bibliotecas de event-stream como de las de copay-dash. Esto sugiere que fuera un ataque de ciberdelincuentes dirigido contra BitPay, los creadores de Copay y los autores de copay-dash. En este caso, las claves se filtrarían solo si ambas bibliotecas fueran utilizadas y solo en productos basados en el código de Copay.
Según ArsTechnica, la carga maliciosa permitía al ciberdelincuente conseguir acceso sin autorización a los monederos de los usuarios y transferir fondos desde ahí. Fue un usuario de GitHub el que descubrió e informó del error. Pero antes, ya se habían distribuido varias versiones de monederos de Copay con código malicioso. Finalmente, BitPay lo admitió y aconsejó a los clientes que utilizaban las versiones de la 5.0.2 a la 5.1.0 que actualizaran hasta la última versión, 5.2.0. De momento, no hay información disponible sobre el número de usuarios afectados y el dinero que han perdido.
Se trata de un clásico ataque a la cadena de suministro, en el cual un ciberdelincuente compromete una biblioteca de terceros utilizada por los desarrolladores de una aplicación. El problema está en utilizar un software de código abierto gestionado por cualquiera, ya que nadie puede garantizar que funcione como ha funcionado en versiones anteriores. Pero no podemos culpar del ataque de ciberdelincuentes a los desarrolladores de software de código abierto, pues ellos proporcionan sus productos tan cual, no prometen nada.
El problema es que Copay también es de código abierto y lo utilizan muchos desarrolladores de otros monederos de criptomonedas, lo cual puede complicar aun más las cosas.
Las empresas que proporcionan software (y sobre todo software que se utiliza para transferir grandes cantidades de dinero) deberían asegurarse de que, antes de lanzar su producto, se realicen comprobaciones de seguridad con análisis exhaustivos de todas las versiones de las bibliotecas de terceros utilizadas en su proyecto.
Lo mejor para evitar problemas de seguridad en el software sería echar un vistazo al estado del repositorio, considerar las calificaciones de otros desarrolladores, comprobar la frecuencia con la que se actualiza el proyecto, cuánto tiempo hace desde la última actualización y echar un vistazo al registro de errores. En caso de encontrar algo sospechoso, se debería realizar una investigación más profunda, si no, se pasa a otro módulo.
Si una biblioteca tiene algún problema de seguridad, los clientes culpan a la compañía que proporciona el software y que depende, a su vez, de la biblioteca, aunque la culpa sea realmente de los desarrolladores de esta. Evidentemente, no estamos diciendo que no utilices productos de código abierto, pero sí te aconsejamos que estés alerta y seas precavido.