viernes 2 de abril de 2010

Xss por semana santa en Woothemes de wordpress

Después de tanto tiempo sin escribir curiosamente hoy descubrí un Xss que me animó el día y me dió ganas de actualizar el blog ya que no he tenido tiempo de actualizarlo por el colegio...


Bueno el Bug está en una pequeña variable mínima super mínima...


"S="

como estos themes son e pago y no quiero atentar en contra de su "licencia" he decidido no publicar todo el code con error solo la parte que nos interesa...


searchWidget()


esa es la función que nos da esto:




<form method="get" id="searchform" action="<?php bloginfo('url'); ?>">

        <div>

        <input type="text" class="field" name="s" id="s"  value="Search..." onfocus="if (this.value == 'Search...') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Search...';}" />

        <input type="submit" class="submit" name="submit" value="Search" />

        </div>

</form>


y bueno lo que hace posible el que se ejecute:



<h3 class="catheading"><?php _e('Search Results',woothemes); ?> for <?php printf(__('\'%s\''), $s) ?></h3>



bueno bloginfo() tiene un conjunto de registros globales los cuales simplemente usan un motor de busqueda sin siquiera verificar lo que pasa por s= lo unico que nos hace ver el s= es que se hace un GET no hay un query ni nada por el estilo...


ahora usando un ejemplo real sin animos de dañar a nadie...


http://adiirockstar.com/?s=Search...&submit;=Search eso es lo que nos da cuando damos click en el boton de buscar... solo es una busqueda motora no es una query...

ahora solo modificamos en el textbox a una codigo javascript

http://adiirockstar.com/?s=%3Cscript%3Ealert%28%27SeguridadBlanca.Org%27%29%3C/script%3E&submit;=Search


simple... solo uso la funcion alert() y listo lo tenemos...


como lo podríamos reparar? esto es lo mas difícil tenemos que recrearlo... y usar algo como...



<h3 class="catheading"><?php _e('Search Results',woothemes); ?> for <?php printf(htmlentities(__('\'%s\''), $s)) ?></h3>



eso podría ser una solucion agregarle el filtro htmlentities, verifiquen la syntaxis que ahora no tengo un apache cerca ni un host... también pueden buscar otras maneras de bloquearlo pero esa les servirá bien por el momento...




Agradecimientos especiales a Sm0kes de www.malwarelabs.org quien me ayudó facilitandome fragmentos de código para descubrir los errores y que es un compatriota con mucha experiencia en el desarrollo de Software!


Saludos
Dr.White