stringtranslate.com

Envenenamiento de sesión

El envenenamiento de sesión (también conocido como "contaminación de datos de sesión" y "modificación de sesión") es un método para aprovechar la validación de entrada insuficiente dentro de una aplicación de servidor. Normalmente, una aplicación de servidor vulnerable a este tipo de vulnerabilidad copiará la entrada del usuario en las variables de sesión .

La vulnerabilidad subyacente es un problema de gestión de estado: estado compartido, condición de carrera , ambigüedad en el uso o modificaciones simples y sin protección de los valores de estado.

Se ha demostrado el envenenamiento de sesiones en entornos de servidor donde diferentes aplicaciones no maliciosas (scripts) comparten los mismos estados de sesión pero donde el uso difiere, lo que causa ambigüedad y condiciones de carrera.

Se ha demostrado el envenenamiento de sesiones en escenarios donde el atacante puede introducir scripts maliciosos en el entorno del servidor, lo que es posible si el atacante y la víctima comparten un servidor web.

Orígenes

El envenenamiento de sesiones se discutió por primera vez como una clase de vulnerabilidad (potencialmente nueva) en la lista de correo Full Disclosure . [1] Alla Bezroutchko preguntó si "Las vulnerabilidades de contaminación de datos de sesión en aplicaciones web" eran un problema nuevo en enero de 2006. Sin embargo, se trataba de una vulnerabilidad antigua que otros habían notado previamente: "este es un problema clásico de administración de estado" - Yvan Boily; [2] "Esto no es nuevo" - /someone. [3]

Se pueden encontrar ejemplos anteriores de estas vulnerabilidades en los principales recursos/archivos de seguridad como Bugtraq , por ejemplo:

La contaminación de sesiones también se ha abordado en algunos artículos, como PHP Session Security, Przemek Sobstel, 2007. [6]

Ejemplos de ataques

Escenario de ataque trivial

Un ejemplo de código vulnerable a este problema es:

Sesión("Iniciar sesión") = Solicitud("Iniciar sesión")Sesión("Nombre de usuario") = Solicitud("nombre de usuario")

Que está sujeto a ataques triviales como

vulnerable.asp?login=SI&nombreusuario=María

Este problema podría existir en el software donde

El problema es que vulnerable.aspestá diseñado asumiendo que solo se accede a la página de forma no maliciosa. Cualquiera que comprenda cómo está diseñado el script puede crear una solicitud HTTP que establezca el usuario de inicio de sesión de forma arbitraria.

Explotación del uso ambiguo o dual de la misma variable de sesión

Alla Bezroutchko analiza un escenario en el que $_SESSION['login']se utiliza para dos propósitos diferentes. [7]

Se demostró una condición de carrera en la que los scripts de reinicio podrían explotarse para cambiar el usuario conectado de forma arbitraria.

Explotación de scripts que permiten escrituras en variables de sesión arbitrarias

Alla Bezroutchko analiza ejemplos observados en foros de desarrollo, que permiten escribir en variables de sesión arbitrarias. [8]

El primer ejemplo es

$var  =  $_GET [ "algo" ];  $_SESSION [ " $var " ]  =  $var2 ;

(en el que $_GET["algo"] probablemente proviene de un cuadro de selección o similar).

El ataque se convierte en

vulnerable.php?algo=VAR_DE_SESIÓN_A_ENVENENAR

Ataques de envenenamiento de sesión habilitados por php.ini: register_globals = on

php.ini: register_globals = onSe sabe que habilita vulnerabilidades de seguridad en varias aplicaciones. Se recomienda a los administradores de servidores PHP que desactiven esta función.

Nota: Ejemplos reales de envenenamiento de sesión habilitados por register_globals = on se demostraron públicamente en julio de 2001 en el artículo Grave agujero de seguridad en Mambo Site Server versión 3.0.X. [9]

El segundo ejemplo de /alguien es [10]

si  ( $condición1 )  {  $var  =  'ALGO' ;  };  si  ( $condición2 )  {  $var  =  'OTRO' ;  };  $_SESSION [ " $var " ]  =  $var2 ;

que es vulnerable si:

El ataque se convierte en

vulnerable.php?var=VAR_DE_SESIÓN_A_ENVENENAR

Explotar utilizando un servidor PHP compartido (por ejemplo, alojamiento web compartido)

'unknown' de uw-team.org analiza un escenario en el que el atacante y la víctima comparten el mismo servidor PHP. [11]

El ataque es bastante fácil:

Este ataque solo requiere que la víctima y el atacante compartan el mismo servidor PHP. El ataque no depende de que la víctima y el atacante tengan el mismo nombre de host virtual, ya que es trivial para el atacante mover la cookie de identificador de sesión de un dominio de cookies a otro.

Véase también

Referencias

  1. ^ "Archivos de Neohapsis 0414".
  2. ^ "Archivos de Neohapsis 0459".
  3. ^ "Archivos Neohapsis 0423".
  4. ^ "Archivos Seclistas 0569".
  5. ^ "Archivos Seclistas 0193".
  6. ^ "Segfault Labs" (PDF) . Consultado el 22 de septiembre de 2007 .
  7. ^ "Archivos de Neohapsis 0414".
  8. ^ "Archivos Neohapsis 0423".
  9. ^ "Archivos Seclistas 0569".
  10. ^ "Archivos Neohapsis 0423".
  11. ^ "Archivo Seclistas 0193".