En esta página:
La empresa de ciberseguridad Phylum detecto código malicioso en un paquete de la plataforma PyPI.
El paquete se llama requests-darwin-lite y está disfrazado de unas líneas de código que parecen normales, pero algunas hacen cosas extrañas.
En este artículo hablaremos sobre un Código Malicioso en la Plataforma PyPI, vamos con ello.
El paquete requests-darwin-lite es una bifurcación del popular paquete request y traía un archivo PNG con código binario malicioso basado en el lenguaje de programación Go.
El usuario malicioso lanzó el día 16 de mayo de 2024 el paquete llamado ml-linear-regression.
Este nuevo paquete traía un archivo PDF llamado simple_linear_regression.pdf, el cual venia con código malicioso escrito en el lenguaje de programación Go.
Asimismo, este paquete incluye el UUID 3E7C2DED-1099-5E75-B96F-B63D5F8C479E como ID de una victima objetivo.
El usuario malicioso pretendía conseguir victimas por medio de varios paquetes.
Paquete requests-darwin-lite
Volviendo con este paquete, traía un atributo setuptools llamado cmdclass.
El paquete original request usa cmdclass para personalizar la ejecución de pruebas mediante comandos de configuración.
El usuario malicioso implementó pruebas en paralelo para optimizar el rendimiento del código malicioso en función a la cantidad de núcleos de la CPU de las víctimas.
En este repositorio puedes encontrar el código original del archivo setup.py del paquete request.
Sobre el final del archivo, en la sección setup puedes ver que hace uso del atributo cmdclass:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
setup( ... ... ... ... ... zip_safe=False, classifiers=[ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries", ], cmdclass={"test": PyTest}, # Este atributo tests_require=test_requirements, extras_require={ "security": [], "socks": ["PySocks>=1.5.6, !=1.5.7"], "use_chardet_on_py3": ["chardet>=3.0.2,<6"], }, project_urls={ "Documentation": "https://requests.readthedocs.io", "Source": "https://github.com/psf/requests", }, ) |
Y esto es legítimo porque es parte del paquete request que todos usamos.
Pero aquí viene el problema con el paquete requests-darwin-lite, en cierta parte de su código parece malicioso.
El usuario malicioso insertó otro elemento llamado PyInstall en el atributo cmdclass:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
setup( # --- CLIPPED --- cmdclass={ "install" : PyInstall, # Este elemento "test": PyTest, }, tests_require=test_requirements, extras_require={ "security": [], "socks": ["PySocks>=1.5.6, !=1.5.7"], "use_chardet_on_py3": ["chardet>=3.0.2,<6"], }, project_urls={ "Documentation": "<https://requests.readthedocs.io>", "Source": "<https://github.com/psf/requests>", }, ) |
El elemento PyInstall se ejecuta cuando la víctima instala el paquete requests-darwin-lite.
Este elemento está dirigido a los usuarios con sistemas operativos macOS.
PyInstall decodifica un string codificado en base64 y obtiene el UUID de la computadora.
Una vez obtenido el UUID de la computadora de las victimas, pueden atacarla.
El usuario malicioso podrá realizar pruebas operativas en las computadoras para posteriormente implementar malware.
El paquete requests-darwin-lite incluía un archivo PNG que pesaba 17 MB, algo muy inusual.
Esta imagen pudo estar siendo usada para insertar datos a las computadoras de las víctimas.
Felizmente, la empresa Phylum informó a PyPI lo acontecido y eliminaron el paquete requests-darwin-lite y todas sus variantes.
Conclusión
No es la primera ves que la plataforma PyPI sufre este tipo de ataques.
Así que probablemente hayan más en el futuro.
Mantente alerta para que no seas victima de este tipo de ataques.
Nota(s)
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.