{"id":415,"date":"2026-03-27T17:24:08","date_gmt":"2026-03-27T17:24:08","guid":{"rendered":"https:\/\/thedigitalfortress.us\/?p=415"},"modified":"2026-03-27T17:24:08","modified_gmt":"2026-03-27T17:24:08","slug":"teampcp-pushes-malicious-telnyx-versions-to-pypi-hides-stealer-in-wav-files","status":"publish","type":"post","link":"https:\/\/thedigitalfortress.us\/?p=415","title":{"rendered":"TeamPCP Pushes Malicious Telnyx Versions to PyPI, Hides Stealer in WAV Files"},"content":{"rendered":"<div id=\"articlebody\">\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj1CMUCCEUOX5JczcW-qUC2Bw8_3GmKNoLItyUq-AeuCUvFrJJL0t6aW5EhyJzNT5OyQJulbqwy847fK_EEBieTmTHEKn33suBcHss0AflwRWkPdmqT7FUbX5Rahkwz09g0Fw2GDZr00dAqHeEouzWvFVKMLgNshyO2HQ6QcD5qtbNu59djr1cdm0iV_ksj\/s1700-e365\/wave.jpg\" style=\"display: block;  text-align: center; clear: left; float: left;\"><\/a><\/div>\n<p>TeamPCP, the threat actor behind the supply chain attack targeting Trivy, KICS, and litellm, has now compromised the <a href=\"https:\/\/pypi.org\/project\/telnyx\/\" rel=\"noopener\" target=\"_blank\">telnyx<\/a> Python package by pushing two malicious versions to steal sensitive data.<\/p>\n<p>The two versions, 4.87.1 and 4.87.2, published to the Python Package Index (PyPI) repository on March 27, 2026, concealed their credential harvesting capabilities within a .WAV file. Users are recommended to downgrade to version 4.87.0 immediately. The PyPI project is currently quarantined.<\/p>\n<p>Various reports from <a href=\"https:\/\/www.aikido.dev\/blog\/telnyx-pypi-compromised-teampcp-canisterworm\" rel=\"noopener\" target=\"_blank\">Aikido<\/a>, <a href=\"https:\/\/www.endorlabs.com\/learn\/teampcp-strikes-again-telnyx-compromised-three-days-after-litellm\" rel=\"noopener\" target=\"_blank\">Endor Labs<\/a>, <a href=\"https:\/\/ossprey.com\/blog\/telnyx-pypi-malware-wav\/\" rel=\"noopener\" target=\"_blank\">Ossprey Security<\/a>, <a href=\"https:\/\/safedep.io\/malicious-telnyx-pypi-compromise\/\" rel=\"noopener\" target=\"_blank\">SafeDep<\/a>, <a href=\"https:\/\/socket.dev\/blog\/telnyx-python-sdk-compromised\" rel=\"noopener\" target=\"_blank\">Socket<\/a>, and <a href=\"https:\/\/www.stepsecurity.io\/blog\/teampcp-plants-wav-steganography-credential-stealer-in-telnyx-pypi-package\" rel=\"noopener\" target=\"_blank\">StepSecurity<\/a> indicate the malicious code is <a href=\"https:\/\/github.com\/team-telnyx\/telnyx-python\/issues\/235\" rel=\"noopener\" target=\"_blank\">injected<\/a> into \u00abtelnyx\/_client.py,\u00bb causing it to be invoked when the package is imported into a Python application. The malware is designed to target Windows, Linux, and macOS systems.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/not-fast-enough-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhlXM830ruQd2xT6M7JNeNRjaFa1onD12WjSCHihTFMTzbyfT9h-irPmXy_h3E1HGSs6sdv7FTmnyNVTM5kmSb7BuUtZe8gKoTQt99P1sSzRcqqXpOJP6eoAOhR3DGb6qHx9kOZ_HBZUMmVnsnd0DM7QfUp81bgzTvvgLww6oqB-EhnDfWXH5pWCYhAsyLs\/s728-e100\/tl-d.jpg\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>\u00abOur analysis reveals a three-stage runtime attack chain on Linux\/macOS consisting of delivery via audio steganography, in-memory execution of a data harvester, and encrypted exfiltration,\u00bb Socket said. \u00abThe entire chain is designed to operate within a self-destructing temporary directory and leave near-zero forensic artifacts on the host.\u00bb<\/p>\n<p><a name=\"more\"\/><\/p>\n<p>On Windows, the malware downloads a file named \u00abhangup.wav\u00bb from a command-and-control (C2) server and extracts from the audio data an executable that&#8217;s then dropped into the Startup folder as \u00abmsbuild.exe.\u00bb This allows it to persist across system reboots and automatically run every time a user logs in to the system.<\/p>\n<p>In case the compromised host runs on Linux or macOS, it fetches a different .WAV file (\u00abringtone.wav\u00bb) from the same server to extract a third-stage collector script and run. The credential harvester is designed to capture a wide range of sensitive data and exfiltrate the data in the form of \u00abtpcp.tar.gz\u00bb via an HTTP POST request to \u00ab83.142.209[.]203:8080.\u00bb<\/p>\n<p>\u00abThe standout technique in this sample &#8211; and the reason for the post title &#8211; is the use of audio steganography to deliver the final payload,\u00bb Ossprey Security said. \u00abRather than hosting a raw executable or a base64 blob on the C2 (both of which are trivially flagged by network inspection and EDR), the attacker wraps the payload inside a .WAV file.\u00bb<\/p>\n<p>It&#8217;s currently not known how the package&#8217;s PYPI_TOKEN was obtained by TeamPCP, but it&#8217;s likely that it was through a prior credential harvesting operation.<\/p>\n<p>\u00abWe believe the most likely vector is the litellm compromise itself,\u00bb Endor Labs researchers Kiran Raj and Rachana Misal said. \u00abTeamPCP&#8217;s harvester swept environment variables, .env files, and shell histories from every system that imported litellm. If any developer or CI pipeline had both litellm installed and access to the telnyx PyPI token, that token was already in TeamPCP&#8217;s hands.\u00bb<\/p>\n<p>What&#8217;s notable about the attack is the absence of a persistence mechanism in Linux and macOS and the use of a temporary directory to conduct the malicious actions and recursively delete all its contents once everything is complete.<\/p>\n<p>\u00abThe strategic split is clear. Windows gets persistence: a binary in the Startup folder that survives reboots, providing the threat actor with long-term, repeatable access,\u00bb Socket explained. \u00abLinux\/macOS gets smash-and-grab: a single, high-speed data harvesting operation that collects everything of value and exfiltrates it immediately, then vanishes.\u00bb<\/p>\n<p>The development comes a few days after the threat actor <a href=\"https:\/\/www.wiz.io\/blog\/threes-a-crowd-teampcp-trojanizes-litellm-in-continuation-of-campaign\" rel=\"noopener\" target=\"_blank\">distributed<\/a> trojanized versions of the popular litellm Python package to exfiltrate cloud credentials, CI\/CD secrets, and keys to a domain under its control.<\/p>\n<p>The supply chain incident also reflects a new-found maturation, where the threat actor has consistently infected legitimate, trusted packages with massive user bases to distribute malware to downstream users and widen blast radius, rather than directly publishing malicious typosquats to open-source package repositories.<\/p>\n<p>\u00abThe target selection across this campaign focuses on tools with elevated access to automated pipelines: a container scanner (Trivy), an infrastructure scanning tool (KICS), and an AI model routing library (litellm),\u00bb Snyk <a href=\"https:\/\/snyk.io\/articles\/poisoned-security-scanner-backdooring-litellm\/\" rel=\"noopener\" target=\"_blank\">said<\/a>. \u00abEach of these tools requires broad read access to the systems it operates on (credentials, configs, environment variables) by design.\u00bb<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/ciso-risk-comm-cert-li-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjoqpwvMkmQTpI6oFBcM5sjZJ4sJ2YplYYhb-ceY5aPYSXjkfcX-xHTDS-SMK3wzNy_kFuH4yN1umKPloMnloAmmRc5nXo64laMkM5neZzco95ZJXnRH-iV-6vAXRDv8vCSgWdcloM_rsNLykF6rlZbcXQ2n2fT-No23La_8rS67S8terJhozZU9JPmB9kO\/s728-e100\/ciso-light-d.png\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>To mitigate the threat, developers are advised to perform the following actions &#8211;<\/p>\n<ul>\n<li>Audit Python environments and requirements.txt files for telnyx==4.87.1 or telnyx==4.87.2. If found, replace them with a clean version.<\/li>\n<li>Assume compromise and rotate all secrets.<\/li>\n<li>Look for a file named \u00abmsbuild.exe\u00bb in the Windows Startup folder.<\/li>\n<li>Block the C2 and exfiltration domain (\u00ab83.142.209[.]203\u00bb).<\/li>\n<\/ul>\n<p>The compromise is part of a broader, ongoing campaign undertaken by <a href=\"https:\/\/mrcloudbook.com\/teampcp-supply-chain-attack-telnyx-canisterworm-full-analysis-cve-2026-33634\/\" rel=\"noopener\" target=\"_blank\">TeamPCP<\/a> spanning multiple ecosystems, with the threat actor announcing collaborations with other cybercriminal groups like LAPSUS$ and an emerging ransomware group called <a href=\"https:\/\/www.halcyon.ai\/ransomware-alerts\/emerging-ransomware-group-vect\" rel=\"noopener\" target=\"_blank\">Vect<\/a> to conduct extortion and ransomware operations.<\/p>\n<p>This also signals a shift where ransomware gangs, which have historically focused on initial access methods like phishing and exploitation of security flaws, are now weaponizing supply chain attacks targeting the open source infrastructure as an entry point for follow-on attacks.<\/p>\n<p>\u00abThis puts a spotlight on anything in CI\/CD environments that isn\u2019t locked down,\u00bb Socket said. \u00abSecurity scanners, IDE extensions, build tooling, and execution environments are granted broad access because they\u2019re expected to need it. When attackers are targeting the tools themselves, anything running in the pipeline has to be treated as a potential entry point.\u00bb<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>TeamPCP, the threat actor behind the supply chain attack targeting Trivy, KICS, and litellm, has now compromised the telnyx Python package by pushing two malicious versions to steal sensitive data.&hellip;<\/p>\n","protected":false},"author":1,"featured_media":416,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[236,935,33,932,934,478,855,933,867,936],"class_list":["post-415","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-files","tag-hides","tag-malicious","tag-pushes","tag-pypi","tag-stealer","tag-teampcp","tag-telnyx","tag-versions","tag-wav"],"_links":{"self":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/415","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=415"}],"version-history":[{"count":0,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/415\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/media\/416"}],"wp:attachment":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=415"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=415"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}