GitHub Security Advisory: GHSA-955r-262c-33jc
Package: telnyx (PIP)
Severity: CRITICAL (CVSS 0.0)
CWE: CWE-506: Embedded Malicious Code
Vulnerable versions: >= 4.87.1, <= 4.87.2
Patched in: unpatched

Summary: Telnyx has malicious code in PyPI versions 4.87.1 and 4.87.2

Details:
## Summary

On March 27, 2026, a threat actor used compromised PyPI credentials to publish malicious versions 4.87.1 and 4.87.2 of the `telnyx` Python package directly to PyPI. These versions contain credential-stealing malware and were not published through the legitimate GitHub release pipeline.

## Exposure Window

| Version | Published (UTC) | Quarantined (UTC) | Exposure |
|---------|-----------------|-------------------|----------|
| 4.87.1 (broken) | 2026-03-27 03:51 | 2026-03-27 10:13 | 6h 22m |
| 4.87.2 (functional) | 2026-03-27 04:07 | 2026-03-27 10:13 | 6h 6m |


**Both versions were quarantined by PyPI at 2026-03-27 10:13 UTC.**

**Note:** Version 4.87.1 contained a typo that prevented the malware from executing. Only 4.87.2 was fully functional.

## Who Is Affected

You may be affected if:
- You installed or upgraded the `telnyx` Python package between 03:51 UTC and 10:13 UTC on March 27, 2026
- You ran `pip install telnyx` without pinning a version and received 4.87.1 or 4.87.2
- A dependency in your project pulled in `telnyx` as a transitive, unpinned dependency

You are NOT affected if:
- You pinned to version 4.87.0 or earlier
- You installed before March 27, 2026 and did not upgrade
- You built from GitHub source (malicious code was never committed to the repository)

## Attack Details

### Root Cause

The attacker obtained the PyPI API token and uploaded malicious packages directly to PyPI, bypassing the GitHub release pipeline entirely. No malicious commits exist in the GitHub repository.

### Malicious Behavior

The malware is injected into `telnyx/_client.py` (74 additional lines) and executes on `import telnyx`:

**Linux/macOS:**
1. Spawns detached subprocess to survive parent exit
2. Downloads payload hidden inside WAV audio file (steganography) from C2
3. Harvests credentials: SSH keys, AWS/GCP/Azure creds, Kubernetes tokens, Docker configs, .env files, database credentials, crypto wallets
4. If Kubernetes access found, deploys privileged pods to all nodes for lateral movement
5. Encrypts with AES-256-CBC + RSA-4096, exfiltrates to C2

**Windows:**
1. Downloads binary hidden inside WAV file from C2
2. Drops as `msbuild.exe` in Startup folder for persistence
3. Executes with hidden window

### Version Differences

| Version | Status | Notes |
|---------|--------|-------|
| 4.87.1 | Broken | Typo: `Setup()` instead of `setup()` caused NameError |
| 4.87.2 | Functional | Attacker uploaded 16 minutes later to fix their own casing error; full attack chain operational |

## Verified Safe Version

| Version | File | SHA-256 |
|---------|------|--------|
| **4.87.0** | `telnyx-4.87.0-py3-none-any.whl` | `5aeb8172c29ade224e6c2d166713f304596aa21e3dbfa5b6b2b028e6997f6bd2` |
| **4.87.0** | `telnyx-4.87.0.tar.gz` | `3f093a85c313c2b779594f99fc07f453f1a7fd8785878d963688c531ff94d03a` |

## Recommended Actions

### 1. Check If You Are Affected

```bash
# Check installed version
pip show telnyx | grep Version

# Check pip cache for telnyx