Tips para mejorar nuestra seguridad de WordPress.

WP SysAdmin – Javier Casares


Aquí vas a encontrar distintos elementos relacionados con la Seguridad de WordPress. Hay elementos generales, al alcance de todo el mundo, y otros que requieren conocimientos técnicos o de sistemas.

General

Aprende elementos generales y básicos sobre la Seguridad de WordPress, además de las obligaciones que tienes como responsable de un sitio web con WordPress.

Comenzando con la Seguridad de WordPress

WordPress es un sistema seguro, de código abierto y mantenido por la comunidad lo que lo hace fácilmente actualizable en cuanto se detecta cualquier problema.

 Aplica el Sentido Común en tu sitio WordPress

Dicen que el sentido común es el menos común de los sentidos, y por eso te pido un poco de él.

Tipos de ataque sobre WordPress

Existen infinidad de posibles ataques a tu sitio, ya que existen infinidad de posibles puntos de acceso a los mismos, ya sean por el propio WordPress, pero también por el servidor, los usuarios, comentarios, códigos de script, etcétera.

 Contraseñas seguras para WordPress

¿Qué podemos considerar hoy una contraseña segura? Pues probablemente una de 24 caracteres alfanuméricos y con símbolos. A partir de ahí, lo que queramos.

 GDPR (General Data Protection Regulation) y WordPress

Entre otros detalles, esta legislación vendría a decirte que has de recoger información sobre algunos de los elementos que WordPress proporciona en tu sitio, como por ejemplo el registro de usuarios, comentarios, datos de contactos de los formularios, datos sobre analítica, etcétera.

 

Especial

Aquí tienes algunos materiales especiales sobre seguridad de WordPress y que, en principio, pueden aplicar muchos elementos de forma conjunta.

Limpiar un hackeo

Es posible que te hayan infectado, hackeado, atacado… cualquiera de estas opciones es posible si tu sitio tiene un agujero de seguridad por falta de actualización o por una plantilla o plugin.

 

Hosting

Los servidores de alojamiento web para WordPress permiten algunos elementos específicos de seguridad para WordPress, además de los sistemas de seguridad generales.

 

Seguridad del alojamiento web de WordPress

Cuando hablamos de seguridad, alojamiento web y WordPress, la única conclusión a la que se puede llegar es: tu proveedor de alojamiento web ha de ofrecerte una plataforma segura.

Versiones mínimas para que WordPress funcione

¿Cuáles son las versiones mínimas requeridas para que WordPress funcione correctamente?

Instalar un certificado TLS / SSL en WordPress

Cuando navegamos por Internet queremos hacerlo de forma segura. Para ello deberíamos navegar por sitios de confianza con la barrita verde o el candado.

Compatibilidad de PHP en WordPress

Si WordPress tiene un punto importante es el de PHP, y esto es lo que más se está potenciando últimamente (por no decir casi desde siempre).

Permisos de ficheros en WordPress

Cuando se realiza una instalación nueva de WordPress, un elemento a tener presente es quién es el propietario de los ficheros del sistema y qué permisos tienen para poderse leer o escribir.

Bloquear PHP en uploads en WordPress

En principio, cuando subes ficheros mediante el panel de Multimedia sólo se permiten elementos como imágenes, ficheros de texto y similares, pero no se permiten ficheros PHP (el lenguaje de programación con el que se hace WordPress) entre otros.

Servicio externo de correo

El correo basura (spam), esa lacra de Internet que muchos sufrimos todos los días en nuestra bandeja de entrada, es algo que debemos evitar que ocurra debido a nuestro sitio web.

Desactivar el HTTP TRACE / TRACK

TRACK y TRACE son dos métodos que se usan principalmente para análisis, pero estos métodos, usados en WordPress, pueden comprometer la seguridad del sitio.

.htaccess para Apache y LiteSpeed

Si utilizas Apache HTTPD o LiteSpeed, configura el fichero .htaccess de la raíz de la configuración de tu WordPress de una manera compleja (más de la que viene por defecto).

.conf para nginx

Si utilizas nginx, configura el fichero .conf de la configuración de tu WordPress de una manera compleja (más de la que viene por defecto).

 

Base de Datos

Podemos aplicar algunos pequeños cambios para cambiar configuraciones por defecto de WordPress y complicar posibles accesos a la información.

Limitar el acceso a base de datos de WordPress

Con respecto a la base de datos (MySQL, MariaDB…) hay pocas cosas a hacer propiamente dichas desde el punto de vista de WordPress, pero sí que se pueden poner algunas complicaciones para aquellos que intenten acceder a ella.

Evitar la numeración de usuarios en WordPress

Cuando se crean las tablas de WordPress, todos los sistemas de auto incremento comienzan en la cifra número 1.

Eliminar copias antiguas de entradas en WordPress

Una vez más volvemos a temas que afectan principalmente a rendimiento y, en este caso, es el de ir vaciando la base de datos de copias antiguas de entradas o páginas.

 

WordPress

Aunque WordPress es muy seguro de por sí, existen ciertas posible configuraciones que se pueden aplicar directamente sobre WordPress.

WP-Config: la configuración de WordPress

El fichero de configuración de WordPress [wp-config.php] esconde muchas funcionalidades que ayudan a mejorar la seguridad y rendimiento del sistema. ¿Conoces todas las posibilidades que te ofrece?

Las Security Keys de WordPress

Desde la versión 2.6.0 de WordPress existen unos pequeños algoritmos para encriptar los datos guardados en cookies y que sea más complejo saber quién eres o cómo acceder a tu usuario.

Seguridad en las cookies de WordPress

En una instalación simple de WordPress, definiremos concretamente dónde se almacenarán las galletas (cookies) para que no sean tan fácilmente accesibles.

Eliminar cabeceras y metas de WordPress

Como la mayor parte de gestores de contenidos, WordPress se identifica claramente y ofrece determinados servicios que luego usaremos (o no).

Unificar CSS y JavaScript en WordPress

En general los ficheros de estilo (CSS) y los de scripting (JavaScript) incluyen cierta información como las versiones, ya sea en su nombre, en el interior, en algunos comentarios…

Ocultar la versión de WordPress

La versión de WordPress está bastante disponible, ya que forma parte del código del sitio, por lo que hay que ocultarla de varias formas en varios lugares.

Configurar caché en WordPress

Una vez más, lo que probablemente sea una recomendación general y muy útil, como la de activar las caché de WordPress, se convierte en un elemento que ayuda a aumentar la seguridad de tu sitio.

Cambiar las carpetas por defecto de WordPress

Cuando hablas de WordPress es un clásico hablar del uvedoblepé content [/wp-content/] haciendo referencia a la carpeta por defecto donde se encuentran plantillas, ficheros, etcétera.

Tras la instalación de WordPress

Una vez tengas instalado tu WordPress podrás deshabilitar una serie de direcciones URL a las que ya no necesitas acceder, ni tú ni nadie.

Bloquear la edición de ficheros en WordPress

Las personas, en general, somos curiosas por naturaleza y eso hace que, si desde el panel de administración se puede tocar algo, lo toquemos.

Forzar la URL del sitio WordPress

Uno de los errores más habituales de un usuario administrador en el panel de administración de WordPress es cambiar las direcciones URL que aparecen en la primera pantalla de configuración.

Impedir acceso a servidores externos desde WordPress

WordPress es un gestor de contenidos que permite infinidad de opciones, entre ellas la de leer elementos externos o la descarga de otros elementos, como las plantillas y plugins.

Bloquear XML-RPC en WordPress

Una de las ventajas de WordPress es su flexibilidad a la hora de ser utilizado por aplicaciones de terceros, y para ellos muchas utilizan el estándar XML-RPC que permite la interacción con el número del gestor de contenidos.

Limitar el acceso a wp-admin de WordPress

Aunque podemos cambiar las carpetas por defecto del sistema, no es posible cambiar las de la administración [/wp-admin/].

Actualizaciones automáticas de WordPress

Mantener WordPress al día es la clave para evitar problemas de seguridad. WordPress es un sistema seguro en su núcleo, pero las ampliaciones por plugins o plantillas son lo que pueden provocar problemas.

Seguridad de los usuarios en WordPress

En WordPress los usuarios tienen un peso importante en el sistema. Tanto si tienes el gestor completamente cerrado y sólo accedes tú, como si tienes un centenar de personas trabajando con él, es importante evitar que quien no tenga que acceder, no lo haga.

Limpieza de multimedia en WordPress

Subir imágenes, editarlas, recortarlas y volver a empezar. Sin duda uno de los esfuerzos mayores en muchas versiones de WordPress ha sido la de trabajar en mejoras del sistema de edición de contenidos multimedia, principalmente las imágenes.

Configurar el robots.txt de WordPress

Este fichero de texto lo que hace es decirle a los robots de búsqueda (como GoogleBot, BingBot, YandexBot, Slurp!…) qué deben y qué no deben analizar de tu sitio.

Configurar una plantilla por defecto en WordPress

Aunque normalmente no es algo que suela pasar, es posible que tu plantilla falle por alguna razón (por alguna incompatibilidad, porque se borren algunos ficheros…)

Desactivar los Emoji de WordPress

WordPress integra los Emoji desde hace muchas versiones, convirtiendo los iconos de texto en imagen. Pero este sistema implica algunos problemas de detección de versiones.

Subir ficheros de cualquier tipo a WordPress

Cuando hablamos de subir elementos multimedia a través del panel de administración solemos hacer referencia a imágenes, documentos y ficheros conocidos.

 

Seguridad Activa

A parte de las mejoras que se pueden realizar sobre el propio WordPress, también podemos trabajar en la aplicación de mejoras que aplican elementos de seguridad proactiva.

Instalar un Anti Spam en WordPress

Un ataque habitual en los sitios con WordPress (principalmente en aquellos que están focalizados en escribir entradas tipo blog) es el que se hace de los comentarios mediante ataques por spam.

Analiza tus enlaces de WordPress

En muchas ocasiones los enlaces dejan de funcionar o se re

dirigen a sitios de, digámoslo finamente, dudosa calidad.

Copias de seguridad en WordPress

Si hablamos de seguridad hemos de hablar de copias de seguridad (backups). No tiene sentido poner medidas que ayudan a la seguridad de tu sitio si luego no tienes una copia del mismo que permita restaurar una configuración fallida.

Configurar un Firewall o WAF en WordPress

Podemos activar determinadas herramientas de seguridad activa que intenten evitar lo más en tiempo real posible ataques o cambios.

Verificar el checksum de WordPress

Una de las formas más rápida para verificar si un sitio WordPress ha sido comprometido es el uso de alguna herramienta que valide el código de una forma poco costosa.

Configurar herramientas para webmasters en WordPress

Tener un WordPress es tener un sitio web, y como tal te convierte en webmaster. Esto significa que por Internet te encontrarás muchas herramientas que podrás utilizar para analizar tu sitio web.

WordPress y CDN

A la hora de escalar, cachear, evitar ataques nunca hay una situación ideal, pero sí servicios por Internet que te ayudan a protegerte de una forma más o menos sencilla, como son los CDN.

Configurar licencias en WordPress

Existen servicios de pago que requieren una licencia para funcionar y habitualmente estas licencias se añaden desde el panel de administración.

Cómo auditar tu WordPress

Cuando hablamos de seguridad hay que tener un plan de prevención para poder recuperar los datos, pero también hay que saber qué ha ocurrido para llegar a ese punto.

 

Desarrolladores

Existen algunos elementos desde plugins y themes que permiten ayudar a mejorar la seguridad de los distintos elementos añadidos de WordPress.

Versión mínima de PHP para WordPress

Desde hace unas pocas versiones de WordPress, todos aquellos desarrolladores de plugins pueden indicar la versión mínima de PHP necesaria para que funcione.

Vulnerabilidades

Existen algunos problemas de seguridad con WordPress que, aunque quizá se hayan definido en que no son problemáticos, pueden requerir una pequeña corrección.


Mitigar el CVE-2018-6389 de WordPress

Aunque no suele ser muy normal, de tanto en tanto aparecen vulnerabilidades en WordPress como la CVE-2018-6389.

In WordPress through 4.9.2, unauthenticated attackers can cause a denial of service (resource consumption) by using the large list of registered .js files (from wp-includes/script-loader.php) to construct a series of requests to load every file many times.

Este problema viene de los ficheros [load-scripts.php] y [load-styles.php] que permiten la carga de una serie de scripts y estilos predefinidos. En este caso hablaré del de los scripts aunque el parche a aplicar es para ambos ficheros.

NOTA: Esta entrada está documentada a fecha 2018-02-09.

Problema

Este fichero carga una lista de scripts [wp_scripts] que se encuentran en el fichero [script-loader.php]. Esta lista es de más de 180 posibles valores que daría pie a poder hacer una consulta del estilo a:

/wp-admin/load-scripts.php?c=1&load%5B%5D=eutil,common,wp-a11y,sack,quicktag,colorpicker,editor,wp-fullscreen-stu,wp-ajax-response,wp-api-request,wp-pointer,autosave,heartbeat,wp-auth-check,wp-lists,prototype,scriptaculous-root,scriptaculous-builder,scriptaculous-dragdrop,scriptaculous-effects,scriptaculous-slider,scriptaculous-sound,scriptaculous-controls,scriptaculous,cropper,jquery,jquery-core,jquery-migrate,jquery-ui-core,jquery-effects-core,jquery-effects-blind,jquery-effects-bounce,jquery-effects-clip,jquery-effects-drop,jquery-effects-explode,jquery-effects-fade,jquery-effects-fold,jquery-effects-highlight,jquery-effects-puff,jquery-effects-pulsate,jquery-effects-scale,jquery-effects-shake,jquery-effects-size,jquery-effects-slide,jquery-effects-transfer,jquery-ui-accordion,jquery-ui-autocomplete,jquery-ui-button,jquery-ui-datepicker,jquery-ui-dialog,jquery-ui-draggable,jquery-ui-droppable,jquery-ui-menu,jquery-ui-mouse,jquery-ui-position,jquery-ui-progressbar,jquery-ui-resizable,jquery-ui-selectable,jquery-ui-selectmenu,jquery-ui-slider,jquery-ui-sortable,jquery-ui-spinner,jquery-ui-tabs,jquery-ui-tooltip,jquery-ui-widget,jquery-form,jquery-color,schedule,jquery-query,jquery-serialize-object,jquery-hotkeys,jquery-table-hotkeys,jquery-touch-punch,suggest,imagesloaded,masonry,jquery-masonry,thickbox,jcrop,swfobject,moxiejs,plupload,plupload-handlers,wp-plupload,swfupload,swfupload-all,swfupload-handlers,comment-repl,json2,underscore,backbone,wp-util,wp-sanitize,wp-backbone,revisions,imgareaselect,mediaelement,mediaelement-core,mediaelement-migrat,mediaelement-vimeo,wp-mediaelement,wp-codemirror,csslint,jshint,esprima,jsonlint,htmlhint,htmlhint-kses,code-editor,wp-theme-plugin-editor,wp-playlist,zxcvbn-async,password-strength-meter,user-profile,language-chooser,user-suggest,admin-ba,wplink,wpdialogs,word-coun,media-upload,hoverIntent,customize-base,customize-loader,customize-preview,customize-models,customize-views,customize-controls,customize-selective-refresh,customize-widgets,customize-preview-widgets,customize-nav-menus,customize-preview-nav-menus,wp-custom-header,accordion,shortcode,media-models,wp-embe,media-views,media-editor,media-audiovideo,mce-view,wp-api,admin-tags,admin-comments,xfn,postbox,tags-box,tags-suggest,post,editor-expand,link,comment,admin-gallery,admin-widgets,media-widgets,media-audio-widget,media-image-widget,media-gallery-widget,media-video-widget,text-widgets,custom-html-widgets,theme,inline-edit-post,inline-edit-tax,plugin-install,updates,farbtastic,iris,wp-color-picker,dashboard,list-revision,media-grid,media,image-edit,set-post-thumbnail,nav-menu,custom-header,custom-background,media-gallery,svg-painter&ver=4.9

En principio esta dirección se puede cargar sin problema, excepto que al ser un fichero tan grande tarda unos dos

 

Situación

En estos momentos no hay un parche como tal en el código de WordPress y se plantea si esto es un problema a corregir por el propio sistema o por elementos externos (Firewall, WAF…). Otras propuestas que hay es la de limitar el número de elementos que se pueden cargar a la hora de hacer la llamada al script.

 

Soluciones

Aunque no existe una solución sencilla en este momento, sí que se están planteando algunas posibilidades a varios niveles.

nginx

Una primera solución que se ha dado es la de aplicar esta regla del nginx que limitaría la longitud de los parámetros a 1024 bytes. Hay que tener en cuenta que la longitud máxima es de más de 2600 bytes. Personalmente y teniendo en cuenta que la cantidad de scripts a cargar no debería ser muy elevada (25 scripts podrían tener una longitud de unos 350 bytes), reduciría el límite a 512. En cualquier caso habría que navegar por el sitio para definir en cada caso (y plantilla) qué es necesario.

location ~* ^/wp-admin/load-(scripts|styles).php$ {
if ( $query_string ~* “^.{512,}$” ) {
return 444;
}
}

Apache HTTPD

En el caso particular de Apache HTTPD se plantea otra posible solución, que debe incluir el uso de la cookie de que un usuario ha estado navegando por el sitio web.

RewriteEngine on
RewriteCond %{HTTP_COOKIE} !wordpress_logged_in_
RewriteRule /wp-admin/load-scripts.php – [F]

Carga de los datos (PHP)

Otra posible solución que plantean en un fork de WordPress es cambiar la forma en la que se cargan los datos de este script.

Script bash para Linux

O la de ejecutar este script de Linux en la carpeta principal del WordPress.

Script PHP

De la misma forma que el paso anterior se ejecuta desde la línea de comandos de Linux, esta solución te plantea que subas el fichero a la carpeta raíz, la ejecutes (él hará cambios en los ficheros) y elimines el fichero.

Reglas de ModSecurity

Aunque siempre puedes aplicar una regla como esta a tu firewall.

SecRule REQUEST_URI “@rx (?i:/wp-admin/load-scripts.php?.*?(load%5B%5D|load\[\]|load%5B\]|load\[%5D)=([^&,]*,){20,})” “id:1,msg:’Potential use of CVE-2018-6389′,deny”

 

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.