Mi blog y yo solos en el mundo

pensando en la gente que ama las madalenas

No hay un camino para la paz, la paz es el camino -Ghandi-

Y entonces comprendí porque le llamaban

miércoles, septiembre 28, 2011

Un pequeño detalle.

Es una tontería que se me ocurrió el otro día y a Laura le ha hecho bastante ilusión, un pequeño detalle para el mejorar el mediacenter.

Lo primero que hay que hacer es poner en el /etc/host el contenido de este archivo para eliminar una ingente cantidad de publicidad y mierdas varias redirigiendo las peticiones a nuestro equipo.

Tenemos que instalar un servidor web que admita páginas de error configurables, en mi caso un apache2 sin soporte más que para html.

Luego como página 404 yo he puesto una muy sencillita que usa una variante de este código para decirle cosas bonitas a mi novia.

ahora en lugar de publicidad tengo un sistema automático para hacer que mi novia sonría.

Y me decían que no todo se podía automatizar... ingenuos.

jueves, septiembre 01, 2011

La caja de los truenos.

En uno de esos raros momentos en los que Kwinix se olvida de cerrar el messenger aproveché para pedirle que mirase el sistema de autentificación de shared cost y como no podía ser de otra manera y con una sola frase abrió la caja de los truenos... "veo que no usas token de sesión..."

El problema es como he descubierto después que cuando te fías solo de la session del navegador un sitio malvado puede usar un frame para cargar o un enlace o lo que sea para obligar al navegador de la victima a volver a tu página donde el atacante quiera.

Esto implica que un atacante listo o más o menos sofisticado puede desde eliminar cuentas a robar datos, porque el navegador de la victima que tiene una cuenta legítima aun está identificado (puede que en otra pestaña) y por lo tanto al solicitarle las credenciales dispone de ellas y son correctas.

csrf wikipedia

Hay varios mecanismos de protección, pero yo he optado solo por dos, token de sesion y request validation.

request validation:

En mi caso este era el más sencillo de implementar, por un lado en la configuración dispongo de la url en la que está instalada la aplicación y por otro los request solo pueden venir de index.php de la página actual o de /

El punto débil de esto es que me tengo que fiar de donde dice el navegador que viene y por supuesto puede mentir pero la ventaja es que para hacer eso el ordenador de la victima tiene que estar infectado y no me engaño, si el ordenador de la victima está controlado por el atacante hay poco que hacer.

session token:

Esto supone añadir un nuevo uid a la aplicación de manera que hay dos, uno colocado en el SESSION del navegador y otro que va gestionado por las peticiones GET de los enlaces.

Cuando el usuario se loguea se le generan un par de uids el primero se coloca en $_SESSION['SID'] y servirá junto con el usuario para identificar al usuario mediante la session, el otro se propaga a los enlaces de manera que donde antes ponía index.php ahora figura index.php?token=TID

este TID se usa como doble check a la hora de determinar si el usuario está logueado o no.

De manera que si se accede a la web sin suministrar el par de tokens correctos el de Session y el de GET acompañados claro por el username adecuado el usuario es rechazado y aunque esto suceda tiene que venir desde una ubicación permitida.

Ahora el siguiente punto es comprobar la inyección de js a la que soy definitivamente vulnerable en este momento pero que es infinitamente más sencilla de evitar pero ya hablaremos de eso otro día.