CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-955R-262C-33JC

CVE-2026-33634: Supply Chain Compromise and Malicious Code Execution in Telnyx Python SDK

Alon Barad
Alon Barad
Software Engineer

Mar 31, 2026·6 min read·41 visits

Executive Summary (TL;DR)

Malicious versions of the Telnyx Python SDK were published to PyPI, executing a steganographic payload delivery system upon import to steal credentials and establish system persistence.

The official Telnyx Python SDK (telnyx) on PyPI was compromised in a supply chain attack by the threat actor TeamPCP. Versions 4.87.1 and 4.87.2 contain embedded malicious code that executes upon import, utilizing WAV audio steganography to deploy secondary payloads for credential harvesting and persistence.

Vulnerability Overview and Supply Chain Compromise

CVE-2026-33634 represents a critical supply chain compromise affecting the official Telnyx Python SDK (telnyx) distributed via the Python Package Index (PyPI). The threat actor, identified as TeamPCP, successfully authenticated to PyPI using compromised developer credentials and directly published two malicious package versions: 4.87.1 and 4.87.2. This direct upload mechanism completely bypassed the project's established GitHub-based CI/CD pipeline, which is normally managed by Stainless.

The isolation of the PyPI registry from the source code repository resulted in a discrepancy where the GitHub repository remained uncompromised. No corresponding tags, releases, or commits exist in the public version control history for versions 4.87.1 or 4.87.2. Developers and automated dependency management systems pulling the telnyx package directly from PyPI received the malicious artifact automatically, provided their version pinning permitted the update.

The injected payload is categorized as Embedded Malicious Code (CWE-506). Approximately 74 lines of unauthorized code were appended to the core client module located at telnyx/_client.py. Because this module is fundamentally required for the SDK's operation, the malicious execution chain is initiated instantaneously whenever a downstream application executes the import telnyx statement. No further application interaction or specific API calls are required to trigger the exploit.

Execution Architecture and Steganographic Delivery

The malicious injection operates as an immediate execution hook during the Python module initialization phase. Upon execution of import telnyx, the injected code evaluates the underlying operating system environment using platform.system(). This evaluation dictates the distinct execution paths and payloads deployed against Windows versus Unix-like systems. Both paths utilize a shared technique of WAV audio steganography to obscure the secondary payloads and evade network-level signature detection.

The primary steganographic mechanism involves downloading a seemingly benign .wav file from the threat actor's command and control (C2) infrastructure at 83.142.209.203:8080. The malware reads the data frames of the audio file, bypassing standard audio headers. The payload is obfuscated using an XOR cipher, a technique designed to bypass static analysis engines that inspect downloaded binaries.

The extraction routine leverages the first 8 bytes of the hidden data chunk as the XOR decryption key. The Python script reads this prefix, iterates over the subsequent byte array, and applies the XOR operation to reconstruct the original executable or script. Once the payload is successfully reassembled in memory, it is written to the local disk and executed.

Windows Exploitation and Persistence Mechanisms

When the compromised SDK is imported within a Windows environment, the malware invokes a designated setup() function. This function is explicitly engineered to establish persistent access and execute a compiled binary payload. The code dynamically constructs a file path pointing to the current user's Startup folder: %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\msbuild.exe. Masquerading as the legitimate Microsoft Build Engine (msbuild.exe) reduces immediate suspicion during manual system inspection.

To prevent redundant executions and excessive resource consumption that might alert the user, the malware implements a locking mechanism. It attempts to create or verify the existence of an msbuild.exe.lock file in the same directory. The script checks the timestamp of this lock file; if the lock file exists and was modified within the preceding 12 hours, the execution halts. If the conditions are met, the script proceeds to download hangup.wav from the C2 server.

Following the XOR steganography extraction, the resulting executable is written to the msbuild.exe path. The Python script then executes the binary using the subprocess module. Crucially, it passes the CREATE_NO_WINDOW creation flag (0x08000000) to the Windows API. This flag ensures the binary runs entirely in the background without spawning a visible console window, allowing the persistence mechanism and subsequent C2 communications to operate silently.

Unix-like Exploitation and Credential Harvesting

On Linux and macOS systems, the environment check routes execution to the FetchAudio() function. The infection chain on Unix-like systems prioritizes immediate, high-value data extraction over long-term binary execution. The script initiates an HTTP GET request to download ringtone.wav from the identical C2 infrastructure used in the Windows attack path.

The XOR extraction sequence reconstructs a secondary Python script rather than a compiled executable. This secondary script operates as a highly specialized credential stealer. It initiates an aggressive file system traversal, specifically targeting user home directories for sensitive configuration files. Primary targets include .env files, .aws/credentials, SSH keys, and shell history files (.bash_history, .zshrc).

The exfiltration phase employs robust cryptographic protocols. Collected data is consolidated and encrypted using the AES-256-CBC algorithm. The symmetric AES key is subsequently encrypted using a hardcoded RSA-4096 public key embedded within the stealer. This hybrid encryption schema ensures that network defenders intercepting the traffic cannot decrypt the payload without the corresponding RSA private key held by TeamPCP.

The final encrypted blob is packaged and transmitted to the C2 server via an HTTP POST request. To bypass standard web application firewalls and format expectations, the threat actor utilizes a custom HTTP header: X-Filename: tpcp.tar.gz. The presence of this specific header, combined with the RSA-4096 key signature, matches the operational profile observed in the prior compromise of the LiteLLM package, confirming TeamPCP attribution.

Impact Assessment and Code Fix

The impact of CVE-2026-33634 is total system compromise scoped to the privileges of the user executing the Python process. On Windows, the attacker gains persistent arbitrary code execution. On Linux and macOS, the attacker successfully extracts authentication tokens, cloud provider credentials, and environment variables. These stolen credentials facilitate immediate lateral movement, data exfiltration from adjacent cloud environments, and further supply chain attacks if the victim holds repository write access.

Because the vulnerability exists exclusively within the PyPI distribution and not the source repository, the remediation required administrative intervention at the package registry level rather than a code-level patch. The standard GitHub repository for Telnyx remained untainted. Telnyx security personnel mitigated the issue by revoking the compromised publishing credentials, deleting versions 4.87.1 and 4.87.2 from PyPI, and designating version 4.87.0 as the latest stable release.

No residual vulnerability remains in the underlying SDK codebase. However, environments that cached the malicious package versions locally or within internal artifact registries (e.g., JFrog Artifactory, Sonatype Nexus) remain susceptible until the specific hashes are explicitly banned and purged. Developers must explicitly downgrade to version 4.87.0 to eliminate the threat.

Official Patches

TelnyxTelnyx Official Security Notice
GitHub Advisory DatabaseGHSA-955R-262C-33JC

Technical Appendix

CVSS Score
9.4/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
EPSS Probability
21.15%
Top 4% most exploited

Affected Systems

WindowsLinuxmacOSPython Package Index (PyPI) Ecosystem

Affected Versions Detail

Product
Affected Versions
Fixed Version
telnyx
Telnyx
4.87.1 - 4.87.24.87.0
AttributeDetail
CWE IDCWE-506 (Embedded Malicious Code)
Attack VectorNetwork (Supply Chain / PyPI Registry)
CVSS v4.0 Score9.4 (Critical)
EPSS Score0.21153 (21.15%)
Execution TriggerModule Initialization (import telnyx)
Exploit StatusActive Exploitation
Primary Payload ObfuscationXOR Steganography via WAV Audio

MITRE ATT&CK Mapping

T1195.002Supply Chain Compromise: Compromise Software Dependencies
Initial Access
T1027.003Obfuscated Files or Information: Steganography
Defense Evasion
T1547.001Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder
Persistence
T1005Data from Local System
Collection
T1560.003Archive Collected Data: Archive via Library
Collection
T1071.001Application Layer Protocol: Web Protocols
Command and Control
CWE-506
Embedded Malicious Code

The product contains code that appears to be malicious in nature, such as a virus, trojan, or backdoor.

Vulnerability Timeline

Malicious versions 4.87.1 and 4.87.2 published to PyPI by TeamPCP.
2026-03-27

References & Sources

  • [1]Telnyx Official Security Notice
  • [2]GitHub Advisory (GHSA-955R-262C-33JC)
  • [3]SafeDep: Compromised Telnyx on PyPI Analysis
  • [4]JFrog: TeamPCP Strikes Again - Telnyx Popular Library Compromised
Related Vulnerabilities
GHSA-69fq-xp46-6x23

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 6 hours ago•CVE-2026-48861
2.1

CVE-2026-48861: HTTP Request Splitting and Smuggling via Method Parameter CRLF Injection in Elixir Mint

CVE-2026-48861 is a client-side HTTP request-line CRLF (Carriage Return Line Feed) injection vulnerability in the popular Elixir HTTP client library, Mint. The vulnerability permits HTTP Request Splitting and HTTP Request Smuggling when an application forwards untrusted, attacker-controlled inputs to Mint's HTTP client requests as either the HTTP request method or target. By embedding CRLF characters within these parameters, an attacker can terminate the request line prematurely, inject malicious headers, or pipeline entirely independent requests. These smuggled requests are then processed by upstream or downstream proxy servers as separate HTTP queries on the same TCP connection. While Mint version 1.7.0 introduced target validation to secure the request target, the HTTP request method parameter remained completely unvalidated. This flaw allows attackers to bypass routing filters, access restricted internal APIs, or poison HTTP caches under default configurations.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 7 hours ago•CVE-2026-49753
6.3

CVE-2026-49753: HTTP Request/Response Smuggling via Inconsistent Content-Length Parsing in Elixir Mint Client

An Inconsistent Interpretation of HTTP Requests (HTTP Request/Response Smuggling) vulnerability in the Elixir Mint HTTP client allows attacker-controlled HTTP/1 servers to desynchronize response framing on shared connections due to over-lenient parsing of sign-prefixed Content-Length headers.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 7 hours ago•CVE-2026-49754
8.2

CVE-2026-49754: Denial of Service via Unbounded HTTP/2 CONTINUATION Frame Accumulation in Elixir Mint

An allocation of resources without limits or throttling vulnerability in Elixir Mint allows an attacker-controlled HTTP/2 server to exhaust memory in a Mint client. The vulnerability is exploited by sending a HEADERS frame without the END_HEADERS flag followed by an infinite stream of CONTINUATION frames. Because the client lacks limits on the incoming header-block accumulator, the client continuously consumes memory until an out-of-memory crash occurs.

Amit Schendel
Amit Schendel
7 views•6 min read
•about 8 hours ago•CVE-2026-48596
2.1

CVE-2026-48596: Improper Neutralization of CRLF Sequences in Elixir Tesla Multipart HTTP Client

CVE-2026-48596 is an Improper Neutralization of CRLF Sequences in HTTP Headers (HTTP Request/Response Splitting, CWE-113) in the Elixir Tesla HTTP client. The flaw resides in how multipart content-type parameters are joined and serialized, enabling attackers to inject arbitrary headers or split HTTP requests when applications pass untrusted inputs to the parameters of multipart uploads.

Alon Barad
Alon Barad
5 views•6 min read
•about 8 hours ago•CVE-2026-48594
8.2

CVE-2026-48594: Decompression Bomb Denial of Service in Elixir Tesla HTTP Client

An improper handling of highly compressed data (decompression bomb) vulnerability exists in the Elixir Tesla HTTP client when utilizing response decompression middlewares. By serving highly compressed responses or stacked content-encoding headers, a malicious server can cause arbitrary heap exhaustion, leading to a denial of service (DoS) crash in the BEAM virtual machine.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 9 hours ago•CVE-2026-48595
8.2

CVE-2026-48595: Cross-Origin Credential Leakage in Elixir Tesla Client via Case-Sensitive Redirect Filter Bypass

A high-severity security vulnerability in Elixir's Tesla HTTP client library (CVE-2026-48595) allows unauthenticated remote attackers to harvest sensitive credentials, including Authorization headers and cookies. The flaw resides in the 'Tesla.Middleware.FollowRedirects' component, which performs case-sensitive lookups when stripping credentials during cross-origin redirects. Because HTTP headers are case-insensitive by RFC specifications, standard canonical casing (e.g., 'Authorization') bypasses the lowercase-only blocklist, leaking tokens to untrusted external redirect destinations.

Alon Barad
Alon Barad
6 views•5 min read