TeamPCP, el actor de amenazas detrás del ataque a la cadena de suministro dirigido a Trivy, KICS y litellm, ahora ha comprometido el paquete telnyx Python al impulsar dos versiones maliciosas para robar datos confidenciales.
Las dos versiones, 4.87.1 y 4.87.2, publicadas en el repositorio Python Package Index (PyPI) el 27 de marzo de 2026, ocultaron sus capacidades de recolección de credenciales dentro de un archivo .WAV. Se recomienda a los usuarios que bajen a la versión 4.87.0 inmediatamente. El proyecto PyPI se encuentra actualmente en cuarentena.
Varios informes de Aikido, Endor Labs, Ossprey Security, SafeDep, Socket y StepSecurity indican que el código malicioso se inyecta en «telnyx/_client.py», lo que provoca que se invoque cuando el paquete se importa a una aplicación Python. El malware está diseñado para atacar sistemas Windows, Linux y macOS.
«Nuestro análisis revela una cadena de ataque en tiempo de ejecución de tres etapas en Linux/macOS que consiste en la entrega mediante esteganografía de audio, la ejecución en memoria de un recolector de datos y la exfiltración cifrada», dijo Socket. «Toda la cadena está diseñada para operar dentro de un directorio temporal autodestructivo y dejar casi cero artefactos forenses en el host».
En Windows, el malware descarga un archivo llamado «hangup.wav» de un servidor de comando y control (C2) y extrae de los datos de audio un ejecutable que luego se coloca en la carpeta Inicio como «msbuild.exe». Esto le permite persistir durante los reinicios del sistema y ejecutarse automáticamente cada vez que un usuario inicia sesión en el sistema.
En caso de que el host comprometido se ejecute en Linux o macOS, recupera un archivo .WAV diferente («ringtone.wav») del mismo servidor para extraer un script recopilador de tercera etapa y ejecutarlo. El recolector de credenciales está diseñado para capturar una amplia gama de datos confidenciales y exfiltrarlos en el formato «tpcp.tar.gz» a través de una solicitud HTTP POST a «83.142.209(.)203:8080».
«La técnica destacada en esta muestra, y el motivo del título de la publicación, es el uso de esteganografía de audio para entregar la carga útil final», dijo Ossprey Security. «En lugar de alojar un ejecutable sin formato o un blob base64 en el C2 (ambos marcados trivialmente por la inspección de red y EDR), el atacante envuelve la carga útil dentro de un archivo .WAV».
Actualmente no se sabe cómo TeamPCP obtuvo el PYPI_TOKEN del paquete, pero es probable que haya sido a través de una operación previa de recolección de credenciales.
«Creemos que el vector más probable es el compromiso del litellm en sí», dijeron los investigadores de Endor Labs Kiran Raj y Rachana Misal. «El recolector de TeamPCP barrió variables de entorno, archivos .env e historiales de shell de cada sistema que importó litellm. Si algún desarrollador o canal de CI tenía litellm instalado y acceso al token PyPI de telnyx, ese token ya estaba en manos de TeamPCP».
Lo notable del ataque es la ausencia de un mecanismo de persistencia en Linux y macOS y el uso de un directorio temporal para realizar acciones maliciosas y eliminar recursivamente todo su contenido una vez que todo esté completo.
«La división estratégica es clara. Windows obtiene persistencia: un binario en la carpeta Inicio que sobrevive a los reinicios, proporcionando al actor de la amenaza un acceso repetible a largo plazo», explicó Socket. «Linux/macOS se vuelve devastador: una única operación de recolección de datos de alta velocidad que recopila todo lo de valor y lo exfiltra inmediatamente, luego desaparece».
El desarrollo se produce unos días después de que el actor de amenazas distribuyera versiones troyanizadas del popular paquete Litellm Python para filtrar credenciales de la nube, secretos de CI/CD y claves de un dominio bajo su control.
El incidente de la cadena de suministro también refleja una nueva maduración, donde el actor de la amenaza ha infectado constantemente paquetes legítimos y confiables con bases de usuarios masivas para distribuir malware a usuarios intermedios y ampliar el radio de explosión, en lugar de publicar directamente typosquats maliciosos en repositorios de paquetes de código abierto.
«La selección de objetivos en esta campaña se centra en herramientas con acceso elevado a tuberías automatizadas: un escáner de contenedores (Trivy), una herramienta de escaneo de infraestructura (KICS) y una biblioteca de enrutamiento de modelos de IA (litellm)», dijo Snyk. «Cada una de estas herramientas requiere un amplio acceso de lectura a los sistemas en los que opera (credenciales, configuraciones, variables de entorno) por diseño».
Para mitigar la amenaza, se recomienda a los desarrolladores que realicen las siguientes acciones:
- Audite los entornos Python y los archivos requisitos.txt para telnyx==4.87.1 o telnyx==4.87.2. Si los encuentra, reemplácelos con una versión limpia.
- Asuma un compromiso y rote todos los secretos.
- Busque un archivo llamado «msbuild.exe» en la carpeta de inicio de Windows.
- Bloquee el dominio C2 y de exfiltración («83.142.209(.)203»).
El compromiso es parte de una campaña más amplia y continua emprendida por TeamPCP que abarca múltiples ecosistemas, en la que el actor de amenazas anuncia colaboraciones con otros grupos de ciberdelincuentes como LAPSUS$ y un grupo de ransomware emergente llamado Vect para realizar operaciones de extorsión y ransomware.
Esto también indica un cambio en el que las bandas de ransomware, que históricamente se han centrado en métodos de acceso inicial como el phishing y la explotación de fallos de seguridad, ahora están utilizando como arma los ataques a la cadena de suministro dirigidos a la infraestructura de código abierto como punto de entrada para ataques posteriores.
«Esto pone de relieve cualquier cosa en entornos CI/CD que no esté bloqueado», dijo Socket. «A los escáneres de seguridad, las extensiones IDE, las herramientas de construcción y los entornos de ejecución se les otorga amplio acceso porque se espera que lo necesiten. Cuando los atacantes apuntan a las herramientas mismas, cualquier cosa que se ejecute en el proceso debe ser tratada como un punto de entrada potencial».