El envenenamiento de sesión (también conocido como "contaminación de datos de sesión" o "modificación de sesión") es un método para explotar la validación insuficiente de la entrada de datos en una aplicación de servidor . Normalmente, una aplicación de servidor vulnerable a este tipo de ataque copia la entrada del usuario en 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 simples modificaciones no protegidas de los valores de estado.
Se ha demostrado la posibilidad de envenenamiento de sesión en entornos de servidor donde diferentes aplicaciones (scripts) no maliciosas comparten los mismos estados de sesión, pero cuyo uso difiere, lo que provoca ambigüedad y condiciones de carrera.
Se ha demostrado la posibilidad de envenenamiento de sesión en escenarios donde el atacante puede introducir scripts maliciosos en el entorno del servidor, lo cual 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 de divulgación completa . [ 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, esta era una vulnerabilidad antigua previamente señalada por otros: "este es un problema clásico de gestión de estado" - Yvan Boily; [ 2 ] "Esto no es nuevo" - /alguien. [ 3 ]
Ejemplos anteriores de estas vulnerabilidades se pueden encontrar en importantes recursos/archivos de seguridad como Bugtraq , por ejemplo
- Julio de 2001, Grave fallo de seguridad en Mambo Site Server versión 3.0.X por Ismael Peinado Palomo de reverseonline.com [ 4 ]
- Septiembre de 2005, modificación de sesión PHP por desconocido (del equipo uw) y adam_i [ 5 ]
La contaminación de sesiones también se ha tratado 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("Inicio de sesión") = Solicitud("inicio de sesión") Sesión("Nombre de usuario") = Solicitud("nombre de usuario") Lo cual es susceptible a ataques triviales como
vulnerable.asp?login=YES&username=Mary
Este problema podría existir en el software donde
- El usuario envía nombre de usuario / contraseña a
logon.asp - Si la contraseña para
Maryverificar,logon.aspredirige avulnerable.asp?login=YES&username=Mary
El problema radica en que vulnerable.aspestá diseñado bajo la premisa de que solo se accede a la página de forma no maliciosa. Cualquiera que comprenda el diseño del script puede crear una solicitud HTTP que establezca el usuario de inicio de sesión de forma arbitraria.
Aprovechar el 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 ]
- En los scripts de inicio de sesión, la variable de sesión almacena "Este usuario ha iniciado sesión".
- En los scripts de restablecimiento de contraseña, la variable de sesión almacena "este usuario desea restablecer su contraseña".
Se demostró una condición de carrera, en la que los scripts de reinicio podían ser explotados para cambiar arbitrariamente el usuario que había iniciado sesión.
Explotar scripts que permiten escribir 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=VARIABLE_DE_SESIÓN_PARA_POISON
Ataques de envenenamiento de sesión habilitados por php.ini: register_globals = on
php.ini: register_globals = onSe sabe que esta función crea vulnerabilidades de seguridad en varias aplicaciones. Se recomienda a los administradores de servidores PHP que la desactiven.
Nota: Ejemplos reales de envenenamiento de sesión habilitado por register_globals = on se demostraron públicamente en julio de 2001 en el artículo Grave fallo de seguridad en Mambo Site Server versión 3.0.X. [ 9 ]
El segundo ejemplo de /alguien es [ 10 ]
if ( $condition1 ) { $var = 'ALGO' ; }; if ( $condition2 ) { $var = 'OTRO' ; }; $_SESSION [ " $var " ] = $var2 ;que es vulnerable si:
- Es posible que el atacante logre que ambas condiciones sean falsas.
- El archivo php.ini está mal configurado (register_globals = on), lo que permite que el valor predeterminado de $var sea controlado por la entrada GPC (GET, POST o COOKIE).
El ataque se convierte en
vulnerable.php?var=VARIABLE_DE_SESIÓN_PARA_POISON
Explotar una vulnerabilidad utilizando un servidor PHP compartido (por ejemplo, alojamiento web compartido).
Un usuario desconocido 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 sencillo:
- El atacante primero visita la página de la víctima y, por ejemplo, inicia sesión.
- A continuación, el atacante sube un script PHP a su cuenta y hace que muestre el contexto de $_SESSION (establecido por el script de la víctima).
- El atacante determina qué variable debe modificarse, sube un script que establece dicha variable y lo ejecuta.
- El atacante visita las páginas de las víctimas para comprobar si el ataque previsto ha funcionado.
Este ataque solo requiere que la víctima y el atacante compartan el mismo servidor PHP. No depende de que ambos tengan el mismo nombre de host virtual , ya que para el atacante es muy sencillo mover la cookie de identificador de sesión de un dominio de cookies a otro.
Véase también
Referencias
- ↑ "Archivos Neohapsis 0414" .
- ↑ "Archivos Neohapsis 0459" .
- ↑ "Archivos Neohapsis 0423" .
- ↑ "Archivos seclistas 0569" .
- ↑ "Archivos seclistas 0193" .
- ↑ "Segfault Labs" (PDF) . Consultado el 22 de septiembre de 2007 .
- ↑ "Archivos Neohapsis 0414" .
- ↑ "Archivos Neohapsis 0423" .
- ↑ "Archivos seclistas 0569" .
- ↑ "Archivos Neohapsis 0423" .
- ↑ "Archivo de seclistas 0193" .
- vulnerabilidades de seguridad web
- Vulnerabilidades de seguridad web del lado del cliente