jueves, 10 de mayo de 2012

0verXW: semilla de un XSS Worm

¡Saludos gente!

    El día de ayer estuvimos realizando un pequeño experimento en cierto foro: la creación y observación de un XSS Worm inofensivo. Resumiendo un poco la historia, la idea surgió a primera hora de la mañana (en España), a eso de las 6 o las 7 del día, después de no haber dormido ni pizca. Estaba en el IRC con Seth charlando sobre viejas batallitas cuando recordé la existencia de un XSS en la web de cierta comunidad. Dicho XSS es conocido desde hace como mínimo 5 años, pero nunca se parcheó: como la web ya no se usaba, se borró el index, pero el resto de partes siguen todavía vivas y accesibles (¡un fuerte aplauso al admin!). Al linkearle la web vulnerable, no se le ocurrió a Seth otra cosa que dar una idea hipertentadora: codear un worm y soltarlo en el foro. Los que conozcais este blog desde sus inicios recordareis que siempre tuve cierta fascinación por este tipo de temas (XSS Worms: El terror de las redes sociales, asi que la idea me encantó. Empecé a codear el worm, con bastantes problemas. Problemas del tipo: llevo demasiadas hora sin dormir y me estoy volviendo gilipollas por momentos y no consigo escribir bien una función; pero con la ayuda de Seth los conseguí solventar, no sin antes acordarme de la p*ta madre de todas las deidades.


      Lo que codeé fue un simple PoC para probar si realmente se podría extender y aumentar con el tiempo la tasa de "infectados". Quería hacer una semilla, un inicio, y si funcionaba empezar un proyecto: codear un XSS Worm para SMF. Y como este experimento funcionó a las mil maravillas os puedo adelantar que este verano empezaré el proyecto (ya os iré informando de cómo evoluciona).

    El XSS al no encontrarse dentro del foro, sino en la web, nos ponía el inconveniente de que era necesario que los usuarios hicieran click sobre un enlace para poder ejecutar el script. Esto sinceramente me desanimó bastante, porque empecé a temer que la gente no hiciera click. Pero todos estos temores eran infundados, ya que con un poco de ingeniería social (a.k.a chicas enseñando las tetas) todos hacen click. El objetivo que quería conseguir era la esencia propia de un worm, es decir, que se lleve a cabo su propagación de forma involuntaria, por lo que el script no iba a contener ningún payload real, únicamente tendría que añadir el enlace que ejecutaba el JS para que otro usuario incauto clickase sobre él y continuara expandiéndolo.

   El script añade un iframe a la web vulnerable que está dirigido a la página de creación de un nuevo tema, y después se rellenan los campos y se envía el formulario:
function carga() { fri = window.frames['Seth']; fri.document.getElementsByName("subject")[0].value = "La novia de Seth desnuda"; fri.document.getElementsByName("message")[0].value = '[url=URL QUE INFECTA][img]http://imgserv.ya.com/foros3.ya.com/pub/uploadedimg/8/o/i_1vkx9impdl1wq_mox631o8.jpg[/img][/url][br]¡Haz click en la imagen para ver toda la galeria!'; fri.document.getElementsByName("postmodify")[0].submit(); } document.write('<iframe style="display:none" name="Seth" src="url del formulario para crear el tema" onload="carga()"></iframe>');
  Sobre este sencillo script se podrían hacer mil cosas para mejorarlo, pero como dije al principio unicamente perseguíamos la comprobación de si realmente se iba a expandir o no. El post que se generaba era el siguiente:
  Como podeis observar el título del tema invita a los morbosos a ver desnuda a la novia de uno de los usuarios, que junto a la imagen de la peligroja, parecen ser un imán de clicks. Para ocultar un mínimo la URL pensé en utilizar alguno de los servicios online que permiten acortar la ULR, pero todos ellos detectaban el XSS y me impiedían la acortación. Para poder bypassear esta restricción subí un archivo PHP, al mismo dominio donde estaba el script, que se encargaba de realizar una redirección para explotar el XSS, y éste archivo de mi dominio fue el que puse en el acortador. Una vez que ya todo estaba preparado lo único que nos faltaba era un usuario que activase el mecanismo. En este caso escogí a un usuario que estaba en el IRC:


16:13 :                     XC3LL ¦ codek`-`¿has visto la peli de 28 días despues ?
16:13 :                codek`-` ¦ hmm
16:13 :                codek`-` ¦ creo que no no me suena
16:14 :                codek`-` ¦ por??
16:14 :                     XC3LL ¦ y con el amanecer de los muertos vivientes ?
16:15 :                     XC3LL ¦ (URL maliciosa)
16:15 :                 PHPIdler ¦ Title: Acorta tus Url: Haz tus Url más fáciles de recordar - XURL.es
16:15 :                codek`-` ¦ xDD
16:15 :                codek`-` ¦ creo que tampoco
16:15 :                codek`-` ¦ la verdad no soy muy cinéfilo
16:16 :                     XC3LL ¦ [codek`-`] entonces no pillarás el chiste de esa URL xD
16:16 :                codek`-` ¦ voy a intentarlo
16:16 :                codek`-` ¦ xDD
16:16 :                codek`-` ¦ :o
16:16 :                codek`-` ¦ e entrao
16:17 :                codek`-` ¦ que me has infectado de algo?
16:17 :                     XC3LL ¦ [codek`-`] Nopes =/
16:17 :                     XC3LL ¦ Pero debería de haber pasado otra cosa =/
16:17 :                     XC3LL ¦ Ahora
16:17 :                     XC3LL ¦ Ahora ya funca
16:17 :                     XC3LL ¦ JAJA
16:17 :                codek`-` ¦ me metido (comunidad vulnerable)
16:18 :                codek`-` ¦ pero no en el foro
16:18 :                     XC3LL ¦ [jep_py] ¡ Esta vivo!
16:18 :                     XC3LL ¦ [jep_py] ¡Esta vivo!

    Gracias a este infectado, poco a poco se fueron generando temas, conforme la gente iba clickando, otro tema se iba creando. Algunos usuarios se dieron cuenta pronto y pusieron el grito en el cielo. En cambio, la inmensa mayoría, seguía cayendo. He de decir que yo también caí en mi propio worm por error. Para que no se acumulasen en exceso empecé a borrar basantes, pero después lo dejé crecer para ver hasta que punto llegaba. En cierto momento tomé un pantallazo como recuerdo (clickad en ella para verla más grande):



  Con este inofensivo worm pasemos un gran día ayer. Fue bastante divertido y quisiera agradecer a Seth (por ser la fuerza generatriz), a Jep y Codek (por echar una mano y ser los primeros "infectados"), a RGB (por permitirme hacer el vándalo un rato en su foro -él es el administrador del foro, no de la web ni el servidor, no tiene culpa de que no parcheen el XSS-) y a aquellos usuarios que se dieron cuenta de lo que estaba pasando y que les pedí que guardasen el secreto hasta el día siguiente. Me he divertido bastante con este experimento, y me ha servido para decidirme a hacer el proyecto que mencioné más arriba: un worm para SMF. Creo que no me dejo nada en el tintero, si es así ya lo añadiré cuando me acuerde.


 Byt3z
5 0verl0ad Labs: 0verXW: semilla de un XSS Worm ¡Saludos gente!     El día de ayer estuvimos realizando un pequeño experimento en cierto foro: la creación y observación de un XSS Worm in...

2 comentarios:

Anónimo dijo...

XD genial!!!

aneraka dijo...

Jajajaja que fino y que grande eres...

me dio hasta mio clickear en la imagen para verla mas grande jejejeje

< >