WordPress hackeado con redirección

Uno de los hackeos más habituales en WordPress que no se han mantenido correctamente es el de las redirecciones hacia otros sitios.

Hace unos días me llegó un WordPress 3.4.x (actualmente tenemos las versiones 5.3.x) que, obviamente, estaba desactualizado por completo, tanto el núcleo como plugins. El theme era hecho a medida. Además tenía PHP 5.6.x.

¿Cómo corregir esta problemática?

Para empezar, he de decir que esta corrección que propongo es muy radical, por lo que es posible que el sitio deje de funcionar y haya que hacer cambios importantes, pero el objetivo es que todo acabe puesto al día.

Otra cosa importante es que se debe tener una copia de seguridad del sitio por completo y de la base de datos.

Para acabar, será necesario tener acceso SSH al servidor donde está el sitio y disponer de WP-CLI para facilitar las tareas. Se puede hacer de forma más manual, pero con WP-CLI se facilita todo el proceso.

Los pasos

Lo primero a hacer es actualizar todo. A lo bestia, sí. Para ello actualizaremos el core, plugins, themes y translations.

Para empezar, ejecutaremos varios comandos. Actualizaremos e propio WP-CLI, y luego el núcleo y el resto de elementos.

wp cli update
wp core update --force
wp core update-db
wp plugin update --all
wp theme update --all
wp language core update
wp language plugin update --all
wp language theme update --all

Con esto tendremos todo al día y muchas probabilidades de que algo no funcione.

Lo siguiente que intentaremos hacer es entrar en el WP-Admin desde la dirección como esta:

https://example.com/wp-admin/

Si al entrar tenemos problemas de redirección, haremos un primer repaso del fichero WP-Config. Mi recomendación es aplicar una versión un poco agresiva basada en el fichero que genera por defecto WP-Config. Sobre todo es importante configurar el Site URL y Core files URL con la URL correcta para evitar esas redirecciones.

Con esto deberíamos poder acceder al propio panel de gestión de WordPress, aunque seguramente si entramos en la página principal seguiremos teniendo las redirecciones.

Lo siguiente que podemos hacer es investigar qué tipo de redirección tenemos. Aún así, si vamos al modo rápido, es muy probable que lo que se haya hecho es una redirección vía JavaScript. Por defecto, en las entradas de un sitio con WordPress, no deberían existir códigos con <script> por lo que nos focalizaremos en que estos no se carguen.

Para ello, lo que haremos será sustituir los scripts por algo que nos e pueda ejecutar. ¿Cómo? Pues sustituyendo <script por <scr1pt, por ejemplo. Para ello usaremos un sistema de reemplazo del propio WP-CLI.

wp search-replace '<script' '<scr1pt'

Con esto impediremos que se caguen los scripts que se han incluido dentro de las entradas.

En general, con estos pasos, tendremos un sitio al día y con la posibilidad de tener todo al día. Si bien es cierto que con este último paso sería suficiente para arreglar el problema, el foco de la actualización viene porque seguramente el sistema tiene agujeros de seguridad y, corregir puntualmente los scripts, serviría de nada ya que al poco tiempo volverá a estar vulnerable.

Este problema es uno de los múltiples que te puedes encontrar si no haces mantenimiento de tu sitio pero, obviamente, cada caso puede ser distinto, así que antes de actuar, revisa que realmente el problema que tienes es similar al que comento.


Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.