Códigos cortos de una sola vez ya no se pueden adivinar sin límite

FixSecurityService
Se descapó
17 de septiembre de 2026 a las 4:48 UTC
Autor
Kamo
Compromit
357d3a0

Cada código corto de los correos de la plataforma o textos fue verificado sin conteo: - POST /api/recover/email/verify-code tomó el código de restablecimiento de 8hex-character ALONE y lo emparecí contra cada uno de los la cuenta está pendiente de restablecimiento, durante 30 minutos. Un partido en cualquier caso se convirtió en una sesión de recuperación para esa cuenta. - POST /api/recover/sms/verificar: un código de texto de 6 dígitos para un número conocido, 10 minutos, sin cuenta. - POST /api/recuperación/preguntas/verificar y /seed/verificar: respuestas de seguridad (un color, una ciudad) y frases de semillas, sin contar. - POST /api/security/verify-email .userId, code.: un código de 6 dígitos, 24 horas, sin sesión. El primer éxito vaciar un llave de auto-login en la cuenta. - POST /api/account/phone/verify: un código de 6 dígitos que prueba un nuevo número de teléfono de recuperación, sin contar. - POST ************* tenía un límite de cinco intentos que nunca entró en vigor. Escribió el conde. y luego lanzado, la regla transaccional por defecto rodó la devolución, y la transacción del controlador fue Marcados de retroceso. CodeAttemptLimiter (Redis, ventanas fijas, contado ANTES de la comparación para que las conjeturas paralelas no puedan correr más allá de ella): - 5 intentos por hora por asunto: la cuenta, la dirección mecanografiada, el número de teléfono o el código. El intento de que utiliza el quinto gasta el código (filas de reinicio marcadas usadas, códigos de texto consumidos, códigos de registro invalidados, código de cambio de teléfono consumido). Un éxito despeja el tema. - 30 intentos por hora por dirección pública de clientes, a través de todos estos endpoints. Salta privada se salta, desde entonces Una dirección de poder representaría a todos. - 50 intentos de reinicio solo código por 10 minutos, de toda la plataforma. Las negativas son 429 con Retry-After y repitoDespués de segundos en el cuerpo. El limitador falla en un corte de Redis, como LoginThrottleService y VerificationResendRateLimiter. Todas las comparaciones son ahora de tiempo constante. El código de restablecimiento está vinculado a una cuenta cuando la solicitud nombra uno: verificar-código acepta el correo electrónico (la dirección mecanografiada en la página de reinicio, resolvió la forma en que /email/iniciar la resuelve) y comprueba sólo los reinicias de esa cuenta. Una incógnita La dirección se cuenta exactamente como una conocida. La forma de código-sólo todavía funciona para una página de inicio de sesión que no se ha implementado Sin embargo, (kamo-login envía la dirección en el mismo conjunto de cambios), con cargo al presupuesto de toda la plataforma. Métodos que escriben lo que un código equivocado gastado ahora declara noRollbackFor. Los códigos de recuperación del MFA ya estaban atrasados LoginThrottleGate y son 60 bits. La comprobación telefónica de Vonage impone su propio límite de intento. Pruebas: - CodeAttemptLimiterTest: ventanas, el quinto marcado último, dirección y presupuestos de la plataforma, llaves desgarrados, fracasado. - RecuperaciónCodeAttemptsTest: unión de cuenta, gasto en la quinta, negativa después, dirección desconocida contada, código solo todavía funciona y se agota, SMS, respuestas de seguridad. - ******************* - CodeAttemptWritesCommitTest: cada método a través de una transacción realEl interceptor comete su negativa. - RecuperaciónAttemptsWireTest: dirección e IP llegar al servicio; 429 asignación en los tres controladores. Doce mutantes (cada límite, gasto, vinculante, presupuesto y noRollbackPara eliminado) cada uno falla una prueba.

Todos los cambios

Como lo que ves enviaste?

Todo llega a su espacio de trabajo por sí solo. Comience en el plan gratuito y lea esta página de nuevo en un mes.

Arranzar gratis para siempreVer Precios