Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Claves de firma y de sesión del framework

5 tareas · 40 min · Principiante

Cada framework guarda una clave de la que depende que nadie pueda fabricar una cookie, un enlace de restablecimiento o una sesión. Nadie la usa a mano, así que nadie la mira: se genera al crear el proyecto y se queda años. Nogal Negro te entrega su inventario de claves de framework, la comprobación de despliegue de la tienda, el servidor del boletín, su registro de incidentes y la lista de quién entra a cada entorno. Las claves son marcadores evidentes; aquí solo se decide qué hacer con ellas.

0 de 5 · 0%

Objetivo de la sala

Cada framework guarda una clave de la que depende que nadie pueda fabricar una cookie, un enlace de restablecimiento o una sesión. Nadie la usa a mano, así que nadie la mira: se genera al crear el proyecto y se queda años. Nogal Negro te entrega su inventario de claves de framework, la comprobación de despliegue de la tienda, el servidor del boletín, su registro de incidentes y la lista de quién entra a cada entorno. Las claves son marcadores evidentes; aquí solo se decide qué hacer con ellas.

En Django, SECRET_KEY firma las sesiones (salvo con el motor de sesiones que solo usa caché), los mensajes guardados en cookies, los enlaces de restablecimiento de contraseña y cualquier firma que no traiga su propia clave. Su documentación advierte que una clave conocida puede llevar a escalar privilegios e incluso a ejecutar código. En Laravel, APP_KEY cifra y firma todas las cookies, la de sesión incluida, y lo que la aplicación cifre con su servicio de cifrado. En Express, el secret del componente de sesiones firma la cookie que lleva el identificador de sesión.

Lo que una clave así no protege también importa, porque decide el alcance de un cambio de clave: al cambiarla, en Django se cierran las sesiones y dejan de valer los enlaces de restablecimiento ya enviados, pero las contraseñas no se tocan, porque su resumen no depende de esa clave.

Responde para continuar

Si la SECRET_KEY de la tienda se cambia porque se filtró, ¿qué sigue igual que antes?

Ver pista de ayuda

Separa lo que está firmado con la clave de lo que solo se guarda con un resumen propio.

Django trae una comprobación para producción, manage.py check --deploy, que revisa los ajustes de seguridad del despliegue. Considera débil una clave que tiene menos de 50 caracteres, menos de 5 caracteres distintos o empieza por el prefijo que Django pone a las claves que genera automáticamente al crear un proyecto.

Para rotar sin cerrar todas las sesiones de golpe existe SECRET_KEY_FALLBACKS: la clave nueva va en SECRET_KEY y la vieja en esa lista, que se vacía cuando ya pueden caducar las sesiones y enlaces firmados con ella. Una clave que se queda en la lista no está retirada: sigue validando firmas. Abre tienda-check-deploy.txt y cruza sus avisos con el inventario.

Responde para continuar

¿Qué identificador de aviso señala el problema de la clave anterior de la tienda? Escríbelo tal como lo imprime la comprobación.

Ver pista de ayuda

Busca el aviso que menciona la lista de claves anteriores.

La guía de OWASP para la configuración incorrecta pide entornos endurecidos igual pero con credenciales distintas. Una clave del framework es una credencial: si producción y otro entorno comparten la misma, quien lea el archivo de configuración de ese otro entorno puede fabricar cookies que producción acepta como suyas y, en Laravel, descifrar lo que producción cifró.

El inventario no muestra las claves, solo una huella de cada una: dos huellas iguales significan la misma clave. Compara las huellas del portal de autores y lee después accesos-entornos.txt para saber quién puede leer ese archivo.

Responde para continuar

¿Qué entorno del portal de autores comparte la clave de cifrado con producción? Escribe su nombre tal como aparece en el inventario.

Ver pista de ayuda

Busca dos filas de autores con la misma huella.

Los tres frameworks permiten tener varias claves a la vez para que una rotación planificada no cierre todas las sesiones: Django con SECRET_KEY_FALLBACKS, Laravel con APP_PREVIOUS_KEYS y el componente de sesiones de Express con una lista de secretos en la que el primero firma y todos se aceptan al comprobar. Las tres listas se pensaron para lo mismo: retirar con calma una clave que nadie más conoce.

Con una clave filtrada la lógica se invierte. Mientras siga en la lista, quien la tenga puede producir cookies que el servidor da por firmadas por él, por mucho que haya una clave nueva delante. Lee registro-incidentes.txt y después la lista de secretos de boletin-servidor.js.

Responde para continuar

¿Qué secreto del boletín se sabe filtrado y el servidor sigue aceptando al comprobar firmas? Escríbelo tal como aparece.

Ver pista de ayuda

El incidente de agosto cuenta qué se hizo con la clave publicada.

La clave de producción del portal de autores la puede leer un proveedor externo desde preproducción. No hay indicio de abuso, pero ya no se puede tratar como secreta. La lista de claves anteriores es la herramienta de la rotación tranquila y aquí juega en contra, porque mantendría válida justo la clave que hay que dejar de aceptar. El costo de cerrar sesiones se asume. Si hay datos cifrados con la clave vieja, se descifran y se vuelven a cifrar en una tarea controlada antes de destruirla, sin dejarla puesta en la aplicación.

Responde para continuar

¿Cómo se rota la APP_KEY de producción del portal de autores?

Ver pista de ayuda

La lista de anteriores sirve para claves que nadie más conoce.

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