Cross-Site Scripting (XSS) - Tipos y prevención
Lectura de 2 min aprox.
El cross-site scripting (XSS: Cross-Site Scripting) es una técnica de ataque que inyecta scripts maliciosos en páginas web. El JavaScript implantado por el atacante se ejecuta en el navegador de la víctima, lo que provoca el robo de cookies, el secuestro de sesión, la redirección a páginas de phishing y más. En el OWASP Top 10 de 2024 ocupa una posición destacada como un tipo de ataque de inyección, y es una de las vulnerabilidades más comunes en las aplicaciones web.
Lo que decide el riesgo no es el valor sino el lugar donde se coloca
Que un valor recibido cause un problema no lo decide su apariencia. La misma secuencia de caracteres se trata de forma distinta según si acaba donde se coloca texto, donde se coloca un atributo dentro de una marca, o donde se leen instrucciones: un carácter que no tiene significado en un lugar actúa como separador en otro. Por eso, un esquema que normaliza de manera uniforme en el momento de la recepción siempre se desvía hacia un lado o hacia el otro cuando hay varios destinos. Solo el procesamiento inmediatamente anterior a la escritura del valor conoce el destino, de modo que el lugar donde normalizar puede estar en la salida y no en la entrada. En segundo lugar, el hecho de que la pantalla que recibe un valor y la que lo muestra sean distintas crea un tramo por el que las premisas no viajan. El lado que muestra no conoce los supuestos del lado que recibe y, si fue construido en otro momento y con otro propósito, los acuerdos adoptados en el lado receptor nunca llegan hasta allí. Por lo tanto, haber trabajado en el lado que recibe no significa que el lado que muestra sea seguro. La cantidad de elementos por verificar crece como el número de puntos de recepción multiplicado por el número de puntos de presentación. Y la lectura no ocurre bajo el control de quien almacenó el valor, sino en las manos de quien lo visualiza. La composición de ese entorno es invisible desde el lado que almacena, y tampoco queda allí ningún registro de lo que se leyó. Lo único que queda es el registro de que el valor fue aceptado, por lo que las vías para advertirlo se limitan a revisar después el contenido aceptado o a rastrear desde los resultados observados en el exterior.
El flujo de un ataque XSS
Tipos de XSS
El XSS reflejado es un tipo en el que un script contenido en un parámetro de la URL se refleja directamente en la página. El XSS almacenado es un tipo en el que un script guardado en la base de datos se muestra a otros usuarios; los foros y las secciones de comentarios de las redes sociales suelen ser objetivos, y causa daños más graves. El XSS basado en DOM es un tipo que se origina en el procesamiento de JavaScript del lado del cliente y es difícil de detectar porque no pasa por el servidor.
Escenarios concretos de daño
Un error común es pensar que «el XSS es un ataque menor que solo cambia la apariencia». En realidad, son posibles ataques graves, como usar XSS almacenado para incrustar un script malicioso en la sección de reseñas de productos de un sitio de comercio electrónico y robar las cookies de sesión de todos los usuarios que vean la reseña. Con las cookies robadas, el atacante puede comprar productos con la cuenta de la víctima o cambiar su información registrada. También se han observado técnicas que lo combinan con el phishing para mostrar un formulario de inicio de sesión falso en un sitio legítimo.
Medidas como usuario
Lo básico es mantener el navegador actualizado y no hacer clic en enlaces sospechosos. Al usar una contraseña aleatoria única para cada servicio, puedes evitar que el daño se extienda a otros servicios aunque una sesión sea secuestrada mediante un ataque XSS. Restringir la ejecución de JavaScript con una extensión del navegador también es una medida eficaz.
¿Te resultó útil este artículo?