|

¿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…

Publicaciones Similares

  • Extracción del texto de un pdf creado a partir de una imagen

    Escenario Una manera de preparar los exámenes es practicando con aquellos de años anteriores. Para los que estudiamos en la UNED, el centro de Calatayud cuenta con un extenso repositorio de PDFs de exámenes de previas convocatorias. Problema Los PDFs suelen ser de aquellos generados a partir de imágenes y no de texto lo que…

  • |

    Gestión de imágenes corruptas

    Escenario Nos encontramos ante una biblioteca de decenas de miles de archivos fotográficos, de los cuales un porcentaje considerable está corrupto. Objetivo Depurar las imágenes corruptas a fin de organizar como es debido nuestra biblioteca. Solución Nota: sólo aplicable a sistemas linux Vamos a necesitar la aplicación ImageMagick: $sudo apt-get install imagemagick y rsync, que debería venir instalado…

  • Autenticación múltiple en Spring boot: JWT y formulario

    Escenario Por exigencias de un tercero debemos adaptar nuestro servicio web para que sea compatible con autenticación por JWT. Hasta ahora las llamadas al API se hacían desde dentro de la aplicación usando las mismas credenciales del usuario autenticado por cookie. La configuración de la cadena de filtros de Spring Security es la siguiente:

    …

  • Actualización de MySQL: de la versión 5.7 a 8.0

    Atención no probar esta solución en sistemas en producción. Es solo una demostración de prueba. Escenario Por la razón que fuera queremos actualizar la versión de MySQL de 5.7 a 8.0 en ubuntu 16.04. En mi caso quería probar si con la actualización mejoraba cierto problemillas que estaba teniendo con la codificación de caracteres. Problema…

Deja una respuesta

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