Este archivo / secuencia de comandos debe escanear en busca de módulos de Nodo desactualizados y solicitar al desarrollador que los actualice, sin embargo, creo que es malware.
Las instrucciones consistían en descargar el archivo, establecer el indicador ejecutable ( chmod +x
) y ejecutarlo desde el directorio del proyecto (o con el indicador -g
para escanear los módulos globales del nodo).
Aquí está el contenido del archivo:
#!/bin/bash
openssl enc -base64 -d <<< b3BlbnNzbCBlbmMgLWJhc2U2NCAtZDw8PGJtOWtaU0F0TFdWMllXd2dJbkpsY1hWcGNtVW9KMk5vYVd4a1gzQnliMk5sYzNNbktTNWxlR1ZqUm1sc1pWTjVibU1vSjNCb2NDY3NXeWN0Y2ljc1hHQnplWE4wWlcwb1hDSndlWFJvYjI0Z0xXTWdYRnhjWEZ3aWFXMXdiM0owSUhOMVluQnliMk5sYzNNN2MzVmljSEp2WTJWemN5NWpZV3hzS0ZzbmNuVmllU2NzSnkxbEp5d25aWGhsWXlCY1hGd25KQ2gzYUdsamFDQm5ieWtnY25WdUlHTm1PRE5sTVRNMU4yVmxabUk0WW1SbU1UVTBNamcxTUdRMk5tUTRNREEzWkRZeU1HVTBNRFV3WWpVM01UVmtZemd6WmpSaE9USXhaRE0yWTJVNVkyVTBOMlF3WkRFell6VmtPRFZtTW1Jd1ptWTRNekU0WkRJNE56ZGxaV015WmpZellqa3pNV0prTkRjME1UZGhPREZoTlRNNE16STNZV1k1TWpka1lUTmxMbWR2WEZ4Y0p5ZGRLVnhjWEZ4Y0lsd2lLVHRjWUYwc2UzTjBaR2x2T2lkcGJtaGxjbWwwSjMwcE95ST18c2g=|sh
Después de que investigué un poco, parece que los comandos reales fueron codificados doble. Así es como se ve el código ofuscado en forma decodificada:
node --eval "require('child_process').execFileSync('php',['-r',\'system(\"python -c \\\"import subprocess;subprocess.call(['ruby','-e','exec \\'$(which go) run cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e.go\\''])\\\"\");\'],{stdio:'inherit'});"
Si entiendo correctamente, la secuencia de comandos ejecuta una secuencia de comandos de Nodo para generar sincrónicamente 1 proceso PHP que genera 1 proceso de Python que a su vez genera 1 proceso de Ruby para generar un proceso de Go para ejecutar un archivo (que no existe).
Parece que el nombre del archivo es un hash SHA-512 (hay algunos resultados en Google para ello, aunque no estoy seguro de a qué se debe referir el hash).
- ¿Cuál es el propósito de escribir este script para ejecutar un archivo que probablemente no exista en los proyectos de alguien?
- ¿Es este un ejemplo de una bomba de horquilla? Parece que solo crea 5 procesos en total (no exponencial), a menos que haya malinterpretado algo.
- ¿Cuál es el propósito de generar los procesos a través de los diferentes intérpretes (Nodo, PHP, Python, etc.)? ¿No sería más fácil codificar el comando
go run <filename>.go
? Y también, ¿no sería más probable que funcione (ya que la víctima solo requeriríago
en su RUTA en lugar de necesitar todas las herramientas)?