El popular proyecto PyTorch de Python para científicos de datos y desarrolladores de aprendizaje automático se ha convertido en el último proyecto de código abierto objeto de un ataque de confusión de dependencias.
Un atacante desconocido introdujo un binario malicioso en el proyecto de aprendizaje automático PyTorch mediante el registro de un proyecto malicioso en el Python Package Index (PyPI), infectando las máquinas de los usuarios si descargaban una compilación nocturna entre el 25 y el 30 de diciembre.
La Fundación PyTorch declaró en un aviso el 31 de diciembre que se trataba de un ataque de confusión de dependencias, en el que una entidad desconocida creó un paquete en el índice de paquetes de Python con el mismo nombre, torchtriton, que una biblioteca de código de la que depende el proyecto PyTorch. La biblioteca maliciosa incluía las funciones normalmente utilizadas por PyTorch pero con una modificación maliciosa: Cargaba datos desde el sistema de la víctima a un servidor en un dominio ya desaparecido.
La función maliciosa obtenía diversa información específica del sistema, el nombre de usuario, variables de entorno, una lista de hosts a los que se conecta la máquina de la víctima, la lista de hashes de contraseñas y los 1.000 primeros archivos del directorio personal del usuario.
"Dado que el índice PyPI tiene prioridad, este paquete malicioso se instalaba en lugar de la versión de nuestro repositorio oficial", señala el aviso. "Este diseño permite a alguien registrar un paquete con el mismo nombre que uno que existe en un índice de terceros, y [el gestor de paquetes] instalará su versión por defecto".
Puede leer también | 10 bibliotecas de Python para mejorar la accesibilidad de la IA
Este es el último ataque a la cadena de suministro de software dirigido contra repositorios de código abierto. A mediados de diciembre, por ejemplo, los investigadores descubrieron un paquete malicioso disfrazado de cliente de la empresa de ciberseguridad SentinelOne que se había subido a PyPI. En noviembre, en otro ataque de confusión de dependencias, los atacantes crearon más de dos docenas de clones de software popular con nombres diseñados para engañar a los desarrolladores incautos. Ataques similares han tenido como objetivo el repositorio Nuget, centrado en .NET, y el ecosistema del gestor de paquetes Node.js (npm).
Mismo nombre, distintos paquetes
En el último ataque a PyTorch, el atacante utilizó el nombre de un paquete de software que los desarrolladores de PyTorch cargarían desde el repositorio privado del proyecto, y como el paquete malicioso existía en el repositorio PyPI, adquirió prioridad. La Fundación PyTorch eliminó la dependencia en sus compilaciones nocturnas y sustituyó el proyecto PyPI por un paquete benigno, según el aviso.
El grupo también ha eliminado todas las compilaciones nocturnas que dependen de la dependencia torchtriton de la página de descargas del proyecto y dice que planea tomar posesión del proyecto torchtriton en PyPI.
Afortunadamente, como la dependencia de torchtriton sólo se importó en las compilaciones nocturnas del programa, el impacto del ataque no se propagó a los usuarios típicos, dijo Paul Ducklin, investigador científico principal de la empresa de ciberseguridad Sophos, en una entrada de blog.
"Suponemos que la mayoría de los usuarios de PyTorch no se habrán visto afectados por esto, ya sea porque no utilizan construcciones nocturnas, o no estaban trabajando durante el período de vacaciones, o ambas cosas", escribió. "Pero si usted es un entusiasta de PyTorch que juega con las versiones nocturnas, y si ha estado trabajando durante las vacaciones, entonces, incluso si no puede encontrar ninguna evidencia clara de que fue comprometido, es posible que desee considerar la generación de nuevos pares de claves SSH como medida de precaución, y la actualización de las claves públicas que ha subido a los distintos servidores a los que accede a través de SSH."
La Fundación PyTorch confirmó que los usuarios de la versión estable de la biblioteca PyTorch no se verían afectados por el problema.
Puede leer también | ¿Cómo crear un modelo de inteligencia artificial con el lenguaje de programación Python?
¿Intenciones equivocadas?
En un mea culpa ampliamente difundido, el atacante afirmaba que era un investigador legítimo y que el problema era el resultado de su investigación sobre problemas de confusión de dependencia.
"Quiero asegurar que no era mi intención robar los secretos de nadie", escribió la persona, afirmando haber notificado el problema a Facebook el 29 de diciembre y haber informado a las empresas a través de la plataforma de crowdsourcing HackerOne. "Si mis intenciones hubieran sido maliciosas, nunca habría rellenado [sic] ningún informe de bug bounty, y me habría limitado a vender los datos al mejor postor".
Debido a esta declaración, algunos expertos consideraron que el aviso de PyTorch era una "falsa alarma", pero ha habido otros atacantes que se han puesto el manto de investigador incomprendido.
Además, el impacto del ataque podría haber expuesto información sensible de las víctimas, incluso si la persona detrás del malware tenía buenas intenciones, escribió Ducklin de Sophos en una entrada de blog sobre el ataque a la cadena de suministro de software.
"¿Cómo puede ser esto una 'falsa alarma'? ", dijo también en un tuit. "Este malware roba deliberadamente tus datos... y los transmite codificados, no encriptados... de modo que cualquiera en tu ruta de red que los haya grabado puede decodificarlos trivialmente".
Créditos: Dark Reading