- Se descapó
- 3 de agosto de 2026 a las 4:31 UTC
- Autor
- Kamo
- Compromit
- e5efc19
Completa el MFA. El núcleo aterrizó en la biblioteca compartida de kamo; este es el alambre que se convierte configuración almacenada en una puerta real. La puerta es pequeña porque el inicio de sesión ya tenía la forma correcta: crea el *** sesión y se lo entrega al cliente SOLAMENTE como una clave de una sola vez en el cuerpo de respuesta. La cookie está en el inicio de sesión. Así que todo el mecanismo es retener la OTK hasta el el segundo factor está probado. Una sesión para la que nadie celebra una OTK es inalcanzable, que significa que la creación de sesión en sí misma no necesitaba cirugía alguna. MfaChallengeService sostiene el ***Id bajo una ficha opaca de un solo uso, de 5 minutos. El cliente nunca recibe el identificador de la sesión, y el símbolo no vale nada sin un código. Corto a propósito: un estado medio autenticado sobrevive a un compromiso de contraseña. POST /api/security/mfa/challenge completa el login, lanzando el OTK para el El cliente reanuda exactamente el flujo que habría tenido sin MFA. Un código equivocado no libera nada y deliberadamente NO quema el desafío, porque forzar un usuario de vuelta a través de la contraseña sobre un error tipo es como MFA se apaga. El El propio cierre de la matrícula cuenta esos fracasos. Un éxito consume el reto así no se puede volver a jugar. Los códigos de recuperación lo completan también, y nunca se prueban también como un TOTP. Los endpoints de inscripción (/rollo, /confirm, /status) requieren una sesión. factor es una acción autenticada en su propia cuenta. /desafión deliberadamente lo hace no, porque su llamante está a mitad de camino por definición. INERT TODAY: La puerta se dispara sólo ha confirmado a Factor y nadie está inscrito, así que la ruta de inicio de sesión existente es porte-idéntica. Ese es el punto que esto puede desplegarse. antes de que cualquier cliente lo apoye. El endpoint gatechet atcogió a mis propios tres manejadores de inscripción como desprotegidos. Ellos son custodiados, a través de un usuarioIdFrom Ayudante de la misión no puede seguir el escaneo de un method-protodo, Así que la solución fue enseñar GUARD que ayudante en lugar de basarlos. Yo también documentada la limitación inversa expuesto el mismo ejercicio: completoChallenge borrar el escaneo sólo porque resulta que toca kSessionService.