MDT Seguridad
Ataques web

Qué es XSS (cross-site scripting) y cómo prevenirlo

El XSS es una de las fallas más comunes en sitios web: permite que un atacante haga ejecutar su propio código en el navegador de los visitantes, como si fuera parte de su sitio. Con eso puede robar sesiones, mostrar formularios falsos o redirigir a otra página. En WordPress aparece una y otra vez en plugins vulnerables. Le explicamos qué es, los tipos que existen, cómo funciona un ataque y cómo prevenirlo.

¿Prefiere que lo revisemos nosotros? Diagnóstico gratis, sin claves.




    Qué es XSS

    XSS son las siglas de cross-site scripting, «secuencias de comandos en sitios cruzados». Se usa una X en lugar de una C para no confundirlo con CSS, las hojas de estilo.

    La falla aparece cuando un sitio toma datos que manda el usuario (lo que escribe en un formulario, un parámetro de la dirección, un comentario) y los muestra en la página sin limpiarlos. Si esos datos contienen código JavaScript, el navegador del visitante lo ejecuta como si viniera del sitio.

    Para el navegador no hay diferencia entre el código legítimo de su sitio y el que inyectó el atacante: los dos corren con los mismos permisos. Por eso el XSS forma parte de la categoría «Inyección» del OWASP Top 10.

    Qué puede hacer un atacante con XSS

    • Robar sesiones

      Si las cookies de sesión no están protegidas, el script las copia y el atacante entra como el usuario, incluso como administrador.

    • Mostrar formularios falsos

      Un cuadro de «su sesión expiró, vuelva a ingresar su clave» dentro de su propio sitio.

    • Redirigir a otro sitio

      A páginas de phishing, estafas o malware.

    • Hacer acciones en nombre del usuario

      Si la víctima es un administrador de WordPress, el script puede crear un usuario nuevo o instalar un plugin.

    • Robar datos del checkout

      En una tienda, capturar lo que el cliente escribe en el formulario de pago.

      Seguridad en WooCommerce
    Diagnóstico gratis

    ¿Quiere saber qué tiene abierto su sitio?

    Lo revisamos desde afuera, sin claves y sin instalar nada. Si no encontramos nada relevante, se lo decimos igual.

    Revisar mi sitio gratis

    Los tres tipos de XSS

    Tipo Dónde queda el código Cómo llega a la víctima Riesgo
    Reflejado En la dirección o en un formulario; no se guarda La víctima hace clic en un enlace preparado Medio: requiere engañar a cada víctima
    Almacenado Se guarda en la base de datos (un comentario, un perfil, un pedido) Cualquiera que vea esa página Alto: afecta a todos los visitantes, incluidos los administradores
    Basado en DOM El código JavaScript del propio sitio lo inserta en la página Un enlace preparado; el servidor ni se entera Medio a alto, y más difícil de detectar

    Cómo funciona un ataque XSS, paso a paso

    1. 01

      El atacante encuentra un campo que no se limpia

      Un buscador, un formulario de contacto, un campo de un plugin o un parámetro de la dirección que se muestra tal cual en la página.

    2. 02

      Prueba con un script inofensivo

      Escribe en el campo un fragmento de código que muestra una alerta. Si la alerta aparece, la falla existe.

    3. 03

      Arma el ataque real

      Reemplaza la alerta por un script que manda las cookies a su servidor, muestra un formulario falso o redirige a otra página.

    4. 04

      Lo hace llegar a la víctima

      En el XSS reflejado, manda el enlace por correo o mensaje. En el almacenado, lo deja guardado (por ejemplo, en un comentario o en el nombre de un pedido) y espera que un administrador abra esa pantalla.

    5. 05

      El navegador de la víctima ejecuta el código

      Con los mismos permisos que su sitio. Si la víctima es un administrador, el atacante puede tomar el control del sitio.

    XSS en WordPress

    En WordPress, el XSS rara vez está en el núcleo: aparece en plugins y temas, sobre todo en formularios, buscadores, campos personalizados y paneles de administración. Es una de las fallas más publicadas en el ecosistema, y muchas se explotan en masa poco después de hacerse públicas.

    • XSS almacenado en plugins de formularios o comentarios

      El atacante deja el código en un campo que después un administrador ve en el panel.

    • XSS reflejado en parámetros de búsqueda o filtros

      Más fácil de encontrar con escáneres automáticos.

    • Fallas que requieren estar registrado

      En sitios con registro abierto (tiendas, membresías), cualquier cliente puede ser el atacante.

    La defensa principal en WordPress no es programar: es mantener los plugins actualizados y no instalar más de los necesarios. → Actualizar WordPress sin romper el sitio

    Cómo prevenir el XSS

    1. 01

      Escapar todo lo que se muestra

      Convertir los caracteres especiales (<, >, ", ') en texto inofensivo antes de mostrarlos, según el contexto: HTML, atributos, JavaScript o direcciones. En WordPress existen funciones para cada caso, como esc_html(), esc_attr() y esc_url().

    2. 02

      Validar y limpiar lo que entra

      Aceptar solo el formato esperado (un número, un correo, una fecha) y limpiar el resto, por ejemplo con sanitize_text_field() en WordPress.

    3. 03

      Usar una política de seguridad de contenidos (CSP)

      Un encabezado que le dice al navegador desde qué dominios puede cargar scripts. Aunque alguien inyecte código, el navegador no lo ejecuta. Es la defensa más potente y la más delicada de configurar.

    4. 04

      Proteger las cookies de sesión

      Con el atributo HttpOnly, las cookies no son accesibles desde JavaScript, y un XSS no puede robarlas.

    5. 05

      Poner un firewall delante

      Un WAF bloquea los intentos de XSS conocidos y gana tiempo mientras se corrige la falla. → Qué es un WAF

    6. 06

      Probar

      Los escáneres encuentran muchos XSS reflejados; los almacenados y los basados en DOM suelen requerir pruebas manuales. → Pentest web

    Cómo saber si su sitio tiene un XSS

    • Revise si sus plugins tienen fallas publicadas

      Muchas de las vulnerabilidades de plugins son XSS.

      Análisis de vulnerabilidades
    • Mire el código de las páginas

      En busca de scripts que no reconoce, sobre todo en comentarios, perfiles o pedidos.

    • Para aplicaciones propias, un pentest

      Con pruebas manuales en cada campo.

    Si ya encontró scripts inyectados en su sitio, el problema es más grande que un XSS: puede haber una infección. → Limpieza de sitio hackeado

    Preguntas

    Preguntas frecuentes

    ¿Qué es XSS en palabras simples?

    Una falla que permite a un atacante hacer ejecutar su propio código en el navegador de los visitantes de un sitio, como si fuera parte del sitio.

    ¿Qué significa XSS?

    Cross-site scripting, secuencias de comandos en sitios cruzados. Se usa la X para no confundirlo con CSS.

    ¿Cuál es el tipo de XSS más peligroso?

    El almacenado, porque queda guardado en el sitio y afecta a todos los que ven la página, incluidos los administradores.

    ¿El XSS puede afectar a WordPress?

    Sí, sobre todo a través de plugins y temas. La defensa principal es mantenerlos actualizados y usar pocos.

    ¿Cómo se previene el XSS?

    Escapando todo lo que se muestra, validando lo que entra, protegiendo las cookies con HttpOnly y usando una política de seguridad de contenidos.

    ¿Sus plugins tienen fallas publicadas?

    Lo revisamos desde afuera, sin claves, y le decimos cuáles conviene actualizar primero.