PyPI telnyx comprometido: cómo TeamPCP encadena cinco ataques en nueve días

Share

Esta madrugada del 27 de marzo, el paquete telnyx en PyPI fue comprometido por el grupo TeamPCP. No es un incidente aislado: es el quinto eslabón de una campaña sistemática que lleva nueve días encadenando ataques contra herramientas centrales del ecosistema de desarrollo.

Si tu pipeline instala dependencias automáticamente y usaste versiones recientes de Trivy, LiteLLM o ahora telnyx, probablemente ya fuiste comprometido.

Cómo funciona la campaña: el patrón de TeamPCP

TeamPCP no ataca directamente a los desarrolladores. Ataca las herramientas de seguridad que esos desarrolladores usan —y que por definición tienen acceso privilegiado a sus entornos. Una vez comprometida esa herramienta, extrae las credenciales que guarda: tokens de npm, claves de AWS, API keys de modelos de IA. Luego usa esas credenciales para comprometer otros paquetes que los mismos usuarios tienen instalados.

Aprende IA con nosotros

Únete gratis a mi comunidad en Skool, donde compartimos noticias, tutoriales y recursos para seguir aprendiendo juntos.

👥 Únete gratis 🚀

El timeline de los últimos nueve días:

  • 19 marzo: Trivy comprometido. Aqua Security’s vulnerability scanner backdooreado (CVE-2026-33634, CVSS 9.4). Los atacantes exfiltraron credenciales de todos los pipelines CI/CD que corrían Trivy sin versión fija. 44 repositorios de Aqua Security fueron renombrados con prefijo tpcp-docs-.
  • 20 marzo: CanisterWorm en npm. Con tokens robados vía Trivy, TeamPCP publicó el backdoor en más de 46 paquetes npm incluyendo scopes como @EmilGroup y @opengov. El gusano automatizaba el proceso: dado un token, enumeraba todos los paquetes publicables y los infectaba en menos de 60 segundos.
  • 23 marzo: Checkmarx. Las GitHub Actions kics-github-action y ast-github-action comprometidas, junto con dos extensiones de OpenVSX. El payload usó el dominio checkmarx[.]zone para impersonar la marca.
  • 24 marzo: LiteLLM. Versiones 1.82.7 y 1.82.8 del paquete PyPI más usado como gateway de LLMs (95 millones de descargas mensuales). Lo cubrimos en detalle aquí: las credenciales de OpenAI, Anthropic, AWS Bedrock y GCP Vertex estaban en riesgo.
  • 27 marzo: Telnyx. El SDK oficial de Python de Telnyx, con 742.000 descargas mensuales.

El truco WAV: por qué los controles tradicionales no lo detectan

La técnica más notable de esta campaña —documentada por primera vez el 22 de marzo y ahora replicada en telnyx— es el uso de archivos .wav como vehículo para el payload malicioso.

El malware no viene como un ejecutable ni como un script Python en texto plano. Viene disfrazado de un archivo de audio. El proceso:

  1. El código malicioso se inyecta en telnyx/_client.py, que se ejecuta en tiempo de importación. No hay hook de instalación que bloquear: basta con import telnyx.
  2. El código descarga hangup.wav (Windows) o ringtone.wav (Linux/Mac) desde un servidor C2 (83.142.209.203:8080).
  3. El archivo WAV es un archivo de audio válido. Pasa chequeos de tipo MIME. Pero en los frames del audio se esconde un payload base64-encoded. Los primeros 8 bytes del contenido decodificado actúan como clave XOR para desencriptar el resto.

En Windows, el resultado es un ejecutable (msbuild.exe) que se copia en la carpeta de inicio y se ejecuta en cada login con un cooldown de 12 horas. En Linux/Mac, se ejecuta un script Python de segunda etapa que recolecta información del entorno, la encripta con AES-256-CBC (con la clave de sesión protegida por RSA-4096 OAEP del atacante) y la exfiltra. Solo el atacante puede descifrar lo robado.

Cualquier filtro basado en tipo MIME o extensión de archivo no detecta esto. Un firewall que permita descargas de archivos .wav tampoco lo bloquea. El archivo estructuralmente es audio válido; la diferencia está en el contenido de los frames.

Por qué importa más allá de telnyx

TeamPCP no es el primer grupo que hace esto. Pero la sofisticación y velocidad de esta campaña —cinco ecosistemas comprometidos en nueve días, con un mecanismo de propagación automático— es una escala que no habíamos visto antes en este tipo de ataques.

Lo que revela es un problema estructural de confianza en el ecosistema de open source. Los desarrolladores asumen que los paquetes que instalan son seguros, especialmente cuando vienen de proyectos establecidos con millones de descargas. Esa confianza es la que TeamPCP explota: no rompe la seguridad de tu sistema directamente, sino que compromete la herramienta en la que ya confías y que ya tiene acceso a tus secretos.

La cadena es: herramienta de seguridad comprometida → credenciales robadas → paquete de tu stack infectado → tus claves exfiltradas. Y el vector de entrada —no pinear versiones en CI/CD— es extremadamente común.

Ya lo vimos en otro contexto: Clinejection comprometió 4.000 máquinas de desarrolladores a través de un title en un GitHub issue. La superficie de ataque en pipelines de desarrollo modernos es enorme, y los atacantes lo saben.

Qué hacer ahora

Si tienes telnyx en cualquier proyecto, la acción inmediata es:

  • Fijar a telnyx==4.87.0 (o eliminar el paquete). Las versiones maliciosas son 4.87.1 y 4.87.2.
  • Si instalaste cualquiera de las versiones comprometidas, tratar el entorno como comprometido: rotar API keys, credenciales de base de datos, claves SSH, y cualquier secreto accesible desde esa máquina.
  • En Windows: buscar y eliminar %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\msbuild.exe.
  • Monitorear tráfico saliente a 83.142.209.203:8080.

Más allá de telnyx, la lección de toda la campaña es más sistémica. Startups como Corridor están levantando capital para resolver exactamente este problema: la superficie de ataque en la cadena de suministro de software se está expandiendo con el creciente uso de paquetes de terceros, y las herramientas tradicionales de SAST no la cubren.

Para equipos que usan pipelines CI/CD, la práctica mínima es pinear versiones de todas las dependencias —incluyendo y especialmente las herramientas de seguridad. Si Trivy hubiera estado pinneado, toda la cadena de esta campaña se corta en el primer eslabón.

IOCs para bloquear

  • Versiones maliciosas: telnyx==4.87.1, telnyx==4.87.2
  • C2: 83[.]142[.]209[.]203:8080
  • Payloads: hangup.wav (Windows), ringtone.wav (Linux/Mac)
  • Exfil header: X-Filename: tpcp.tar.gz
  • Persistencia Windows: %APPDATA%\...\Startup\msbuild.exe

Fuentes

Leer más

Otras noticias