Os desenvolvedores da plataforma VoIP Telnyx alertaram os usuários sobre a comprometimento do pacote telnyx no repositório PyPI, que conta com 756 mil downloads mensais e fornece um SDK para acessar a API Telnyx a partir de programas em Python. No dia 27 de março, os atacantes conseguiram publicar duas versões maliciosas, telnyx 4.87.1 e 4.87.2, após obter acesso ao PyPI devido ao roubo das credenciais do mantenedor. As versões maliciosas foram distribuídas entre 6:51 e 13:13 (MSK), antes de serem bloqueadas pela administração do PyPI. A infraestrutura, a API, os serviços de voz e a plataforma Telnyx não foram afetados.
O comprometimento ocorreu durante um ataque de supply chain mais amplo da TeamPCP, no qual recentemente os pacotes Python LiteLLM e Trivy foram comprometidos, e um código malicioso foi integrado ao complemento OpenVSX Checkmarx, além de um worm malicioso ter sido introduzido em 68 pacotes no repositório NPM. A chave RSA usada para criptografar os dados enviados coincidiu com as chaves utilizadas em outros ataques do grupo TeamPCP.
Nas versões criadas pelos atacantes, um código malicioso foi embutido no arquivo "_client.py" e ativado durante a importação do módulo. Após a ativação, servidores um arquivo de áudio ringtone.wav para sistemas Unix e hangup.wav para Windows foi carregado pelos atacantes. Esses arquivos eram reproduzidos como áudio, mas continham manipuladores maliciosos ocultos por meio de esteganografia.
Na plataforma Windows, o manipulador malicioso era salvo no sistema como "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\msbuild.exe" e era executado a cada login. Em macOS e Linux, eram realizados buscas e envios de chaves SSH, credenciais, conteúdo de variáveis de ambiente, tokens de acesso à API, parâmetros de conexão a serviços em nuvem como AWS, GCP, Azure e K8s, chaves de carteiras criptográficas, senhas de bancos de dados, entre outros. Os dados coletados eram criptografados usando os algoritmos AES-256-CBC + RSA-4096 e enviados em uma solicitação HTTP POST para um host externo.
Fonte: opennet.ru
