XSS

XSS (Cross-site scripting )
Información sobre la plantilla
XSS.jpg
Concepto:Es un tipo de inseguridad informática o agujero de seguridad basado en la explotación de vulnerabilidades del sistema de validación de HTML incrustado.

XSS. Del inglés Cross-site scripting (Cruzar Código al Sitio) es un tipo de inseguridad informática o agujero de seguridad basado en la explotación de vulnerabilidades del sistema de validación de HTML incrustado. A grandes rasgos, el XSS consiste en inyectar código (el mas común: Javascript) que produzca un cambio en la página y nos permita aprovechar la confianza que tienen los usuarios a dicho sitio. El XSS nos permite defacear una página.

Características

Las vulnerabilidades de XSS originalmente abarcaban cualquier ataque que permitiera ejecutar código de "scripting", como VBScript o JavaScript, en el contexto de otro sitio web (y recientemente esto se podría clasificar más correctamente como "distintos orígenes"). Estos errores se pueden encontrar en cualquier aplicación que tenga como objetivo final, el presentar la información en un navegador we]. No se limita a sitios web, ya que puede haber aplicaciones locales vulnerables a XSS, o incluso el navegador en sí. El problema está en que usualmente no se validan correctamente los datos de entrada que son usados en cierta aplicación.

Esta vulnerabilidad puede estar presente de forma directa (también llamada persistente) o indirecta (también llamada reflejada). Se usa la X en lugar de la C para que no se confunda esta sigla con la de CSS (Hojas de Estilo en Cascada), que no es una falla sino más bien una tecnología para maquetado de páginas.

Tipos de XSS

Persistente:

  • Este tipo de XSS comúnmente filtrado, y consiste en embeber código HTML peligroso en sitios que lo permitan; incluyendo así etiquetas como <script> o <iframe>. Se produce generalmente en sectores donde podemos comentar, de modo que el código que inyectemos quedará almacenado en el servidor y se ejecutará cada vez que abramos la página.

No Persistente:

  • Este tipo de XSS consiste en modificar valores que la aplicación web utiliza para pasar variables entre dos páginas, sin usar sesiones y sucede cuando hay un mensaje o una ruta en la URL del navegador, en una cookie, o cualquier otra cabecera HTTP (en algunos navegadores y aplicaciones web, esto podría extenderse al DOM del navegador). También conocido como reflejado, consiste en inyectar código pasándolo mediante la URL, no se almacena en el servidor, solo es explotable el XSS mediante la URL.

Como evitar el XSS

El XSS se produce cuando no filtramos los datos pasados que luego se colocan en el documento HTML que conforma nuestra página. Generalmente con filtrar los símbolos < y > ya lo evitamos, sin embargo, todo depende del contexto. En algunas ocasiones también tenemos que filtrar la comilla doble y la simple ya que el dato ingresado se coloca como dirección para un vínculo. El término Bypass es usado para designar un método para saltear el filtro y permitir la ejecución del código que inyectamos. Este método puede ser una secuencia de caracteres especialmente formada, el aprovechamiento de alguna falla del sistema de codificación usado por el navegador, etc.

Esta falla es a mi parecer una de las más fáciles de explotar, solo es cuestión de buscar un hueco en la página donde no se filtren los datos y luego depende de nuestra creatividad los usos que podemos llegar a darle.

AJAX

Usar AJAX para ataques de XSS no es tan conocido, pero peligroso. Se basa en usar cualquier tipo de vulnerabilidad de XSS para introducir un objeto XMLHttp y usarlo para enviar contenido POST, GET, sin conocimiento del usuario.

Este se ha popularizado con gusanos de XSS que se encargan de replicarse por medio de vulnerabilidades de XSS persistentes (aunque la posibilidad de usar XSS reflejados es posible). El siguiente script de ejemplo obtiene el valor de las cabeceras de autenticación de un sistema basado en Autenticación Básica (Basic Auth). Sólo falta decodificarlo, pero es más fácil mandarlo codificado al registro de contraseñas. La codificación es base64.

Referencias