¿Qué es el cross-site scripting (XSS)?

El Cross-site Scripting (XSS) es un tipo de vulnerabilidad de seguridad que se encuentra en algunos sitios y aplicaciones web que aceptan entradas del usuario.
Se produce cuando se inyectan scripts maliciosos en páginas web en forma de script del lado del navegador, para enviarlos a usuarios desprevenidos.
Se produce cuando la aplicación web acepta la entrada del usuario sin validarla ni codificarla.
Desgraciadamente, el navegador del usuario final no podrá reconocer que el script ha sido manipulado y asumirá que procede de una fuente de confianza.

cross-site scripting (xss)

Impacto del riesgo de XSS

Las consecuencias del XSS son bastante impactantes, lo que lo convierte en una vulnerabilidad de seguridad muy grave.
Algunos de los riesgos asociados al XSS son:

  • Cuentas de usuario secuestradas
  • Credenciales comprometidas
  • Robo de información sensible
  • Acceso a ordenadores cliente
  • Contenido de la página HTML que se está reescribiendo
  • Cualquier cookie y testigo de sesión al que se acceda

Diferentes tipos de XSS

Existen tres categorías diferentes de vulnerabilidades XSS:

XSS Reflejado (No Persistente o Tipo I)

El XSS reflejado se produce cuando un script malicioso se refleja desde una aplicación web al navegador del objetivo.
En este caso, el script se activa a través de un enlace que envía una solicitud a un sitio web con la vulnerabilidad de seguridad que permite la ejecución de scripts maliciosos.
Aunque el XSS Reflejado es más común que los otros tipos, no es tan peligroso como el XSS Almacenado porque los scripts maliciosos no se almacenan permanentemente en la base de datos o en el servidor.

XSS almacenado (Persistente o Tipo II)

El XSS almacenado es el tipo más dañino de XSS y se produce cuando se inyecta código malicioso directamente en una aplicación web.
En este caso, la aplicación almacena permanentemente la entrada inyectada y cuando la persona objetivo visita una página web con esta entrada maliciosa almacenada, su navegador ejecuta el código como parte de su respuesta.

XSS basado en DOM (Tipo-0)

El XSS basado en el DOM (Modelo de Objetos del Documento) se produce cuando la vulnerabilidad de seguridad existe en el código del lado del cliente en lugar de en el código del lado del servidor.
Tiene lugar en el DOM de un sitio web en lugar de en el HTML
devuelto por el servidor.
As a result, the client side code will run in an “unexpected” manner, executing pages differently due to the malicious changes in the DOM environment.

Cómo es posible el XSS en WordPress

Un ataque XSS es posible en WordPress cuando el sitio web tiene una vulnerabilidad de cross-site scripting, como no validar o comprobar la entrada externa.
Lo más frecuente es que las vulnerabilidades no se encuentren en el núcleo de WordPress -que se descubren y corrigen con bastante rapidez-, sino en componentes de terceros, como plugins y temas.
Los atacantes utilizan entonces estas vulnerabilidades encontradas en sitios web WordPress para implementar ataques XSS.

¿Cómo prevenir los ataques XSS?

Hay un par de formas de proteger los sitios web de las vulnerabilidades que podrían provocar un ataque XSS:

  • En el núcleo de WordPress, los plugins y los temas, todas las entradas se desinfectan estrictamente a medida que se reciben.
  • En el núcleo de WordPress, los plugins y los temas, escapan de todos los datos en la salida para evitar que se clasifiquen como contenido activo aplicando combinaciones de codificación HTML, JavaScript y CSS.
  • A través del propietario del sitio, desarrollador, ingeniero devops o mediante una solución de terceros como WordFence o Sucuri, utiliza una Política de Seguridad de Contenidos (CSP), un mecanismo de seguridad del navegador que puede reducir la gravedad de los ataques XSS y de otro tipo limitando los recursos que puede cargar una página.
  • Asegúrate de que el núcleo, los plugins y los temas de WordPress están actualizados y no contienen vulnerabilidades: utiliza soluciones de terceros y funciones de seguridad del alojamiento (alertas y desactivación de componentes vulnerables).