Los desarrolladores de la plataforma VoIP Telnyx han advertido a los usuarios sobre la compromisión del paquete telnyx en el repositorio PyPI, que cuenta con 756 mil descargas al mes y proporciona un SDK para interactuar con la API de Telnyx desde programas en Python. El 27 de marzo, los atacantes lograron publicar dos versiones maliciosas, telnyx 4.87.1 y 4.87.2, después de haber obtenido acceso a PyPI tras la captura de las credenciales del mantenedor. Las versiones maliciosas se distribuyeron desde las 6:51 hasta las 13:13 (MSK), después de lo cual fueron bloqueadas por la administración de PyPI. La infraestructura, API, servicios de voz y plataforma de Telnyx no resultaron afectados.
La compromisión se llevó a cabo durante un ataque de la cadena de suministro a mayor escala de TeamPCP, en el cual recientemente se vieron comprometidos los paquetes de Python LiteLLM y Trivy, así como la integración de un código malicioso en la extensión OpenVSX de Checkmarx y la inserción de un gusano malicioso en 68 paquetes del repositorio NPM. La clave RSA utilizada para cifrar los datos enviados coincidía con las claves empleadas en otros ataques del grupo TeamPCP.
Las versiones creadas por los atacantes contenían un código malicioso que se integró en el archivo “_client.py” y se activaba al importar el módulo. Tras la activación, servidores se descargaba desde los atacantes un archivo de sonido ringtone.wav para sistemas Unix-like y hangup.wav para Windows. Estos archivos se reproducían exitosamente como sonidos, pero contenían manejadores maliciosos ocultos integrados mediante esteganografía.
En la plataforma Windows, el manejador malicioso se guardaba en el sistema como “%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\msbuild.exe” y se ejecutaba en cada inicio de sesión. En macOS y Linux se realizaba la búsqueda y el envío de claves SSH, credenciales, contenido de variables de entorno, tokens de acceso a la API, parámetros de conexión a servicios en la nube de AWS, GCP, Azure y K8s, claves de billeteras criptográficas, contraseñas de bases de datos, etc. Los datos encontrados se cifraban utilizando algoritmos AES-256-CBC + RSA-4096 y se enviaban mediante una solicitud HTTP POST a un host externo.
Fuente: opennet.ru
