Una dependencia falsa llamada "Requests" convirtió la instalación de Deep-Live-Cam en una trampa para usuarios de criptomonedas.

La confianza en un popular proyecto de código abierto se convirtió en un vector de infección. Atacantes comprometieron Deep-Live-Cam, una aplicación de reemplazo de rostros en tiempo real con 96,6 mil estrellas en GitHub, y añadieron discretamente en sus dependencias código malicioso para robar criptomonedas.
El ataque comenzó el 8 de septiembre, cuando un commit llegó a la rama principal del proyecto y cambió 18 entradas en el requirements.txt. Entre ellas apareció una versión falsa de la popular librería Requests, que se descargaba no desde el índice habitual de Python sino desde el repositorio de los atacantes. Ese tipo de ataques a la cadena de suministro son especialmente peligrosos porque el malware obtiene confianza junto con el proyecto legítimo.
El paquete falso conservó el nombre requests y los metadatos del proyecto real, por lo que en una comprobación superficial la dependencia parecía habitual. En el setup.py los atacantes ocultaron código tras 434 espacios, desplazando efectivamente la parte maliciosa fuera del área visible de muchos editores e interfaces de revisión de cambios. Ruido visual adicional lo creaban variables con caracteres chinos y japoneses.
El código peligroso se ejecutaba ya durante la instalación de la dependencia con setuptools. El usuario ni siquiera tenía que ejecutar Deep-Live-Cam después de la instalación. Un esquema similar de inyección de código en proyectos populares de Python ya se observó en la campaña ForceMemo, donde los atacantes también obtenían control sobre cuentas de desarrolladores y modificaban archivos en repositorios de confianza.
El cargador detectaba el sistema operativo y seguía funcionando en Windows y macOS. Los atacantes escondieron la siguiente etapa dentro de una página de Telegraph, desde donde el script extraía varias capas de código Python codificado. La carga final vigilaba constantemente el portapapeles y reconocía direcciones de Bitcoin, Ethereum, Tron y Solana.
Cuando detectaba una dirección de criptomonedas, el programa la reemplazaba silenciosamente por los datos del atacante. El usuario podía copiar la dirección correcta, pegar la ya suplantada y confirmar la transferencia sin darse cuenta. Una manipulación del portapapeles tan extendida se convirtió en una amenaza que llevó a Opera, en verano, a añadir un mecanismo específico, Hijack Protection, para detectar ese tipo de manipulaciones.
El malware también intentaba sobrevivir a un reinicio del equipo. En Windows, el programa añadía una entrada SysHelper en la clave de inicio automático del registro, y en macOS creaba el LaunchAgent com.user.syshelper.plist. Por ello, restaurar simplemente el requirements.txt infectado no es suficiente. Si el malware llegó a ejecutarse, los archivos descargados y el mecanismo de arranque automático podían quedar en el sistema.
El commit malicioso permaneció en la rama principal alrededor de 9 horas y 39 minutos. El desarrollador de Deep-Live-Cam informó de un acceso inusual a la cuenta incluso con la autenticación de dos factores activada, tras lo cual cambió la contraseña y las claves. Con la información disponible no se puede determinar si los atacantes aprovecharon un token robado, una clave SSH o una sesión activa.
El equipo SafeDep, en su análisis del ataque, subraya que los artefactos encontrados confirman comportamientos maliciosos, pero no permiten estimar el número de equipos infectados ni el importe de las posibles pérdidas. El hecho de que el código contenga direcciones de los atacantes tampoco demuestra que efectivamente recibieran fondos robados.
En primavera un escenario similar afectó al escáner de código abierto Checkmarx KICS. Los atacantes sustituyeron la herramienta y usaron un proyecto de confianza para robar contraseñas y claves de los entornos de trabajo de los desarrolladores.
En mayo SafeDep registró una campaña aún más extensa, Megalodon. En tan solo unas horas, commits maliciosos llegaron a 5561 repositorios de GitHub, y el objetivo de los atacantes fueron los secretos de los sistemas de compilación y CI/CD.
En verano un problema similar se manifestó en el ecosistema npm. El gusano Shai-Hulud infectó 444 paquetes con una audiencia combinada de cerca de dos mil millones de descargas al mes, y el código malicioso podía no estar presente en el repositorio original de GitHub.