¿Qué es www.roxoenos.xyz?

Escenario

Desde hace años tengo una aplicación web apoyada en Laravel, que mantengo con frecuencia. En el servidor corren dos instancias del framework, una para la aplicación principal con Laravel 6, y otra para un API que desplegué hace poco con Laravel 7.

Problema

Llevo unos días notando que las páginas tardan más en cargarse, problema que achaco a la saturación de la base de datos y no doy mayor importancia. Hace unos días un amigo me mostró como al intentar entrar en la página fue dirigido a otra, pero lo achaqué a un problema de su teléfono. Decido acceder al servidor para echar un vistazo a sus recursos. No noto nada raro hasta que me da por comprobar si el fichero de entrada de la aplicación, index.php, ha sido modificado. Como está bajo control de versiones basta con hacer un git diff HEAD public/index.php: Por lo visto «alguien» ha incrustado un bloque de código con una instrucción que ejecuta el siguiente código codificado en base64: Por lo que entiendo el script verifica si alguna de las cookies contienen las cadenas de texto «aeNee8pi» o «wordpress_logged_in», en cuyo caso no hace nada. De lo contrario redirecciona a la página https://www.roxoenos.xyz, que desconozco que hace. Pero me figuro que nada bueno.

Solución

Lo primero que hago es borrar el bloque de código incrustado. Pero al cabo de unos segundos vuelve a aparecer. No veo ningún proceso sospechoso corriendo en el servidor así que imagino que el causante de la regeneración del código debe de ser una tarea cron. La aplicación web usa el usuario www-data, y es el primero cuyo crontab compruebo con sudo nano /var/spool/cron/crontabs/www-data. Éste el contenido:

Así que cada dos por tres la tarea programada descarga y ejecuta un script misterioso. Pruebo a descargar el script pero wget devuelve un error ( failed: Connection refused). De haber tener tiempo investigaría un poco más, pero ahora quiero deshacerme del servidor. Ya no me fío. Hace tiempo que quiero probar LightSail de AWS, ésta puede ser una buena ocasión. Dos horas después lo tengo todo funcionando en la nueva máquina. Y un poco más tarde vuelvo a notar que la aplicación va muy lenta. ¿Cómo puede ser? No traje nada del antiguo servidor, solo el código fuente que está bajo control de versiones en GitHub. No puede ser que haya un trojano en el código…

Cuando accedo al servidor por SSH, un htop informa que el 100% de los recursos de las CPUs está siendo acaparado por dos procesos: kdevtmpfsi y kinsing. Ambos ejecutables están situados en /tmp. ¿Cómo han llegado ahí? Gracias a una búsqueda rápida en Google descubro que se trata de dos miners malvados. De nuevo ha aparecido una tarea cron que descarga y ejecuta un script de una dirección IP. La borro, mato los procesos del malware, borro los ejecutables y a continuación creo dos ficheros con el mismo nombre, pero de solo lectura:

Estos dos por lo menos no volverán a instalarse. Todavía me queda por averiguar cómo el atacante consigue crear tareas programadas. Tras una inspección minuciosa de los logs de nginx y otra búsqueda en Google. doy con la puerta trasera. En modo DEBUG, Laravel <= v8.4.2 permite la ejecución remota de código (CVE-2021-3129). Y, como no, sin saberlo una de las dos aplicaciones tenía el modo DEBUG igual a TRUE…

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *