• La vulnerabilidad XSS que ha afectado a WordPress

    La vulnerabilidad XSS que ha afectado a WordPress

    Múltiples plugins de WordPress son ahora vulnerables a Cross-site Scripting (XSS) debido al mal uso de las funciones add_query_arg() y remove_query_arg().

    ¿Porqué ha sucedido?

    Este problema fue identificado por primera vez por Joost de Valk, de Yoast, en uno de sus plugins. Por ello, os resumimos lo que nos cuentan en el blog de Sucuri respecto a la vulnerabilidad XSS.

    La documentación oficial de WordPress (Codex) no era muy clara explicando el funcionamiento de las funciones add_query_arg() y remove_query_arg(), lo que llevó a muchos desarrolladores a usarlas mal, provocando que se usaran de forma insegura. Se asumió que estas funciones escapaban las cadenas automáticamente, cuando no es así. Este simple hecho hizo que muchos de los plugins del respositorio, incluso los más populares, fuesen vulnerables a XSS.

    Hasta la fecha, esta es la lista de plugins afectados (o al menos los más relevantes):

    • Jetpack
    • WordPress SEO
    • Google Analytics por Yoast
    • All In one SEO
    • Gravity Forms
    • Multiple Plugins from Easy Digital Downloads
    • UpdraftPlus
    • WP-E-Commerce
    • WPTouch
    • Download Monitor
    • Related Post for WordPress
    • My calendar
    • P3 Profiler
    • Give
    • Multiple products including Builder and Exchange
    • Broken-Link-Checker
    • Ninja Forms

    ¿Cómo corregirla?

    Es importante actualizar todos los plugins de tus instalaciones de WordPress. Pero ten en cuenta que en este listado no aparecen todos los plugins potencialmente vulnerables, no se han analizado TODOS, tan solo los más conocidos (unos 300 o 400; cifra muy lejana al número total de plugins existentes en WordPress).

    Así que, probablemente, exista un número mayor de plugins vulnerables. Si eres un desarrollador, comprueba tu código para ver cómo utilizas estas dos funciones:
    add_query_arg
    remove_query_arg

    Debes asegurarte de que escapas los datos antes de su uso. Se recomienda utilizar las funciones esc_url() o esc_url_raw(). No asumas que add_query_arg y remove_query_arg lo hace por defecto. El equipo de WordPress ha proporcionado más directrices sobre cómo usar estas funciones aquí.

    ¿Qué medidas tomar a partir de ahora?

    Este es también un buen momento para recordar a todos los desarrolladores que SIEMPRE existirán los errores en el código, y algunos de esos errores conducirá, inevitablemente, a las vulnerabilidades de seguridad. Esto se aplica a los plugins, los temas, los servidores web, los CMS y los framework, y básicamente cualquier código escrito por personas.

    Por ello hay que estar preparados y encontrar formas de minimizar el efecto de cualquier vulnerabilidad en su entorno. Estos son algunos consejos y trucos a tener en cuenta para ayudar a reducir el riesgo:

    1. Parches. Mantén tus páginas web actualizadas.
    2. Seguridad. Ten un control de acceso restrictivo. Es recomendable restringir el directorio wp-admin a direcciones IP de una lista blanca. O por ejemplo, solo dar acceso de ‘administrador’ a usuarios que realmente lo necesiten. Además, es recomendable no entrar al back-end como ‘administrador’ a menos que vayas a realizar un trabajo de administración.
    3. Monitorizar. Controla los registros. Podrán ofrecerte pistas sobre lo que está sucediendo en tu página web.
    4. Reducir. Utiliza sólo los plugins (o temas) que vas a necesitar para que tu página web funcione correctamente.
    5. Prevención. Utiliza las medidas de seguridad pertinentes, algunos plugin como ‘iThemes Security‘ o ‘WordFence Security‘ pueden ayudarte.
    6. Detectar. La prevención puede fallar, por lo que es recomendable analizar tu página web respecto a los indicadores de vulnerabilidad o software obsoleto. El plugin ‘Sucuri Security‘ y la herramienta gratuita ‘Sitecheck‘ de Sucuri pueden ayudarte.
    7. Defensa en profundidad. Si haces uso de un sistema de prevención de instrucciones (IPS) o Web Application Firewall (WAF) te podrán ayudar a bloquear las vulnerabilidades más comunes.

    ¿Se te ocurre alguna recomendación más?