Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

JWT: algoritmo, firma, caducidad y claves

5 tareas · 40 min · Principiante

El JWT es el formato en el que viajan hoy casi todos los tokens de la federación. Es un contenedor firmado y legible: cualquiera que lo tenga puede leer lo que dice, y lo que la firma impide es cambiarlo sin que se note. Por eso la revisión no mira el token, mira al que lo recibe: qué algoritmos acepta, si comprueba la firma, cuánto deja vivir al token y de dónde saca la clave con la que lo verifica. Lees los cinco servicios de Alimentos Apulo que consumen tokens y las claves que su proveedor publica. Ningún token completo aparece en la evidencia: solo lo que cada servicio hace con ellos.

0 de 5 · 0%

Objetivo de la sala

El JWT es el formato en el que viajan hoy casi todos los tokens de la federación. Es un contenedor firmado y legible: cualquiera que lo tenga puede leer lo que dice, y lo que la firma impide es cambiarlo sin que se note. Por eso la revisión no mira el token, mira al que lo recibe: qué algoritmos acepta, si comprueba la firma, cuánto deja vivir al token y de dónde saca la clave con la que lo verifica. Lees los cinco servicios de Alimentos Apulo que consumen tokens y las claves que su proveedor publica. Ningún token completo aparece en la evidencia: solo lo que cada servicio hace con ellos.

Un JWT (RFC 7519) lleva tres partes: una cabecera que dice con qué algoritmo se firmó, un cuerpo con las afirmaciones y la firma. Las dos primeras van codificadas, no cifradas: se leen sin ninguna clave. Esto sorprende a mucha gente y no es un fallo; es el diseño. Si el contenido no debe verse, se cifra aparte o no se mete ahí.

Lo que la firma sí garantiza es que nadie modificó el contenido después de emitirlo, siempre que el que recibe el token la verifique de verdad y contra la clave correcta. Las recomendaciones de la IETF para el uso de este formato están recogidas en el RFC 8725, y las dos que más se incumplen son siempre las mismas: aceptar algoritmos que el emisor no usa, y no decidir de antemano qué algoritmo se espera.

Responde para continuar

¿Qué aporta la firma de un JWT?

Ver pista de ayuda

La codificación del cuerpo se deshace sin ninguna clave; la caducidad la hace cumplir quien recibe.

El estándar contempla un valor de algoritmo que significa «este token no lleva firma». Existe para casos en los que la integridad se garantiza por otro medio, y en una interfaz de programación que confía en el token para autorizar no tiene ningún sentido: un servicio que lo acepta está diciendo que le vale un token que nadie respalda. La corrección es declarar en la configuración la lista cerrada de algoritmos esperados.

Abre el laboratorio y mira qué acepta cada servicio.

Responde para continuar

Escribe el nombre del servicio cuya configuración admite tokens que no vienen firmados.

Ver pista de ayuda

Ejecuta `SELECT servicio, algoritmos_aceptados FROM servicios` y busca la fila con más de un valor en la lista.

Hay un escalón por debajo de aceptar algoritmos de más: no verificar nada. Ocurre cuando el código decodifica el token para leer sus afirmaciones y sigue adelante con ellas sin llamar a la comprobación de la firma. Visto desde fuera el servicio funciona igual, y por eso nadie lo descubre hasta que alguien lee la configuración o el código.

Vuelve al laboratorio.

Responde para continuar

Escribe el nombre del servicio que no comprueba la firma de los tokens que recibe.

Ver pista de ayuda

Ejecuta `SELECT servicio, verifica_firma FROM servicios` y quédate con la única fila que dice que no.

El proveedor publica sus claves de firma en un documento que cualquiera puede descargar; eso es correcto por diseño, porque son las públicas. Lo que sí se revisa es la higiene: cuántas siguen publicadas sin retirar. Una clave antigua que permanece en el documento sigue sirviendo para dar por buenos tokens firmados con ella, y la rotación no termina hasta que se retira.

Responde para continuar

¿Cuántas claves de firma siguen publicadas sin haber sido retiradas?

Ver pista de ayuda

Ejecuta `SELECT identificador, publicada, retirada FROM claves_publicadas` y cuenta las filas de la última columna que no están retiradas.

Uno de los servicios no usa las claves publicadas por el proveedor: verifica con una cadena guardada en su propia configuración, la misma que sirve para firmar y para comprobar. Lleva años sin cambiarse y sus tokens viven ocho horas. Hay que escribirlo sin exagerar: no se comprobó que nadie tuviera esa cadena, se comprobó cómo está montado.

Responde para continuar

¿Qué redacción se sostiene para ese servicio?

Ver pista de ayuda

Lo que la evidencia demuestra es cómo está configurado, no quién tiene la cadena ni qué ha pasado con ella.

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