¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Inicios de sesión y sesiones débiles

Después de esta lección: Puedo decir qué hace débiles un acceso y una sesión.

Lección de 55 min3 comandosLaboratorio de WebGoat: lecciones guiadas de seguridad web con WebWolf en tu propia copia

La contraseña del jefe de finanzas

Una empresa tiene un portal para su personal. Una noche, alguien prueba una lista corta de contraseñas comunes con cada nombre del listado. En pocos minutos entra con la cuenta del jefe de finanzas.

El portal no ponía ningún límite a los intentos. Nadie forzó nada: el portal dejó probar sin parar.

La regla única

Advertencia

Este laboratorio es una web insegura a propósito. Ataca solo tu copia privada, que no tiene salida a internet. Atacar un sistema que no es tuyo, o que no tienes permiso para probar, es delito en casi todos los países.

Al final de esta lección

Nota

Puedo decir qué hace débiles un acceso y una sesión.

Palabras clave

PalabraQué significaEjemplo
Sesiónel periodo en que la web te reconoce tras entrar con tu usuario y contraseña
Cookie de sesióndato que identifica tu sesión en cada peticiónJSESSIONID
Tokentexto firmado que prueba quién eres y hasta cuándo
Fuerza brutaprobar muchas contraseñas hasta acertar
Securemarca que hace viajar una cookie solo por conexión cifrada
Caducidadmomento en que un token deja de valer

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una contraseña débil cede ante la lista

Quien ataca no prueba todas las combinaciones. Prueba primero las contraseñas más comunes, una tras otra, con cada nombre de la lista de personal.

Una contraseña es débil si es corta, si está en esa lista o si contiene el nombre del usuario. También si usa un solo tipo de signo, como solo letras.

Ejemplo resuelto: cuatro contraseñas

ContraseñaProblemaPor qué
abcCortaCon tres letras hay muy pocas posibilidades
contrasena123ComúnEstá en las listas que se prueban primero
lucia-Naranja-2024Lleva el usuarioQuien conoce el nombre la adivina
Mesa-Verde-Lluvia-58NingunoLarga, rara y mezcla signos

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Mira las sesiones de tu laboratorio

Tu laboratorio ejecuta WebGoat. Arráncalo y espera un minuto. Estos tres comandos miran la puerta sin iniciar sesión. El segundo pide una página que exige sesión. El tercero muestra la cookie que pone el laboratorio.

¿Está lista la página de acceso?

Comando
curl -s -o /dev/null -w "%{http_code} %{redirect_url}\n" http://web/WebGoat/login

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Una página que exige sesión

Comando
curl -s -o /dev/null -w "%{http_code} %{redirect_url}\n" http://web/WebGoat/welcome.mvc

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

La cookie que pone esa respuesta

Comando
curl -s -I http://web/WebGoat/welcome.mvc | grep -i "^set-cookie"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Qué te dicen las tres respuestas

El primero imprime 200 y ninguna dirección. El segundo imprime 302 y la dirección de acceso: una página con sesión obligatoria manda a los desconocidos a la puerta. El tercero imprime una cookie JSESSIONID con Path=/WebGoat; HttpOnly.

El valor es aleatorio y cambia cada vez. Lleva HttpOnly. No lleva Secure, porque este laboratorio usa HTTP sin cifrar.

Un token se firma y caduca

Algunas webs, en vez de una cookie, entregan un token que el navegador envía en cada petición. El token dice quién eres y hasta cuándo vale, y lleva una firma del servidor.

Dos fallos son frecuentes: aceptar un token sin comprobar la firma, y no poner caducidad o ponerla muy lejos.

Ejemplo resuelto: tres tokens

TokenFirmaCaducaVeredicto
T1VálidaEn 15 minutosAceptable
T2No comprobadaEn 15 minutosRechazar: cualquiera puede inventarlo
T3VálidaHace una horaRechazar: ya caducó

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Comprobar un token

Código: python
now = 1000
# Cambia expires a 900 y pulsa Run. Luego cambia signed a False.
signed = True
expires = 1600
if not signed:
    print("rechazado: sin firma")
elif expires <= now:
    print("rechazado: caducado")
else:
    print("aceptado")

Un error frecuente

Advertencia

Mucha gente cree que un token de aspecto aleatorio está oculto y por eso es seguro. No es así. El token viaja en cada petición y se puede copiar. Lo que lo protege es la firma, la caducidad y la conexión cifrada. Su aspecto no protege nada.

Qué hace fuerte un acceso

Un acceso fuerte limita los intentos, bloquea o frena tras varios fallos y pide más de un factor en cuentas importantes. Guarda las contraseñas con un hash lento (una huella de un solo sentido que no se puede deshacer), nunca en claro.

Una sesión fuerte cambia de identificador tras iniciar sesión, caduca, lleva HttpOnly y Secure, y se cierra de verdad al salir.

Para ir más allá: otro destinatario

Un token bien firmado y sin caducar puede estar hecho para otra aplicación de la misma empresa. Por eso muchos tokens dicen también para quién son.

En show-token, añade audience = "nominas" y una comprobación que rechace el token con el mensaje rechazado: no es para este portal si audience no vale "portal". Decide en qué lugar del if va y explica por qué.

Sobre este laboratorio y su código: Laboratorio de WebGoat: lecciones guiadas de seguridad web con WebWolf en tu propia copia

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.