Un actor de amenazas desconocido ha publicado paquetes maliciosos en el repositorio Python Package Index (PyPI) durante casi seis meses. Estos paquetes, denominados typosquat, tienen nombres similares a los de bibliotecas legítimas y buscan instalarse en sistemas para entregar malware que puede obtener persistencia, robar datos confidenciales y acceder a billeteras de criptomonedas.
El mecanismo del typosquatting
El ataque se basa en la publicación de paquetes maliciosos con nombres cercanos a los legítimos, esperando que los desarrolladores los instalen por error. Según un informe de Checkmarx, 27 paquetes falsificados atrajeron miles de descargas, principalmente desde EE.UU., China, Francia, Hong Kong, Alemania, Rusia, Irlanda, Singapur, Reino Unido y Japón.
Esteganografía para ocultar el malware
Una característica definitoria del ataque fue la utilización de esteganografía. El código malicioso se escondió dentro de un archivo de imagen aparentemente inocente, lo que aumentó el sigilo del ataque.
Paquetes falsificados y su funcionamiento
Algunos de los paquetes incluyen pyefflorer, pyminor, pyowler, pystallerer, pystob y pywool. El último se publicó el 13 de mayo de 2023. Estos paquetes usan el script setup.py para incluir referencias a otros paquetes maliciosos como pystob y pywool, que implementan un script de Visual Basic (VBScript) para descargar y ejecutar un archivo llamado «Runtime.exe».
Incrustado en el binario hay un archivo compilado capaz de recopilar información de navegadores web, billeteras de criptomonedas y otras aplicaciones. Además, se observó una cadena de ataque alternativa que ocultaba el código ejecutable dentro de una imagen PNG llamada «uwu.png», la cual se decodifica y ejecuta para extraer la dirección IP pública y el identificador único universal (UUID) del sistema afectado.
Protestware en npm
Paralelamente, ReversingLabs descubrió una nueva ola de paquetes npm de protestware que ocultan scripts que transmiten mensajes de paz relacionados con los conflictos en Ucrania, Israel y la Franja de Gaza. Uno de estos paquetes, @snyk/sweater-comb (versión 2.1.1), determina la ubicación geográfica del host y muestra un mensaje criticando la «invasión injustificada de Ucrania» si se encuentra que es Rusia.
Otro paquete, e2eakarev, tiene una descripción en el archivo package.json que indica que es un «paquete de protesta libre de Palestina». Lleva a cabo comprobaciones para ver si la dirección IP se resuelve en Israel y, en ese caso, registra un mensaje de protesta inofensivo.
Riesgos de exponer secretos en paquetes
GitGuardian reveló que existen 3.938 secretos o credenciales únicos en 2.922 proyectos PyPI, de los cuales 768 aún son válidos. Estos incluyen claves de AWS, claves API de Azure Active Directory, claves OAuth de GitHub, claves de Dropbox, claves SSH y credenciales asociadas con MongoDB, MySQL, PostgreSQL, Coinbase y Twilio.
El mecanismo yanking en PyPI permite marcar una versión para que un instalador la ignore, pero no elimina el paquete del repositorio. Los archivos solo se eliminan si contienen código malicioso conocido. Solo se han eliminado 300 publicaciones, mientras que 56.566 contienen secretos.
Directrices de seguridad para la cadena de suministro
La continua ola de ataques a la cadena de suministro ha llevado al gobierno de Estados Unidos a emitir nuevas directrices para que los desarrolladores y proveedores de software mantengan y proporcionen conciencia sobre la seguridad del software. Se recomienda que las organizaciones asigne evaluaciones de riesgos de la cadena de suministro a sus decisiones de compra.
Los desarrolladores y proveedores de software deberían mejorar sus procesos de desarrollo de software para reducir el riesgo de daño no solo a los empleados y accionistas, sino también a sus usuarios.