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.
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]
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
logon.asp
Mary
se envía para realizar el pago, logon.asp
se reenvía avulnerable.asp?login=YES&username=Mary
El problema es que vulnerable.asp
está 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.
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.
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
php.ini: register_globals = on
Se 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
'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.