¿Podemos obtener la contraseña de JSESSIONID?

No puedes. Sin embargo, puede secuestrar (temporalmente) la sesión autenticada actualmente válida de alguien si conoce su JSESSIONID. En algunos casos, es posible que también deba emparejar / falsificar de alguna manera la dirección IP del lado del cliente para que este truco funcione, pero a menudo, el JSESSIONID solo es todo lo que necesita para asumir la identidad del usuario válido de la sesión. (Esta es la razón por la cual es * crítico * usar un cifrado seguro para todos los datos en tránsito entre el cliente y el servidor, mediante el uso de la seguridad de capa de transporte (TLS), que se realiza mediante el uso de URL “https” en lugar de “http “URL).

El JSESSIONID es una cadena de bits generada aleatoriamente que se codifica en una cadena de caracteres “seguros”, generalmente representando cada byte en notación hexadecimal. El servidor web / de aplicaciones recuerda esta cadena durante la sesión autenticada, y el navegador web (u otra aplicación cliente) también la recuerda al almacenarla como una “cookie de sesión”. Mientras el servidor web / de aplicaciones aún asocie esta cadena con una sesión autenticada actualmente válida, la aplicación del lado del cliente puede asumir la identidad del usuario autenticado simplemente pasando el valor JSESSIONID en los encabezados de solicitud HTTP de cada solicitud posterior.

No hay forma de “decodificar” de alguna manera la cadena JSESSIONID con formato hexadecimal en el nombre de usuario y / o contraseña que se autenticó en el servidor justo antes de la creación de JSESSIONID. No se deriva de ninguna información de inicio de sesión del usuario. Idealmente, proviene de una fuente de entropía (aleatoriedad) de alta calidad en el servidor, y generalmente se obtiene a través de una llamada al método “nextBytes” en un objeto SecureRandom (en Java). Si no hay suficiente entropía en el sistema para cumplir con esta solicitud, la llamada al método “nextBytes” se bloqueará hasta que se cumplan los requisitos de entropía. Sin embargo, es posible que se use una fuente de entropía más débil (un generador de números pseudoaleatorios o PRNG) si la tasa de inicios de sesión exitosos en el sistema (y, por lo tanto, la tasa a la que se deben generar los valores JSESSIONID) es alto. De cualquier manera, no importa si el JSESSIONID proviene directamente de la fuente de entropía de alta calidad del sistema o de una de una secuencia de llamadas PRNG basadas en la misma semilla aleatoria original, simplemente no hay datos de nombre de usuario o contraseña almacenados en él todos.