O ocorrido desta manhã telnyx O comprometimento é o movimento mais recente no que agora é uma campanha de supply chain da TeamPCP de semanas, abrangendo múltiplos ecossistemas. Trivy. Checkmarx. LiteLLM. E agora Telnyx no PyPI, carregado horas atrás às 03:51 UTC de 27 de março.
O padrão é consistente: roubar credenciais de uma ferramenta de segurança confiável, usar essas credenciais para enviar versões maliciosas de tudo o que a ferramenta tinha acesso, coletar o que estiver sendo executado no próximo ambiente e repetir.
Onde isso se encaixa na Campanha
Um rápido resumo do que a TeamPCP fez nas últimas duas semanas:
19 de março: Trivy comprometido. O scanner de vulnerabilidades de código aberto da Aqua Security sofreu um backdoor, resultando em CVE-2026-33634 (CVSS 9.4). Atacantes exfiltraram credenciais de cada pipeline CI/CD executando Trivy sem fixação de versão. 44 repositórios GitHub da Aqua Security foram renomeados com o prefixo tpcp-docs- e a descrição "TeamPCP Owns Aqua Security."
20 de março: CanisterWorm atinge o npm. Usando tokens roubados de usuários do Trivy, a TeamPCP publicou o backdoor CanisterWorm em mais de 46 pacotes npm, incluindo escopos como @EmilGroup e @opengov. O worm automatizou o token-to-compromise: dado um token npm roubado, ele enumerou todos os pacotes publicáveis, atualizou as versões e publicou em todo o escopo em menos de 60 segundos.
22 de março: Observei pela primeira vez o TeamPCP usando esteganografia WAV para entregar payloads em sua variante de wiper para Kubernetes. Eu alertei no Twitter na época: "TeamPCP agora está incorporando seu malware em arquivos .wav."
23 de março: Checkmarx. As kics-github-action e ast-github-action GitHub Actions foram comprometidos, juntamente com duas extensões OpenVSX (cx-dev-assist 1.7.0 e ast-results 2.53.0). O payload utilizou um novo domínio C2, checkmarx[.]zone, personificando a marca Checkmarx. 35 tags foram sequestradas entre 12:58 e 16:50 UTC; o código malicioso foi removido três horas depois.
24 de março: LiteLLM. As versões 1.82.7 e 1.82.8 do pacote LiteLLM PyPI foram publicadas usando credenciais roubadas do pipeline de CI/CD da LiteLLM, que executava Trivy sem fixação de versão. A LiteLLM atende aproximadamente 95 milhões de downloads por mês e está sendo cada vez mais implantada como um gateway LLM centralizado com acesso a credenciais para OpenAI, Anthropic, AWS Bedrock, GCP VertexAI e muito mais. O PyPI colocou os pacotes em quarentena após cerca de três horas. O C2 era models[.]litellm[.]cloud.
27 de março (hoje): Telnyx. Duas versões maliciosas do SDK oficial do Telnyx Python foram publicadas no PyPI esta manhã. O Telnyx foi baixado 742 mil vezes no último mês.
O Payload da Telnyx
A injeção está em telnyx/_client.py, que é executado no momento da importação. Nenhum hook de instalação para desativar, nenhum postinstall para bloquear. Apenas import telnyx e o malware é executado.
Dois caminhos dependendo do OS:
Windows: Downloads hangup.wav de 83[.]142[.]209[.]203:8080, decodifica um executável ofuscado por XOR dos quadros de áudio, e o salva como msbuild.exe na pasta de Inicialização do Windows. É executado silenciosamente em cada login com um cooldown de 12 horas para re-drop, imposto por um arquivo oculto .lock arquivo.
Linux/Mac: Um script Python completo de segunda etapa é hardcoded como um blob base64 em _client.py na linha 459. Ele busca ringtone.wav do mesmo C2, decodifica um script coletor de terceira etapa dos frames WAV usando a mesma técnica XOR, executa-o via sys.executable - redirecionado para stdin, então criptografa a saída com AES-256-CBC e a exfiltra. A chave de sessão é encapsulada com uma chave pública RSA-4096 do atacante (OAEP), então apenas o atacante pode descriptografar o que foi roubado.
O pacote de exfiltração é nomeado tpcp.tar.gz, enviado com o cabeçalho X-Filename: tpcp.tar.gz.
O Truque do WAV
Esta é a parte que vale a pena aprofundar. O payload não é entregue como um binário bruto ou um arquivo Python. Ele é disfarçado como um .wav arquivo de áudio. Veja o que acontece quando o malware busca hangup.wav (Windows) ou ringtone.wav (Linux) do C2:
with wave.open(wf, 'rb') as w:
b = base64.b64decode(w.readframes(w.getnframes()))
s, m = b[:8], b[8:]
payload = bytes([m[i] ^ s[i % len(s)] for i in range(len(m))])O arquivo WAV é um arquivo de áudio válido. Ele passa nas verificações de tipo MIME. Mas os dados do quadro de áudio contêm um payload codificado em base64. Decodifique os quadros, pegue os primeiros 8 bytes como chave XOR, faça o XOR do restante, e você terá seu executável ou script Python.
A filtragem baseada em conteúdo não o detectará. Uma URL que permite .wav buscas não o bloqueará. O arquivo parece um áudio porque está estruturado como áudio. O conteúdo malicioso está apenas escondido nos dados do quadro.
Vimos essa técnica pela primeira vez no payload Kubernetes versão 3.3 do TeamPCP em 22 de março. Cinco dias depois, ela está no pacote telnyx PyPI, carregando tanto o dropper para Windows quanto o infostealer para Linux. Eles gostaram o suficiente para mantê-la.

O que fazer
Remova telnyx>=4.87.1 imediatamente e fixe para telnyx==4.87.0.
Se você instalou qualquer uma das versões maliciosas, trate o ambiente como comprometido: rotacione chaves de API, credenciais de banco de dados, chaves SSH e quaisquer Secrets acessíveis a partir dessa máquina. No Windows, verifique por msbuild.exe em %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\ e o delete. Monitore por tráfego HTTP de saída para 83[.]142[.]209[.]203:8080.
IOCs
Versões maliciosas do telnyx:
telnyx==4.87.1(SHA256:7321caa303fe96ded0492c747d2f353c4f7d17185656fe292ab0a59e2bd0b8d9)telnyx==4.87.2(SHA256:cd08115806662469bbedec4b03f8427b97c8a4b3bc1442dc18b72b4e19395fe3)
Rede:
83[.]142[.]209[.]203:8080(C2)hxxp://83[.]142[.]209[.]203:8080/hangup.wav(payload do Windows)hxxp://83[.]142[.]209[.]203:8080/ringtone.wav(payload do Linux)hxxp://83[.]142[.]209[.]203:8080/(POST de exfiltração)- Cabeçalho de exfiltração:
X-Filename: tpcp.tar.gz
Persistência no Windows:
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\msbuild.exe%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\msbuild.exe.lock
Notícia em desenvolvimento... Fique atento para atualizações.

