Archivos del Mes para Febrero, 2010

Agujero de seguridad en WordPress (por segunda vez)

Bueno, después del primer agujero de seguridad que encontré y explique en mi blog, que afectaba a wordpress, he estado bastante tiempo sin escribir en el blog, y que mejor manera que volver a retomar el blog, que con el mismo tema que lo dejé: seguridad y wordpress.

Hace unos días encontré un problema que afecta a todas las versiones de wordpress, y que puede ser explotado de forma bastante sencilla, sin embargo, requiere un poco de interacción con el administrador del blog, para que caiga en nuestra pequeña trampa.

Insisto en que no se trata de un engaño ni de que el administrador nos de su contraseña ni nada rastrero, es un agujero de seguridad real, como ahora explicaré.

El problema empieza en el fichero press-this.php, dentro de wp-admin:

http://www.ejemplo.com/wordpress/wp-admin/press-this.php?t=Hacked%20by%20me&s=a%20pro%20hacker%20hacked%20this%20blog

Si el administrador del sitio visitase esta url (ya veremos como), le sale un editor para crear una nueva entrada en el blog, y además, rellenado ya con un título para la entrada y un cuerpo para la entrada, que podemos rellenar utilizando esas dos variables que van por GET.

Esto es un pequeño CSRF que nos permite rellenar el formulario sin que el usuario toque nada.

El problema está en que aunque montemos una web, tipo www.webmuymuymala.com y dentro metamos un iframe que apunte a esa url, y mandando un correo, hagamos que el dueño del blog entre a www.webmuymuymala.com, aun y así, no pasará nada, por que aunque el contenido del nuevo post se autorellena, falta pulsar el botón publicar, cosa que el administrador no hará.

Llegados a este punto, podemos tirar de otra técnica explicada aquí en este mismo blog, llamada clickjacking,  para insertar un iframe apuntando a esa URL, bajarle la opacidad a 0, de forma que no se ve nada, y justo debajo del botón publicar, poner un botón que ponga: entrar en mi página!, que aparezca al entrar en www.webmuymuymala.com.

Ahora solo tenemos que convencer al administrador del blog para que entre en nuestra web, el verá una portada y un botón normal y corriente para entrar en la web, y cuando clique, estará clicando en un iframe transparente que tiene encima, concretamente, en el botón publicar del post pre-rellenado.

Lo voy a ilustrar con un par de imagenes, para que se entienda mas fácil:

Página web normal y corriente, con un iframe dentro, que apunta a lo explicado arriba

Ahora reducimos un poco la opacidad del iframe, para que se vea lo que hay debajo:

y finalmente reducimos la opacidad a 0, ¿alguien se daría cuenta del engaño? Es imposible, sin tener instalada alguna extensión como noscript.

Como veis, es totalmente imposible saber que hay un iframe transparente encima de ese botón enter.

Cuando el administrador pulse en el botón Enter, estará picando en publicar y agregará una nueva entrada a la portada de su blog, sin llegar a ver nada.

Para evitar este tipo de problemas, las páginas importantes como facebook o twitter impiden cargar ciertas áreas dentro de un iframe, he contactado con wordpress y les he recomendado que la administración no se pueda cargar en un iframe, han abierto un ticket aquí:

http://core.trac.wordpress.org/ticket/12293

Y están debatiendo que hacer. En wordpress.com, el servicio público que ofrecen ya está parcheado. Para variar, y debido a mi MUY mala relación con wordpress, han vuelto a no darme crédito por el aviso ni por nada (es lo que tiene llevarse mal, muy mal), aunque he querido arreglar un poco las cosas y no he publicado hasta que Ryan Boren, de wordpress me ha dado el visto bueno.