TeamPCP Supply Chain Attack via Backdoored Telnyx PyPI Package with Steganographic WAV Payloads
TeamPCP Supply Chain Attack via Backdoored Telnyx PyPI (TL-2026-0298), also tracked as CanisterWorm Campaign Phase 5, is a critical-severity supply-chain compromise, first published 2026-03-30. It is attributed to TeamPCP (Russia) with high confidence, affects Telnyx telnyx Python SDK, maps to 20 MITRE ATT&CK techniques (T1005, T1027, T1036), and is covered by 9 detection rules and 28 indicators of compromise.
Key facts for TL-2026-0298
- Threat ID
- TL-2026-0298
- Also known as
- CanisterWorm Campaign Phase 5, PYSEC-2026-3, XRAY-957731
- Severity
- CRITICAL
- Status
- MONITORING
- Category
- SUPPLY_CHAIN
- First published
- 2026-03-30
- Last reviewed
- 2026-03-30
- Attribution
- TeamPCP
- Attribution confidence
- HIGH
- Nation-state nexus
- Russia
- Motivation
- FINANCIAL
- Target sectors
- technology, telecommunications, financial, cloud-services, saas, devops
- Target regions
- Global
- Detection rules
- 9
- Indicators of compromise
- 28
Malware and tooling in TeamPCP Supply Chain Attack via Backdoored Telnyx PyPI
Malware and tooling: Custom HTTP C2 (TeamPCP), twine/6.2.0
Threat actor TeamPCP compromised the Telnyx Python SDK on PyPI (742K+ monthly downloads), publishing malicious versions 4.87.1 and 4.87.2 on March 27, 2026 that execute credential-stealing malware on import. Second-stage payloads are hidden in steganographic WAV audio files served from a remote C2 server, with platform-specific variants targeting Linux, macOS, and Windows. The attack includes Kubernetes lateral movement capabilities deploying privileged pods across cluster nodes.
How TeamPCP Supply Chain Attack via Backdoored Telnyx PyPI works
TeamPCP, a prolific supply chain threat actor, compromised the official Telnyx Python SDK on PyPI by publishing two malicious versions (4.87.1 and 4.87.2) on March 27, 2026. The Telnyx SDK is widely used for VoIP, messaging, fax, and IoT connectivity, averaging over 742,000 downloads per month.
The sole modified file was telnyx/_client.py, with exactly 74 lines of malicious code injected at three locations: malicious imports at lines 4-16 (subprocess, tempfile, wave, urllib.request, base64), a 4,436-character base64-encoded payload variable '_p' at line 459, and attack functions setup() and FetchAudio() appended after legitimate class definitions at lines 7761-7817. The malicious code executes at module scope during import — no explicit function calls or installation hooks are required.
The initial version 4.87.1 (published at 03:51 UTC) contained a casing bug (Setup() vs setup()) causing a NameError that prevented execution. TeamPCP corrected this within 16 minutes, releasing version 4.87.2 at 04:07 UTC with a single-line fix making both attack paths functional. PyPI quarantined both versions at 10:13 UTC, creating an approximately 6-hour window of active exploitation.
The attack employs a novel steganographic delivery mechanism using WAV audio files. On Linux/macOS, the malware spawns a detached subprocess that downloads ringtone.wav from the C2 server at 83.142.209.203:8080. The WAV file is a valid audio container where frame data contains base64-encoded payloads instead of actual audio. Extraction follows a three-step process: base64-decode the WAV frame data, extract the first 8 bytes as the XOR key, then XOR-decrypt the remaining bytes using repeating-key XOR to recover the executable payload.
On Linux/macOS, the decoded payload is a comprehensive credential harvester that targets SSH keys, cloud credentials (AWS, GCP, Azure), Docker and npm authentication tokens, Git credentials, Vault secrets, database credentials, environment variables, .env files, shell histories, and cryptocurrency wallet data. Stolen data is encrypted using a multi-layer scheme: a random AES-256-CBC session key generated via openssl rand, data encrypted with AES-256-CBC using PBKDF2 key derivation, and the session key wrapped with an attacker-controlled RSA-4096 public key using OAEP padding. The encrypted archive is exfiltrated as tpcp.tar.gz via HTTP POST to the C2 server. The harvester operates within a self-destructing temporary directory, leaving near-zero forensic artifacts. Linux persistence is established via ~/.config/audiomon/audiomon.py with a systemd user service at ~/.config/systemd/user/audiomon.service.
If Kubernetes is detected on the infected system, the malware enumerates cluster secrets using compromised service account tokens and deploys privileged pods to every node in the kube-system namespace. These pods mount the host root filesystem at /host with hostPID, hostNetwork, and privileged: True, then perform a chroot operation into the host filesystem to install persistence mechanisms directly on nodes. Pod names follow the pattern node-setup-*, with containers named kamikaze, provisioner, host-provisioner-iran, and host-provisioner-std.
On Windows, the malware downloads hangup.wav from the same C2 server, extracts an XOR-obfuscated executable from the audio frames, and drops it as msbuild.exe in the Windows Startup folder (%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\) — masquerading as the legitimate Microsoft Build Engine. A hidden .lock file prevents re-execution within a 12-hour window. The executable is launched with the CREATE_NO_WINDOW flag for silent operation.
Attribution to TeamPCP is confirmed with high confidence through three overlapping indicators: an identical RSA-4096 public key shared byte-for-byte with the LiteLLM PyPI compromise (March 24, 2026), the tpcp.tar.gz archive naming convention and X-Filename header (TeamPCP signature), and an identical AES-256-CBC + RSA OAEP encryption pipeline. The compromise is part of a broader TeamPCP campaign spanning March 19-27, 2026, targeting Trivy (CVE-2026-33634), npm (CanisterWorm, 46+ packages), Checkmarx GitHub Actions, LiteLLM PyPI, and Telnyx PyPI.
Root cause analysis indicates TeamPCP obtained the PyPI API token (PYPI_TOKEN) through prior credential harvesting, likely from the LiteLLM compromise. No malicious commits exist in the GitHub repository — all pushes came from legitimate automation (stainless-app[bot]). The malicious uploads used twine/6.2.0 instead of the expected rye CI tool, and no corresponding GitHub release tags exist for versions 4.87.1 or 4.87.2. The Telnyx PyPI project did not have trusted publishers (OIDC) configured, which would have prevented unauthorized uploads.
The malware does not verify downloaded WAV files cryptographically before execution, creating an additional risk where man-in-the-middle attackers could inject alternative payloads targeting TeamPCP-compromised systems.
MITRE ATT&CK techniques used in TL-2026-0298
collection
T1005 Data from Local System; T1560 Archive Collected Data
defense-evasion
T1027 Obfuscated Files or Information; T1036 Masquerading; T1070 Indicator Removal; T1610 Deploy Container
exfiltration
T1041 Exfiltration Over C2 Channel
execution
T1059 Command and Scripting Interpreter; T1204 User Execution
command-and-control
T1071 Application Layer Protocol; T1105 Ingress Tool Transfer; T1573 Encrypted Channel
discovery
T1082 System Information Discovery; T1087 Account Discovery
initial-access
persistence
T1543 Create or Modify System Process; T1547 Boot or Logon Autostart Execution
credential-access
lateral-movement
privilege-escalation
Affected products and versions in TeamPCP Supply Chain Attack via Backdoored Telnyx PyPI
- Telnyx — telnyx Python SDK
Vulnerable versions: 4.87.1; 4.87.2
Fixed in: 4.87.0
Remediation for TeamPCP Supply Chain Attack via Backdoored Telnyx PyPI
Patches
- Downgrade to telnyx==4.87.0 (last verified clean version)
- Monitor PyPI for verified clean release from Telnyx maintainers
Immediate actions
- Pin telnyx to version 4.87.0 or latest verified clean release
- Audit all systems that imported telnyx between 03:51 and 10:13 UTC on March 27, 2026
- Rotate ALL credentials on compromised systems: PyPI, npm, Docker Hub, AWS, GCP, Azure, SSH keys, database passwords, Vault tokens
- Block C2 IP 83.142.209.203 at perimeter firewall
- Kill audiomon service if present on Linux systems
- Check for msbuild.exe in Windows Startup folders
Workarounds
- Block outbound HTTP to 83.142.209.203 on port 8080
- Monitor for WAV file downloads from unusual IP addresses
- Check pip freeze output for telnyx versions 4.87.1 or 4.87.2
Longer-term hardening
- Enable PyPI trusted publishers (OIDC) for all maintained packages
- Pin GitHub Actions to commit SHAs instead of tags
- Use pip install --require-hashes for hash-pinned dependencies
- Scope PyPI publishing tokens to minimum required packages
- Deploy EDR with behavioral detection for steganographic payload delivery
- Implement Kubernetes admission controllers to prevent privileged pod deployment
- Audit CI/CD runners and rebuild from clean images
Weaknesses (CWE) in TeamPCP Supply Chain Attack via Backdoored Telnyx PyPI
CWE-506, CWE-494, CWE-327
Timeline of TeamPCP Supply Chain Attack via Backdoored Telnyx PyPI
- TeamPCP compromises Trivy vulnerability scanner (CVE-2026-33634, CVSS 9.4), renaming 44 Aqua Security repositories
- TeamPCP launches CanisterWorm npm campaign, compromising 46+ packages with automated token exploitation
- TeamPCP deploys Kubernetes-targeting WAV steganography variant, first use of this technique
- TeamPCP compromises Checkmarx GitHub Actions (kics-github-action, ast-github-action), hijacking 35 release tags
- TeamPCP compromises LiteLLM PyPI package (v1.82.7-1.82.8, ~95M monthly downloads), establishing C2 at models.litellm.cloud
- Legitimate telnyx version 4.87.0 published to PyPI by Telnyx maintainers
- BleepingComputer, The Hacker News, and Help Net Security publish reports on the compromise
- Python advisory PYSEC-2026-3 published; Telnyx releases official security notice
- PyPI quarantines malicious versions 4.87.1 and 4.87.2 at 10:13 UTC, ending ~6-hour exploitation window
- Aikido, Socket, and Endor Labs security firms detect and report the compromise
- TeamPCP publishes corrected telnyx 4.87.2 at 04:07 UTC with single-line fix, making both attack paths functional
- Malicious telnyx 4.87.1 published at 03:51 UTC with casing bug (Setup() vs setup()) preventing payload execution
- Datadog Security Labs, JFrog, OX Security, and Mend.io publish detailed technical analyses
- Trend Micro publishes comprehensive analysis identifying TeamPCP tactical shift to steganographic delivery
- As of 2026-05-29, the Telnyx 4.87.1/4.87.2 compromise is contained—PyPI quarantined and removed both versions on 2026-03-27, with 4.87.0 the clean baseline. But actor TeamPCP remains active and escalating, with a May 2026 Mini Shai-Hulud worm hitting ~170 npm/PyPI packages, a ransomware (Vect) pivot, ~300GB stolen creds, and no arrests.
Sources cited for TeamPCP Supply Chain Attack via Backdoored Telnyx PyPI
- Trend Micro: TeamPCP Telnyx Attack Marks a Shift in Tactics
- BleepingComputer: Backdoored Telnyx PyPI Package Pushes Malware Hidden in WAV Audio
- Aikido: Popular telnyx Package Compromised on PyPI by TeamPCP
- Datadog Security Labs: LiteLLM and Telnyx Compromised - Tracing the TeamPCP Campaign
- SafeDep: Compromised telnyx on PyPI - WAV Steganography and Credential Theft
- JFrog: TeamPCP Strikes Again - Telnyx Popular Library Hit
- The Hacker News: TeamPCP Pushes Malicious Telnyx Versions to PyPI
- Help Net Security: TeamPCP Strikes Again - Backdoored Telnyx PyPI Package
- OX Security: Telnyx Malware - TeamPCP Following LiteLLM Compromise
- Mend.io: Famous Telnyx PyPI Package Compromised by TeamPCP
- GitHub Issue #235: PyPI Versions 4.87.1 and 4.87.2 Are Compromised
- Telnyx Security Notice: Malicious PyPI Versions Identified
- Python Advisory PYSEC-2026-3
- CyberSecurityNews: Telnyx PyPI Package With 742,000 Downloads Compromised
- Infosecurity Magazine: TeamPCP Targets Telnyx in Latest Supply Chain Attack
Threats related to TeamPCP Supply Chain Attack via Backdoored Telnyx PyPI
- TeamPCP Cascading Supply Chain Campaign: Telnyx PyPI Compromise with WAV Steganography
- LiteLLM Supply Chain Compromise — TeamPCP Multi-Ecosystem Campaign via Trojanized PyPI Packages
- TeamPCP Partners With Vect Ransomware Group to Escalate Cross-Ecosystem Open Source Supply Chain Attacks
- TeamPCP LiteLLM Supply Chain Attack — Trojaned PyPI Packages (v1.82.7/1.82.8) with Multi-Stage C2 Payload
- TeamPCP Supply Chain Attack on LiteLLM — Trojanized PyPI Packages with .pth Persistence and Multi-Stage Credential Stealer
- TeamPCP Supply Chain Campaign: LiteLLM PyPI Compromise, CanisterWorm npm Propagation, and Multi-Ecosystem Attack (CVE-2026-33634)
Detection coverage for TL-2026-0298
As of 2026-03-30, Threadlinqs Intelligence publishes 9 detection rule(s) for TL-2026-0298 across Splunk SPL, Microsoft KQL and Sigma, covering 28 indicator(s) of compromise. The whole corpus is readable without an account; a free account unlocks full detection query text in Splunk SPL, Microsoft KQL and Sigma; paid tiers add raw indicator values, correlation and the MCP server. Threadlinqs MCP server · View plans.