Ola, somos Arume

Desenvolvemos páxinas web, aplicacións para móbiles, capas de realidade aumentada e aplicacións para Facebook. Apaixónanos a informática e somos uns perfeccionistas incurables; por eso nos nosos proxectos utilizamos estándares.

tel. 625 519 694

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

Autenticarse

Rexistrarse. Esqueceches o teu contrasinal?

Etiquetas

Saltar as etiquetas

Subscríbete ás RSS

Estás en:

  • Inicio >
  • Blog >
  • Seguridade das sesións en PHP: Cross-Site Session Transfer

Seguridade das sesións en PHP: Cross-Site Session Transfer

14 Xan 2011 por Luis

Comentarios: 1

Transferencia

Cross-Site Session Transfer (transferencia de sesión entre sitios) é un tipo de ataque que, dada a súa natureza, só pode darse en servidores compartidos. O ataque baséase en utilizar a sesión creada nunha aplicación web na conta do atacante para acceder a unha aplicación web (que debe ter unha implementación das sesións do sistema de autenticación similar) doutro usuario no mesmo servidor.

É dicir, pondo como exemplo de aplicación web unha tenda virtual (como o osCommerce), un usuario que teña a súa tenda virtual nun servidor compartido podería acceder como administrador na súa propia tenda e logo utilizar esa sesión para acceder como administrador á tenda virtual doutro usuario.

Como se realiza o ataque

Seguindo co exemplo da tenda virtual, supoñamos que un usuario quere atacar unha tenda virtual aloxada nun servidor compartido. O primeiro que debe facer o atacante é crearse unha conta nese servidor compartido e instalarse nela a tenda virtual. Unha vez feito isto, accederá á zona de administración co seu usuario e contrasinal.

Con isto crearase unha sesión no servidor cos datos dese administrador. A modo de exemplo poñamos que o identificador de sesión é "31d7bgphebfemb55311b1cger6" e que o dato que garda en sesión a tenda virtual para comprobar que o usuario está autenticado como administrador é (para simplificar) "admin_logged=true". Entón, como vimos no artigo "Sesións en PHP: que son e como funcionan", o servidor creará no directorio onde garda as sesións (por defecto "/temp") un arquivo "sess_31d7bgphebfemb55311b1cger6" co contido:

admin_logged=true

O seguinte que fai o atacante é crear no seu navegador unha cookie de sesión para o dominio da tenda virtual a atacar con nome "31d7bgphebfemb55311b1cger6". Con isto feito, accede á zona de administración da tenda virtual atacada. Ó chegar a este punto, o servidor compartido está recibindo unha petición á administración da tenda virtual atacada, na que o usuario dille que a súa sesión é "31d7bgphebfemb55311b1cger6". O servidor vai ó directorio onde garda as sesións e busca o arquivo "sess_31d7bgphebfemb55311b1cger6". Como ve que existe, le o seu contido ("admin_logged=true") e pásallo á tenda virtual. O servidor non ten forma de saber que esa sesión non corresponde a este dominio xa que o directorio de sesións é común para todos os dominios aloxados no mesmo. Con isto, o atacante xa está autenticado como administrador na tenda virtual obxectivo.

Métodos de prevención

Esta vulnerabilidade pódese combater cos mesmos métodos que se combate o roubo de sesións en servidor compartido, é dicir, usando as funcións session_save_path ou session_set_save_handler para illar as sesións da nosa aplicación web da do resto do servidor, ou, se isto non é posible (ou como medida de seguridade adicional), utilizando unha "marca de aplicación" na sesión desta forma:

if (isset($_SESSION['application']) === false || $_SESSION['application'] !== 'identificador-unico-da-aplicacion')
{
	// Denegar o acceso e destruír a sesión
}

Comentarios

1 comentarios. Comentar.

1. Anónimo o 30 Out 2013 ás 23:37:50

Muy buena informacion gracias me sirvio mucho n.n

Comentar

Comentar de forma anónima

Podes comentar poñendo calquera nome ou alcume, exceptuando os nomes de usuarios rexistrados. Máximo de 50 caracteres.

Comentar como usuario rexistrado

Rexistrarse. Esqueceches o teu contrasinal?