PHP
ha solucionado un error relacionado con el tratamiento de las sesiones que
llevaba varios años sin corregir. Concretamente, el módulo de gestión de sesiones no validaba correctamente los ID de
sesión generados aceptando aquellos que incluso no estaban inicializados.
Es decir, valores asignados pero no generados por la aplicación.
Este error permitía ataques de
fijación de sesión ("Session
fixation"). Este tipo de ataque consiste en la imposición de un token
de sesión, conocido por el atacante, a una víctima a la que se le induce a
iniciar una sesión en la aplicación web vulnerable.
Pongamos un ejemplo: una
aplicación web que exhibe el valor del token en la URL y este sea usado para
identificar la sesión:

Otro esquema de funcionamiento,
incluso más débil, consiste en que el atacante ni siquiera tiene que molestarse
en generar una sesión sino que le basta con asignar un valor aleatorio.
Hasta ahora los programadores de
aplicaciones web en PHP usaban sus propios mecanismos para erradicar este tipo
de ataques usando patrones conocidos de programación defensiva. Pero aquellas
aplicaciones carentes de estos mecanismos seguían (y siguen) siendo vulnerables
a este tipo de ataques.
Otro problema adicional es la
duplicación de tokens de sesión. PHP no
controla que existan dos tokens de sesión iguales generados previamente por la
aplicación. Aunque estadísticamente la probabilidad es pequeña podría ser
un elemento a tener en cuenta en sitios con una gran cantidad de usuarios
concurrentes.
A partir de la próxima versión
5.5.2 de PHP se incluirá el parche (https://gist.github.com/yohgaki/1379668)
para establecer el control estricto de sesiones.
El parche incluye la adopción de
funciones para validar el token de sesión, control estricto de sesiones por
defecto en la configuración (php.ini) y mensajes de advertencia cuando se usa
la función 'session_id'.
Curiosamente la funcionalidad
añadida por el parche hace que PHP sea vulnerable a un tipo específico de
denegación de servicio si el atacante consigue establecer una cookie de solo
lectura en el navegador de la víctima.
El parche original pertenece a
Stephan Esser, conocido investigador de seguridad con numerosos reportes de
vulnerabilidades sobre PHP entre otros muchos trabajos. La vulnerabilidad tiene
asignado el CVE-2011-4718.
Más información:
Request for Comments: Strict Sessions
projects / php-src.git / commit
David García
Twitter: @dgn1729
Viva el GNU GPL !!
ResponderEliminar¿Qué tiene que ver el tocino con la velocidad? No es posible establecer una relación causal entre la disponibilidad del código fuente y la agilidad a la hora de detectar y resolver un problema de seguridad. Primero hay que averiguar qué está mal y por qué, y después saber cómo arreglarlo de la forma menos traumática posible, y eso no es una habilidad al alcance de todo el mundo.
Eliminar