740 000 téléchargements par mois. C’est la popularité de Telnyx, un outil que des milliers de développeurs installent sans y réfléchir pour gérer appels, SMS et messagerie dans leurs applications. Jeudi 27 mars, des chercheurs en sécurité ont découvert que les deux dernières versions de cette bibliothèque Python contenaient un programme de vol de données, dissimulé dans un fichier audio au format WAV. Pas un virus classique, pas un lien piégé : un malware invisible, camouflé dans les ondes sonores d’une fausse sonnerie de téléphone.

Du code caché entre les notes de musique

La technique s’appelle la stéganographie : l’art de dissimuler un message à l’intérieur d’un fichier d’apparence normale. Ici, le groupe de hackers connu sous le nom de TeamPCP a inséré un programme malveillant directement dans les données audio d’un fichier WAV nommé « ringtone.wav ». Le fichier s’écoute normalement, sa durée et son poids ne trahissent rien. Mais entre chaque échantillon sonore se cache du code chiffré, extractible par une simple opération mathématique (un XOR avec les huit premiers octets comme clé de déchiffrement).

Concrètement, quand un développeur installe la version 4.87.1 ou 4.87.2 du paquet Telnyx via PyPI (le magasin officiel de bibliothèques Python), le code malveillant se déclenche dès la première utilisation, pas à l’installation. Une distinction technique qui a son importance : les systèmes de détection automatique de PyPI surveillent les scripts d’installation, pas le code exécuté à l’import. Le malware passe donc sous le radar des scanners, comme le détaille l’analyse de Socket Research publiée le jour même.

Clés SSH, portefeuilles crypto, jetons cloud : tout y passe

Sur les machines Linux et macOS, le programme télécharge le fichier « ringtone.wav » depuis un serveur distant, extrait le code malveillant des trames audio, puis l’exécute directement en mémoire sans jamais écrire de fichier sur le disque. Cette exécution fantôme rend la détection post-infection quasi impossible par les antivirus classiques.

La moisson est méthodique : clés SSH, identifiants de services cloud (AWS, Google Cloud, Azure), portefeuilles de cryptomonnaies, variables d’environnement contenant des mots de passe, jetons d’authentification. L’ensemble est compressé, chiffré avec un double verrou (AES-256 pour les données, RSA-4096 pour la clé de session), puis expédié vers un serveur contrôlé par TeamPCP. Seuls les attaquants peuvent déchiffrer le butin, selon JFrog Security qui a identifié la même clé publique RSA que lors de précédentes attaques du groupe.

Sur Windows, la mécanique diffère. Un second fichier WAV, baptisé « hangup.wav », dépose un exécutable nommé msbuild.exe dans le dossier de démarrage automatique du système. Le programme se relance à chaque connexion, avec un mécanisme de verrouillage qui espace les exécutions de douze heures pour éviter de saturer le réseau et d’attirer l’attention.

Kubernetes dans le viseur : l’escalade silencieuse

Le détail le plus préoccupant, relevé par les chercheurs d’Endor Labs, concerne les environnements Kubernetes. Si la machine infectée héberge un cluster (ces architectures qui orchestrent des centaines de serveurs), le malware énumère automatiquement les secrets du cluster et déploie des conteneurs à privilèges élevés sur chaque nœud. L’objectif : remonter jusqu’au système hôte et compromettre l’ensemble de l’infrastructure.

Pour une bibliothèque de téléphonie utilisée dans des backends d’entreprise, le scénario est cauchemardesque. Les serveurs qui gèrent des appels VoIP, des envois de SMS ou des connexions WhatsApp professionnelles manipulent quotidiennement des clés API, des données clients et des flux de paiement. Un accès à ces environnements représente un point d’entrée vers des systèmes bien plus critiques.

TeamPCP, récidiviste de la chaîne d’approvisionnement

Ce n’est pas le premier coup d’éclat du groupe. TeamPCP est responsable de la compromission de Trivy, le scanner de vulnérabilités d’Aqua Security, ainsi que de LiteLLM, une bibliothèque Python populaire pour gérer les modèles de langage, frappée quelques jours plus tôt. Le groupe a aussi mené des attaques destructrices (de type « wiper ») contre des systèmes iraniens, rapporte BleepingComputer.

Leur mode opératoire se répète : ils compromettent le compte du mainteneur d’une bibliothèque open source populaire (probablement via des identifiants volés), publient une version piégée qui passe les contrôles automatiques, puis récoltent les données pendant la fenêtre de quelques heures avant que la communauté ne réagisse. La première version malveillante de Telnyx (4.87.1) a été publiée à 03h51 UTC, corrigée par une 4.87.2 fonctionnelle à 04h07, et détectée dans la matinée par les équipes d’Aikido, Socket et Endor Labs.

Le paquet a depuis été mis en quarantaine par PyPI, mais le mal est potentiellement fait : tout système ayant importé les versions 4.87.1 ou 4.87.2 doit être considéré comme compromis, avec rotation immédiate de l’ensemble des secrets, avertit l’équipe de JFrog.

Pourquoi un fichier audio, et pas un simple exécutable

La stéganographie audio n’est pas nouvelle, mais son usage dans une attaque de chaîne d’approvisionnement logicielle de cette envergure marque un palier. Le choix du format WAV est calculé : c’est un format non compressé, ce qui permet d’insérer des données dans les trames sans altérer la structure du fichier. Un MP3 ou un AAC, compressés par nature, détruiraient le code caché lors de l’encodage.

Le camouflage est d’autant plus efficace que Telnyx est une bibliothèque de téléphonie. Télécharger un fichier audio depuis un serveur distant ne déclenche aucune alerte comportementale : c’est exactement ce qu’un SDK de voix sur IP est censé faire. Les chercheurs de Phoenix Security soulignent que cette adéquation entre la couverture (un outil de communication) et le vecteur d’attaque (un fichier sonore) rend la détection humaine presque impossible lors d’une revue de code rapide.

Trois jours, trois bibliothèques, un seul groupe

L’attaque sur Telnyx s’inscrit dans une vague plus large. En une semaine, TeamPCP a compromis LiteLLM (le 24 mars), puis Telnyx (le 27 mars), et continue de cibler l’écosystème open source à travers PyPI, npm, Go et même les extensions Visual Studio Code. SafeDep, qui suit les attaques en chaîne d’approvisionnement, estime que le groupe exploite les accès obtenus lors de chaque compromission pour en déclencher de nouvelles, dans un effet domino qui touche des millions de développeurs.

La version propre de Telnyx, la 4.87.0, reste disponible et sûre. Mais l’épisode relance un débat de fond : comment un seul compte compromis sur PyPI peut-il mettre en danger 740 000 installations mensuelles sans qu’aucun mécanisme ne bloque la publication ? La plateforme a renforcé l’obligation d’authentification à deux facteurs pour les mainteneurs de paquets critiques en 2024, mais le verrouillage ne couvre pas encore l’ensemble des comptes à fort impact.

Python Software Foundation, l’organisation qui gère PyPI, travaille depuis deux ans sur un système de signatures cryptographiques des paquets (Sigstore), censé garantir l’identité du publiant. Le déploiement complet, prévu pour fin 2026, n’aurait pas empêché cette attaque si les identifiants du mainteneur avaient été volés, mais il aurait au moins permis de tracer la chaîne de publication et de révoquer les versions malveillantes plus rapidement.