Explorá

Paso a paso / 8 min de lectura

Ataques CSRF en WordPress: ¿qué son y cómo prevenirlos?

hooded man hacking a computer

Los ataques de CSRF (cross-site request forgery) en WordPress son una de las vulnerabilidades de seguridad más comunes que deben tener en cuenta los desarrolladores de plugins, temas y sitios web. Un hacker dedicado puede apoderarse de cuentas de administrador (y, por extensión, de tu sitio web), hacer que los usuarios revelen información personal o eliminen sus cuentas, e incluso robarles dinero con un ataque de CSRF bien ejecutado.

Este artículo explora los ataques de CSRF, cómo funcionan y qué podés hacer para prevenirlos.

¿Qué es un cross-site request forgery (CSRF)?

hombre misterioso con capucha hackeando con una computadora

El cross-site request forgery (CSRF, pronunciado “sea-surf”) es, en términos sencillos, cuando los hackers engañan a los usuarios para que realicen una acción no deseada y maliciosa mientras están conectados a un sitio confiable. Es decir, explotan mecanismos de membresía, suscripción, formularios e inicios de sesión para aprovechar la confianza del usuario y lograr que revelen sus credenciales de autenticación, entreguen dinero de sus cuentas bancarias y potencialmente realicen muchas otras acciones dañinas para el usuario y el sitio web en el que confían.

Junto con el cross-site scripting (XSS), los ataques de inyección SQL y los bypass, los ataques de CSRF se encuentran entre las amenazas más comunes y persistentes para los sitios de WordPress y la Internet.

¿Cómo ocurren los ataques de CSRF en los sitios de WordPress?

El funcionamiento interno del CSRF requiere una explicación, ya que puede ser difícil de entender al principio. Para comprenderlo, imaginate un ejemplo en el que un hacker engaña a un usuario para que elimine su cuenta en un foro web.

Un sitio web no seguro

El foro vulnerableforum.com es un foro común donde los usuarios pueden discutir varios temas. Es un sitio muy básico y no muy seguro que permite a los usuarios iniciar y cerrar sesión, cambiar sus contraseñas, realizar algunos cambios en sus perfiles y eliminar sus cuentas.

Si querés eliminar tu cuenta, el foro te lleva a la página vulnerableforum.com/delete_my_account. En esta página, tenés que confirmar tu elección haciendo clic en un botón que dice: “Sí, quiero eliminar mi cuenta.” Al presionarlo, eliminás permanentemente tu cuenta.

Un hacker puede engañarte para que presiones este botón sin siquiera estar en la página empleando CSRF. Así es como lo hacen.

Engañarte para eliminar tu cuenta

Un usuario está navegando por vulnerableforum.com. Está conectado y encuentra un hilo del foro con un enlace a koalas.com donde puede ver fotos de lindos koalas. Naturalmente, el usuario hace clic en el enlace pensando que lo llevará a un sitio con muchas imágenes de lindos koalas. En realidad, el usuario está haciendo dos cosas:

  • Visitando un sitio web con imágenes de koalas.
  • Sin querer, elimina su propia cuenta en vulnerableforum.com.

¿Cómo logró esto el hacker? Lo que hizo fue lograr que presionaras sigilosamente “Sí, quiero eliminar mi cuenta” ocultando una solicitud HTTP POST específica al servidor que aloja vulnerableforum.com. Más específicamente, una solicitud POST para /delete_my_account.

Y como esto sucedió en el contexto de un usuario autenticado, el servidor asume que el usuario realmente quiere eliminar su cuenta y procede con la solicitud.

Explotando cookies

Las cookies web son pequeños archivos de texto que los servidores web crean cuando te conectás a ellos, como al visitar vulnerableforum.com. Las cookies identifican tu dispositivo con información como contraseñas, nombres de usuario, información de inicio de sesión (para que no tengas que ingresar cada vez), tu carrito de compras, etc.

Los usuarios y los servidores web intercambian automáticamente cookies cada vez que el usuario hace una solicitud HTTP y el servidor envía una respuesta. Este intercambio ocurre independientemente de tu dominio web actual. Los hackers pueden ocultar una solicitud de “eliminar mi cuenta” al servidor de vulnerableforum.com en un enlace inocente hacia un sitio no relacionado como koalas.com.

Si los servidores web no verifican de dónde provienen las solicitudes, cualquiera de cualquier dominio puede lograr que los usuarios realicen cualquier acción en un servidor. Y como ese usuario envió sus cookies únicas junto con la solicitud, el servidor asumirá que es una solicitud legítima en lugar de una maliciosa.

Así como el hacker en este ejemplo logró que un usuario eliminara su cuenta, también podría hacer que cambiara sus contraseñas para que solo el hacker las conociera, transfiriera dinero de su cuenta bancaria y más.

¿Qué significa “CSRF”?

Ahora que sabemos cómo funcionan los ataques CSRF, podemos entender de dónde proviene el nombre.

  • La parte de “cross-site” proviene del hecho de que múltiples dominios están intercambiando información. En este ejemplo, eran koalas.com y vulnerableforum.com.
  • La parte de “request” viene de que el usuario está haciendo una solicitud al servidor web. En este ejemplo, el hacker engañó al usuario para que solicitara al servidor de vulnerableforum.com que eliminara su cuenta.
  • Finalmente, la parte de “forgery” viene del hecho de que el hacker falsificó o fabricó una solicitud fraudulenta para perjudicar a un usuario, un sitio web o ambos. En este ejemplo, el hacker falsificó una solicitud POST para vulnerableforum.com, la cual fue aceptada por el servidor porque no verificó el origen (koalas.com).

¿Por qué los sitios de WordPress sufren vulnerabilidades de CSRF?

cerca de la página de plugins del panel de wordpress

La razón más común por la que los sitios de WordPress sufren ataques de CSRF (y violaciones de seguridad en general) es por plugins vulnerables. A veces, los plugins están codificados de manera que permiten que estas tácticas pasen desapercibidas debido a descuidos de los desarrolladores o tácticas avanzadas de hackers.

Los desarrolladores de plugins pueden tomar dos medidas de seguridad muy efectivas y ampliamente aceptadas para minimizar los ataques de CSRF: tokens anti-CSRF y nonces.

  • Tokens anti-CSRF. Son secuencias de caracteres generadas aleatoriamente por el servidor y asignadas a cada sesión de usuario. El servidor solo acepta solicitudes de usuarios si el token es correcto y está presente junto con las cookies. Como los hackers no pueden acceder a él, todas sus solicitudes falsificadas serán rechazadas.
  • Tokens de un solo uso. Los tokens de un solo uso, claves de un solo uso o “nonces” son similares a los tokens anti-CSRF pero tienen un límite de tiempo. A menudo, son válidos por no más de unos minutos. Las nonces se crean dinámicamente cuando los usuarios completan formularios (como al iniciar sesión), y los hackers tampoco tienen acceso a ellas.

¿Cómo prevenir o detener ataques de CSRF en WordPress?

Desde el punto de vista de un propietario de un sitio web, esto es lo que podés hacer para protegerte a vos y a tus usuarios de los ataques de CSRF.

Protegé formularios personalizados con nonces

Los formularios web o HTML son elementos web donde los usuarios pueden ingresar datos que el servidor procesa. Permiten a los usuarios ingresar credenciales de autenticación, suscribirse a boletines, hacer compras en línea y más.

Los formularios sin protección CSRF son vulnerables y representan un vector muy común para que los hackers los exploten. Al implementar formularios personalizados, se recomienda agregar un nonce y verificarlo cada vez que se procese una solicitud POST. El siguiente código agrega un nonce a tu formulario:

<form id="test-form" method="POST">
    <input name="form_nonce" type="hidden" value="<?php echo wp_create_nonce('test-nonce')?>" />

Y este verifica el nonce en cada solicitud POST:

if (isset($_POST['form_nonce']) && wp_verify_nonce($_POST['form_nonce'],'test-nonce') && isset($_POST['new_email']) && is_user_logged_in()) {

Con estos dos fragmentos de código, has protegido tu sitio web de la mayoría de las formas de CSRF.

Eliminar plugins y temas no utilizados

Considerando que los plugins son la fuente más común de vulnerabilidades de CSRF, tener más software de terceros interactuando con tu sitio abre más caminos para que los hackers te ataquen. Esa es una realidad inevitable de poseer un sitio web, sea WordPress u otro.

Eliminá cualquier plugin y tema que no estés utilizando actualmente para minimizar los puntos de entrada. Los temas no suelen ser la fuente de vulnerabilidades, pero pueden serlo, y lo mejor es evitar aquellos que no estés usando.

Cerrar sesión automáticamente a los usuarios

Los ataques CSRF solo pueden funcionar cuando el usuario está conectado. Al cerrar sesión automáticamente a los usuarios que han estado inactivos durante un cierto período, podés negar el acceso a sus cuentas a los hackers con fines de CSRF.

Esta es una de las razones por las que los bancos en línea y otros sitios web que manejan información muy sensible cierran sesión a los usuarios de manera agresiva, a veces solamente después de un par de minutos de inactividad. Aunque no es una solución definitiva, es otro obstáculo para los hackers.

Mantenete a salvo de ataques de CSRF en WordPress

Los ataques de CSRF son una amenaza de seguridad en Internet muy antigua que aún causa problemas a los sitios modernos. Dada su popularidad, WordPress es a menudo el objetivo de hackers que intentan robar credenciales y dinero o simplemente causar problemas con ataques CSRF.

Afortunadamente, existen medidas de seguridad que podés tomar para minimizar las posibilidades de que los hackers manipulen a tus usuarios para que tomen acciones no deseadas. Con la información que te hemos proporcionado, estás en una mejor posición para protegerte a vos mismo y a tus usuarios de este tipo de ataques.

Si encontraste útil este artículo, considerá leer nuestro blog para más guías de WordPress, consejos e ideas.