¿Qué es una Vulnerabilidad XSS?

Share this…

Pregunta: ¿Qué es una vulnerabilidad XSS? ¿Debo preocuparme por una vulnerabilidad XSS?

XSS (abreviatura de Cross Site Scripting) es una vulnerabilidad generalizada que afecta a muchas aplicaciones web. El peligro detrás del XSS es que permite a un atacante inyectar contenido en un sitio web y modificar la forma en que ese contenido se muestra, lo que obliga al navegador de la víctima ejecutar el código suministrado por el atacante durante la carga de la página.

En general, las vulnerabilidades XSS requieren algún tipo de interacción por parte del usuario, sea a través de ingeniería social o esperando a alguien visitar una página específica para desencadenar la vulnerabilidad. Es por ello que, a menudo, esta vulnerabilidad no se toma tan en serio por los desarrolladores, pero si no se corrige pronto, puede ser muy peligrosa.

Imagínese que usted está en su panel de wp-admin de WordPress y acaba de añadir un post. Si está usando un plugin con una vulnerabilidad XSS almacenado (explicaremos más adelante) él será explorado y mientras que esté en el panel wp-admin, puede forzar al navegador para crear un nuevo usuario administrador, o editar un mensaje y realizar otra acciones similares.

Una vulnerabilidad XSS le da al atacante control casi completo del software más importante que tenemos en nuestros ordenadores actuales: nuestros navegadores.

La Inyección de Vulnerabilidad XSS

Cualquier sitio web o aplicación tiene varias entradas. Se extienden desde los campos de formulario hasta la propia URL, que se converterá en datos a se manejar por el código. Un ejemplo sencillo de los datos son los formularios con nombre, nombre del usuario, contraseña, o cualquier otra forma de entrada:

Screen Shot 2016-04-19 at 10.37.44 PM

Nuestro nombre se almacenará en la base de datos del sitio web para su uso posterior, para las acciones de la personalización de nuestra experiencia en el sitio web. Por ejemplo, cuando se inicia una sesión en su sitio web favorito y él le da la bienvenida con su nombre: “Bienvenido, Pablo”.

Cada uno de estos puntos de datos son considerados como entradas y pueden ser manipulados si el código no valida las entradas y salidas de desinfección adecuadamente. Cuando una entrada fue especialmente diseñada para contener una secuencia particular de caracteres para que el servidor o el navegador responda de una forma deseada, esto se llama inyección.

Este tipo de inyección es conocido como Cross-Site Scripting (XSS): una manera de inyectar código que ejecutará acciones en el navegador por un sitio web. Esta acción puede ser abrasiva y notificar al usuario, o puede funcionar en segundo plano sin el conocimiento del usuario.

xss-example-flow-diagram1

Tal vez la prueba del concepto (Proof of Concept – POC) más rudimentaria que se puede ver puede incluir el uso de una marca de script muy básica que genera un pop-up notificando de un fallo en la página. Esta secuencia de comandos es la siguiente:

<script>alert(THIS IS AN XSS VULNERABILITY!!)</script>

A través de este ejemplo, se utiliza un par de etiquetas HTML que definen un bloque de Javascript. Dentro de esto, la llamada a la función que hace que la caja aparezca tiene la siguiente frase: THIS IS AN XSS VULNERABILITY!!!

Cuando esta entrada es aceptada por la aplicación y se hace eco de vuelta al usuario, ella se evalúa por el navegador del usuario y se ejecuta como si fuera del código de la página web. Entonces, se convierte en parte de la página web, lo que permite al atacante ejecutar una serie de actos nefastos.

Tipos de XSS

Ni todas las vulnerabilidades XSS son las mismas, hay varios tipos y aquí le mostramos una visión general de alto nivel de cada uno de ellos, incluyendo sus modos de entrega, para proporcionar un contexto:

Sucuri-Blog-XSS Types

Referencia: Tipos de XSS OWASP

Causado por código en el lado del servidor (Java, PHP, .NET, etc.):

Los ataques XSS tradicionales:

1. Reflejado (No Persistente) – se produce cuando el payload ecoa de nuevo al usuario mediante la apertura de un link a un sitio web vulnerable con una entrada cambiada.

2. Almacenado (Persistente) – se produce cuando el payload se almacena en el servidor y se recupera cada vez que un usuario solicita una página web.

Causado por código en el lado del cliente (Javascript, Visual Basic, Flash, etc.):

También conocido como XSS DOM-based:

3.Reflejado (No Persistente)- el mismo que se produce en el lado del servidor, pero esta vez, el payload es posible debido al procesamiento del código por el navegador.

4. Almacenado (Persistente) – el mismo que se produce en el lado del servidor, pero esta vez, el payload es almacenado en la máquina del cliente, usando el almacenamiento del navegador.

Causado por la infraestructura (navegador, plugins, servidores, etc.):

Muy raro , pero es el tipo más peligroso de XSS:

5. Infraestructura en el lado del cliente – se produce cuando la carga útil tiene alguna relación con la parte interna del navegador, como un filtro XSS u otra funcionalidad del núcleo;

6. Infraestructura en el lado del servidor – se produce cuando el servidor web es responsable de no hacer frente a las peticiones, lo que permite la modificación de los organismos de respuesta;

7. Red – se produce cuando no se puede interferir en la comunicación entre el cliente y el servidor e inyectar paquete (s) de red con payload.

Causado por el usuario:

Ocurre a menudo en scams.

8. Auto-XSS – se produce cuando el usuario es responsable de la inyección del payload en el navegador para conseguir acceso par sí mismo , generalmente a través de la ingeniería social.

¿Cuáles son los peligros del XSS?

¿Cómo puedo proteger mi sitio web del XSS? ¿Debería preocuparme por todas estas vulnerabilidades relacionadas con XSS? ¿Cómo puedo probar mi código? ¿Cómo se puede entender lo que esto significa en realidad? Hay tecnologías como el Firewall de Sucuri, desarrollado para ayudar a mitigar estos ataques. Allá es donde paso mi tiempo, investigando. Sin embargo, como desarrollador, usted busca ideas sobre cómo identificar y corregir estas deficiencias.

Fuente:https://blog.sucuri.net/