
PyPI es el índice oficial de paquetes de Python que actualmente contiene 500.972 proyectos, 5.228.535 millones de versiones, 9.950.103 millones de archivos y 770.841 usuarios. PyPI ayuda a los usuarios a localizar e instalar software desarrollado y publicado por la comunidad Python, además de servir como repositorio donde los desarrolladores pueden distribuir su software.
También: Cómo usar ChatGPT para escribir código
Recientemente, el especialista en ciberseguridad ESET descubrió una serie de proyectos maliciosos de Python dentro de PyPI, cada uno de los cuales implementó una puerta trasera personalizada que contenía funcionalidad de ciberespionaje. El código malicioso permitía la ejecución y exfiltración de archivos e incluso, en ciertos escenarios, podía permitir que se tomaran capturas de pantalla de la pantalla de un usuario. ESET también informó que, en algunos casos, se entrega en su lugar el W4SP Stealer (que desvía datos del usuario) o un monitor de portapapeles que roba criptomonedas.
En total, se cargaron 116 paquetes maliciosos en PyPI en 53 proyectos y se descargaron más de 10.000 veces.
Según el investigador de ESET Marc-Etienne M.Léveillé, «Algunos nombres de paquetes maliciosos se parecen a otros paquetes legítimos, pero creemos que la forma principal en que las víctimas potenciales los instalan no es a través de typosquatting, sino mediante ingeniería social, donde son instalados». Revisé la ejecución de pip para instalar un paquete ‘interesante’ por cualquier motivo».
En su publicación de blog, «Un pernicioso popurrí de paquetes de Python en PyPI«, dijo M. Léveillé, «los ciberatacantes siguen abusando de PyPI para comprometer los dispositivos de los programadores de Python». Y continúa: «Esta campaña muestra una variedad de técnicas que se utilizan para incluir malware en paquetes de Python. Los desarrolladores de Python deben examinar minuciosamente el código que descargan, especialmente comprobando estas técnicas, antes de instalarlo en sus sistemas. Además de seguir abusando del W4SP Stealer de código abierto, los operadores también han implementado una puerta trasera simple pero efectiva. Esperamos que este abuso de PyPI continúe y recomendamos precaución al instalar código desde cualquier repositorio de software público».
Cuando ESET publicó sus hallazgos, PyPI había eliminado la mayoría de los paquetes. Y, en este punto, todos los paquetes maliciosos conocidos ahora están fuera de línea.
Los operadores detrás de este subterfugio utilizaron tres técnicas diferentes para la campaña: colocar un módulo de prueba con un código malicioso mínimo y ligeramente ofuscado; incrustar código de PowerShell en el archivo setup.py; e incluir solo código malicioso en el paquete que está ligeramente ofuscado.
En Windows, la puerta trasera se implementó en Python. En Linux, la puerta trasera utilizaba el lenguaje Go.
Dado lo extendido que está Python, los desarrolladores deberían examinar cualquier código de terceros que utilicen antes de agregarlo a sus proyectos. ESET cree firmemente que el abuso de PyPI continuará. M. Léveillé llegó incluso a recomendar precaución al «instalar código desde cualquier repositorio de software público».