Pacchetto PyPI telnyx compromesso: attacco supply chain di TeamPCP

Pacchetto PyPI telnyx compromesso: attacco supply chain di TeamPCP

Attenzione: il pacchetto telnyx su PyPI è stato compromesso. Se lo utilizzi, rimuovilo immediatamente e considera l’ambiente infetto. Questa è l’ultima mossa di una campagna devastante che colpisce sviluppatori e aziende in tutto il mondo.

Il gruppo TeamPCP ha preso di mira ecosistemi critici come PyPI, npm e GitHub, rubando credenziali e diffondendo malware. Aziende di intelligenza artificiale e tool di sicurezza sono state colpite duramente. La soluzione rapida? Pinna alla versione telnyx==4.87.0, ruota tutte le credenziali e verifica i tuoi sistemi per tracce del malware.**

Questa campagna, in corso da settimane, sfrutta vulnerabilità nelle pipeline CI/CD per propagarsi rapidamente. Colpisce scanner di sicurezza, proxy LLM e SDK popolari, esponendo milioni di download a rischi enormi. Milioni di installazioni potrebbero essere già compromesse, con furto di chiavi API, dati sensibili e accesso a servizi cloud come OpenAI e AWS.

Cronologia dell’attacco

TeamPCP ha orchestrato una serie di colpi precisi:

  • 19 marzo: Compromesso di Trivy, lo scanner open source di Aqua Security. Credenziali esfiltrate da pipeline senza version pinning. Repository GitHub rinominati con prefisso tpcp-docs-.
  • 20 marzo: CanisterWorm su npm. Usando token rubati, pubblicato su oltre 46 pacchetti, inclusi scope come @EmilGroup.
  • 22 marzo: Prima uso di steganografia WAV per payload Kubernetes.
  • 23 marzo: Checkmarx violato, con GitHub Actions e estensioni OpenVSX modificati. Nuovo dominio C2: checkmarx.zone.
  • 24 marzo: LiteLLM su PyPI, versioni 1.82.7 e 1.82.8. Usato da 95 milioni di download mensili come gateway LLM.
  • 27 marzo: Telnyx su PyPI, versioni 4.87.1 e 4.87.2 caricate alle 03:51 UTC. Oltre 742.000 download nel mese precedente.

Questi attacchi mostrano un modello chiaro: ruba credenziali da tool fidati, pubblica versioni maligne, raccogli dati dal prossimo ambiente. La velocità è impressionante: interi scope npm compromessi in meno di 60 secondi.

Impatto su aziende e sviluppatori

Pacchetti come telnyx e LiteLLM sono pilastri per applicazioni AI e comunicazioni. Telnyx gestisce SDK Python per servizi di telecomunicazione, mentre LiteLLM centralizza accessi a modelli come quelli di Anthropic e GCP. Un compromesso significa esposizione di credenziali API, chiavi database e segreti SSH. Aziende grandi usano questi tool senza pinning, amplificando il danno.

La tecnica di steganografia in file WAV è geniale e elude filtri: i file appaiono come audio legittimo, ma nascondono payload XOR-obfuscati nei frame. Questo ha debuttato nei payload Kubernetes e ora è standardizzato.

Azioni immediate da intraprendere

  1. Rimuovi telnyx>=4.87.1 e pinna a telnyx==4.87.0.
  2. Ruota tutte le credenziali: API keys, database, SSH.
  3. Su Windows: Controlla %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\ per msbuild.exe e .lock, eliminali.
  4. Monitora traffico: Blocca connessioni a 83.142.209.203:8080.
  5. Scansiona ambienti: Usa tool con version pinning e verifica SHA256 dei pacchetti.

Implementa pinning versioni in tutte le pipeline CI/CD per prevenire ricorrenze. Considera quarantine automatiche per pacchetti sospetti.

Evoluzione delle minacce supply chain

Queste campagne evidenziano la fragilità degli ecosistemi open source. TeamPCP non è isolato: attacchi simili hanno colpito GlueStack su npm/PyPI, con malware per mining crypto e furto dati. La persistenza post-aggiornamento e l’uso di SMTP per esfiltrazione eludono difese tradizionali.

Per mitigare, adotta SBOM (Software Bill of Materials), sigilli firmati e monitoraggio runtime. La community deve spingere per standard più rigidi su PyPI e npm.

Approfondimento tecnico

Technical deep dive

Il payload in telnyx/_client.py si attiva all’import, senza hook installabili.

Su Windows:

  • Scarica hangup.wav da hxxp://83[.]142[.]209[.]203:8080.
  • Estrae executable XOR-obfuscato dai frame audio.
  • Droppa come msbuild.exe in cartella Startup, con cooldown 12 ore via .lock.

Su Linux/Mac:

  • Base64 blob hardcoded (linea 459) avvia script second-stage.
  • Scarica ringtone.wav dallo stesso C2.
  • Decodifica collector third-stage con XOR (primi 8 byte come key).
  • Esegue via sys.executable, cifra output AES-256-CBC.
  • Esfiltra come tpcp.tar.gz con header X-Filename, chiave sessione RSA-4096 OAEP.

Codice decodifica WAV:

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))])

IOCs:

  • Versioni: telnyx==4.87.1 (SHA256: 7321caa303fe96ded0492c747d2f353c4f7d17185656fe292ab0a59e2bd0b8d9), telnyx==4.87.2 (SHA256: cd08115806662469bbedec4b03f8427b97c8a4b3bc1442dc18b72b4e19395fe3).
  • Network: 83.142.209.203:8080, /hangup.wav, /ringtone.wav.
  • Persistenza Windows: %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\msbuild.exe.

Questa tecnica WAV è evoluta da varianti Kubernetes. Analisi forense rivela somiglianze con CanisterWorm e Checkmarx payload. Per difese avanzate, integra rilevamento steganografico in proxy e scanner.

La minaccia persiste: monitora aggiornamenti PyPI e adotta zero-trust per dipendenze.

Fonte: https://www.aikido.dev/blog/telnyx-pypi-compromised-teampcp-canisterworm

Torna in alto