Hola, somos Arume

Desarrollamos páginas web, aplicaciones para móviles, capas de realidad aumentada y aplicaciones para Facebook. Nos apasiona la informática y somos unos perfeccionistas incurables; por eso en nuestros proyectos utilizamos estándares.

tel. 625 519 694

Mendaña de Neyra, 34, 3º B, 15008, A Coruña

Autenticarse

Registrarse. ¿Has olvidado tu contraseña?

Etiquetas

Saltar las etiquetas

Suscríbete a las RSS

Estás en:

  • Inicio >
  • Blog >
  • Seguridad de las sesiones en PHP: Cross-Site Session Transfer

Seguridad de las sesiones en PHP: Cross-Site Session Transfer

14 Ene 2011 por Luis

Comentarios: 1

Transferencia

Cross-Site Session Transfer (transferencia de sesión entre sitios) es un tipo de ataque que, dada su naturaleza, sólo puede darse en servidores compartidos. El ataque se basa en utilizar la sesión creada en una aplicación web en la cuenta del atacante para acceder a una aplicación web (que debe tener una implementación de las sesiones del sistema de autenticación similar) de otro usuario en el mismo servidor.

Es decir, poniendo como ejemplo de aplicación web una tienda virtual (como el osCommerce), un usuario que tenga su tienda virtual en un servidor compartido podría acceder como administrador en su propia tienda y luego utilizar esa sesión para acceder como administrador a la tienda virtual de otro usuario.

Cómo se realiza el ataque

Siguiendo con el ejemplo de la tienda virtual, supongamos que un usuario quiere atacar una tienda virtual alojada en un servidor compartido. Lo primero que debe hacer el atacante es crearse una cuenta en ese servidor compartido e instalarse en ella la tienda virtual. Una vez hecho esto, accederá a la zona de administración con su usuario y contraseña.

Con esto se creará una sesión en el servidor con los datos de ese administrador. A modo de ejemplo pongamos que el identificador de sesión es "31d7bgphebfemb55311b1cger6" y que el dato que guarda en sesión la tienda virtual para comprobar que el usuario está autenticado como administrador es (para simplificar) "admin_logged=true". Entonces, como vimos en el artículo "Sesiones en PHP: qué son y cómo funcionan", el servidor creará en el directorio donde guarda las sesiones (por defecto "/temp") un archivo "sess_31d7bgphebfemb55311b1cger6" con el contenido:

admin_logged=true

Lo siguiente que hace el atacante es crear en su navegador una cookie de sesión para el dominio de la tienda virtual a atacar con nombre "31d7bgphebfemb55311b1cger6". Con esto hecho, accede a la zona de administración de la tienda virtual atacada. Al llegar a este punto, el servidor compartido está recibiendo una petición a la administración de la tienda virtual atacada, en la que el usuario le dice que su sesión es "31d7bgphebfemb55311b1cger6". El servidor va al directorio donde guarda las sesiones y busca el archivo "sess_31d7bgphebfemb55311b1cger6". Como ve que existe, lee su contenido ("admin_logged=true") y se lo pasa a la tienda virtual. El servidor no tiene forma de saber que esa sesión no corresponde a este dominio ya que el directorio de sesiones es común para todos los dominios alojados en el mismo. Con esto, el atacante ya está autenticado como administrador en la tienda virtual objetivo.

Métodos de prevención

Esta vulnerabilidad se puede combatir con los mismos métodos que se combate el robo de sesiones en servidor compartido, es decir, usando las funciones session_save_path o session_set_save_handler para aislar las sesiones de nuestra aplicación web de las del resto del servidor, o, si esto no es posible (o como medida de seguridad adicional), utilizando una "marca de aplicación" en la sesión de esta forma:

if (isset($_SESSION['application']) === false || $_SESSION['application'] !== 'identificador-unico-de-la-aplicacion')
{
	// Denegar el acceso y destruir la sesión
}

Comentarios

1 comentarios. Comentar.

1. Anónimo el 30 Oct 2013 a las 23:37:50

Muy buena informacion gracias me sirvio mucho n.n

Comentar

Comentar de forma anónima

Puedes comentar poniendo cualquier nombre o apodo, exceptuando los nombres de usuarios registrados. Máximo de 50 caracteres.

Comentar como usuario registrado

Registrarse. ¿Has olvidado tu contraseña?