Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Cifrado autenticado frente a cifrado solo

5 tareas · 40 min · Principiante

«Va cifrado» es una de las frases que más hallazgos esconde en una revisión. Cifrar impide leer, pero no impide cambiar, y una aplicación que confía en lo que descifra sin comprobar que nadie lo tocó acaba decidiendo con datos que escribió otro. Nómina Hatogrande guarda el rol de cada persona en una cookie cifrada, y una nómina quedó aprobada por alguien que no podía aprobarla. Te entregan el código de la cookie, el de las cuentas bancarias y el registro de ese día.

0 de 5 · 0%

Objetivo de la sala

«Va cifrado» es una de las frases que más hallazgos esconde en una revisión. Cifrar impide leer, pero no impide cambiar, y una aplicación que confía en lo que descifra sin comprobar que nadie lo tocó acaba decidiendo con datos que escribió otro. Nómina Hatogrande guarda el rol de cada persona en una cookie cifrada, y una nómina quedó aprobada por alguien que no podía aprobarla. Te entregan el código de la cookie, el de las cuentas bancarias y el registro de ese día.

La confidencialidad responde a «¿quién puede leerlo?»; la integridad, a «¿quién puede cambiarlo sin que se note?». Un cifrado solo, como AES en modo CBC o CTR sin nada más, da lo primero y no lo segundo. En CTR, cambiar un bit del texto cifrado cambia exactamente ese bit del texto claro. En CBC, cambiar un byte del bloque anterior (o del vector de inicialización, para el primer bloque) cambia de forma controlada el mismo byte del bloque siguiente. Quien conoce o intuye una parte del texto claro puede alterarla sin conocer la clave.

El cifrado autenticado añade una etiqueta que se calcula con la clave sobre todo el mensaje. Al descifrar, la etiqueta se comprueba primero y, si no coincide, no se devuelve nada. Los modos AES-GCM y ChaCha20-Poly1305 lo hacen en una sola operación; con un cifrado solo, la alternativa es cifrar y después calcular un HMAC con otra clave sobre el texto cifrado, comprobándolo antes de descifrar.

Responde para continuar

Una cookie va cifrada con una clave que solo conoce el servidor y un vector nuevo en cada cookie, sin etiqueta ni HMAC. ¿Qué garantiza?

Ver pista de ayuda

Separa las dos preguntas: quién puede leer y quién puede cambiar sin que se note.

Abre el laboratorio y lee CookiePreferencias.php junto a CuentaBancaria.php. Los dos cifran con AES de 256 bits, los dos usan un vector o nonce nuevo cada vez, y en un vistazo rápido parecen equivalentes. Fíjate en el nombre del cifrado que recibe cada llamada y en qué devuelve cada uno además del texto cifrado.

Responde para continuar

¿Qué cifrado y modo usa la cookie de preferencias? Escríbelo tal como aparece en el código.

Ver pista de ayuda

Es el segundo argumento de la llamada que cifra en el método sellar.

Cuando el descifrado de un cifrado solo falla, la causa suele ser el relleno del último bloque. Si la aplicación responde distinto según el relleno sea válido o no —un código de estado, un mensaje, un tiempo—, cualquiera que pueda enviarle cookies modificadas recibe una respuesta de sí o no por cada intento. Con suficientes intentos, esa diferencia basta para recuperar el texto claro sin conocer la clave. No hace falta reproducirlo para reconocerlo: en un registro se ve como miles de fallos de descifrado desde un solo origen, mezclados con otro tipo de rechazo.

Lee MiddlewarePreferencias.php y después resumen-por-minuto.txt.

Responde para continuar

¿Qué código de estado HTTP devuelve la aplicación cuando el descifrado de la cookie falla por el relleno? Escribe solo el número.

Ver pista de ayuda

Busca el bloque catch del middleware.

El middleware toma el rol de la cookie para decidir quién puede aprobar una nómina. Eso ya es un problema de diseño —la autorización depende de un dato que guarda el cliente—, y deja de ser teórico cuando ese dato se puede alterar. El controlador registra en cada aprobación el rol que trajo la cookie y el que tiene la base: busca la línea donde no coinciden.

Responde para continuar

¿Qué cuenta aprobó una nómina con un rol en la cookie distinto del que tiene en la base? Escríbela tal como aparece en el registro.

Ver pista de ayuda

Compara rol_cookie y rol_base en cada línea de aprobación.

El equipo cree que la clave no se filtró, y probablemente tiene razón: el problema no necesitaba la clave. Lo que falló es el diseño de la cookie y lo que la aplicación hace con ella. MITRE lo recoge como CWE-353, falta de comprobación de integridad, y la decisión de autorizar con un dato del cliente se clasifica aparte, como control de acceso roto.

Responde para continuar

¿Qué conjunto de cambios corrige la causa y no solo el síntoma?

Ver pista de ayuda

El cambio que importa más ni siquiera es criptográfico.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad