7
By Annika Pringles XSS en Aplicaciones Web con Ajax

HackingMexico Xss en aplicaciones web con ajax

Embed Size (px)

Citation preview

Page 1: HackingMexico Xss en aplicaciones web con ajax

By Annika Pringles

XSS en Aplicaciones Web con Ajax

Page 2: HackingMexico Xss en aplicaciones web con ajax

JSON: Un formato ligero de intercambio de datos basado en nombre/valor:

{"parameter":"value","next_parameter":"next_value"}

Usando Ajax, podemos transmitir datos JSON mientras la página Web se esté cargando.

JSON (JavaScript Object Notation)

Ajax

Page 3: HackingMexico Xss en aplicaciones web con ajax

Y como Ajax utiliza HTTP podemos accesar a los datos JSON directamente en el explorador modificando la URL

En la API de Twitter podemos armar una URL que regresa en formato JSON los datos de mi Twitter:

Y cómo sirven?

https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=annikapringles&count=1&callback=callback

callback([{"created_at":"Sat Apr 21 15:15:51 +0000 2012","id":193719704974659584,"id_str":"193719704974659584","text":"\"vestida\", para matar","source":"\u003ca href=\"http:\/\/twitter.com\/#!\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":52305348,"id_str":"52305348","name":"Annika Pringles","screen_name":"annikapringles","location":"Mexico City","description":"I'm an operation that is executed in every 3d software, when a 4 sided vertical node dynamic is cross interpolated with a particle dampening...

Page 4: HackingMexico Xss en aplicaciones web con ajax

JSON está chido, pero cuando necesitamos que regrese valores que contengan HTML, ahí hay problema!

Podemos intentar inyectando un <s> en alguno de los datos del request, y si vemos que el explorador responde con texto y una línea quiere decir que la página es vulnerable al XSS

Cómo puedo probar si mi

página es vulnerable a

XSS??

Page 5: HackingMexico Xss en aplicaciones web con ajax

Como a los exploradores les encanta renderear código a pesar de que le indiques que el Content-Type sea application/json o application/x-javascript, puedes ser objetivo de que alguien pueda ‘esnifear’ tu contenido y así puedan ejecutar Javascripts chuecos

Internet Explorer confía ciegamente en la extensión cuando se está ‘esnifeando’ contenido y las extensiones de los archivos pueden ser cambiadas en cualquier momento, esto es, si tenemos usuario/json nos regresa texto plano, pero si le cambiamos a usuario/json.html lo puede interpretar como HTML!

Dependiendo el servidor web hay varias formas de hacer este cambio de extensiones:

/json.htm /json.html /json/.html (PHP and Asp.NET) /json;.html (JSP) /json.cgi?a.html

Y para acabarla de chin…

Page 6: HackingMexico Xss en aplicaciones web con ajax

Verificando que se puedan agregar extensiones arbitrarias en la URL

El sitio esté usando HTTPS

La página tenga ‘headers’ para cache-control: no cache o pragma: no-cache

El sitio tenga el ‘header’ content-disposition: attachment

Que el Content-Type del sitio esté puesto para image/[anything]

Cómo puedo probar si mi

página es vulnerable a que

la ‘esnifeen’?

Page 7: HackingMexico Xss en aplicaciones web con ajax

Como siempre, hay que validar todos los input que haga el usuario

Cuando el input del usuario se tenga que regresar al explorador, siempre codificar ese texto propiamente, p.ej.: reemplazar < con Unicode como \u003C

Y finalmente, como un extra, incluir en el servidor web el header X-Content-Type-Options: nosniff, esto para evitar que ‘esnifeen’ contenido en Internet Explorer 8+ y otros exploradores

Recomendaciones