
Límite de tasa TOTP con alcance de sesión permite intentos de verificación repetidos
Las versiones de FileRise anteriores a la 3.23.0 almacenaban los intentos fallidos de verificación TOTP en el estado de sesión de PHP. El contador limitaba los intentos dentro de una sesión, pero no persistía entre sesiones recién creadas.
Un atacante que ya posee la credencial primaria válida de una cuenta objetivo podía reiniciar el flujo de inicio de sesión, recibir una nueva sesión de inicio de sesión pendiente y restaurar el margen de intentos TOTP. Repetir este proceso permitía continuar adivinando el TOTP en línea más allá del límite previsto de cinco intentos.
El flujo de verificación TOTP mantenía su contador de fallos en $_SESSION. Tras cinco envíos fallidos, los intentos posteriores en esa sesión devolvían HTTP 429.
Sin embargo, completar con éxito la autenticación primaria en una nueva sesión creaba un nuevo estado de inicio de sesión pendiente con un nuevo contador de fallos TOTP. Por lo tanto, los fallos TOTP de la cuenta anterior no se trasladaban.
El problema también afectaba a otro controlador TOTP de inicio de sesión pendiente que no aplicaba el mismo límite duradero. En consecuencia, la corrección se aplicó de forma centralizada en todas las rutas de verificación TOTP de inicio de sesión pendiente.
Este problema se clasifica como CWE-307: Restricción inadecuada de intentos excesivos de autenticación.
La explotación requiere poseer la credencial primaria válida de la cuenta objetivo, como una contraseña obtenida mediante reutilización de credenciales, phishing u otro compromiso.
La vulnerabilidad no divulga credenciales ni omite TOTP de inmediato. Permite continuar adivinando el TOTP de forma automatizada sin un límite duradero a nivel de cuenta. Una conjetura exitosa completa la autenticación con los privilegios de la cuenta afectada, lo que potencialmente incluye privilegios de administrador.
Las cuentas sin TOTP habilitado no se ven afectadas por este problema específico de límite de tasa del segundo factor.
FileRise 3.23.0 introduce una limitación persistente centralizada de intentos TOTP:
Las cuentas existentes, los secretos TOTP, las sesiones, las instalaciones de Docker y la configuración de despliegue no requieren migración.
Los usuarios deben actualizar a FileRise 3.23.0 o posterior.
Gracias por la divulgación responsable y los pasos de reproducción detallados.
Revisamos el flujo de verificación TOTP y confirmamos el problema subyacente. Los envíos fallidos de TOTP estaban limitados únicamente por un contador de sesión de PHP en el endpoint principal de verificación del frontend. Por lo tanto, repetir el paso exitoso de autenticación primaria en una sesión nueva podía restaurar el presupuesto de intentos del segundo factor. Nuestra revisión también identificó otro controlador TOTP de inicio de sesión pendiente que no aplicaba el mismo contador de intentos, por lo que la corrección se ha aplicado de forma centralizada en las rutas de verificación en lugar de solo en el endpoint reportado.
La corrección se ha implementado para FileRise v3.23.0:
El límite de la cuenta es de cinco intentos en una ventana de 15 minutos. El límite a nivel de origen es intencionalmente superior, de 50 intentos en la misma ventana, para reducir los falsos positivos en redes compartidas. Las cuentas existentes, los secretos TOTP, las sesiones, las instalaciones de Docker y la configuración de despliegue no requieren migración.
Crédito: Pervin Zahidli (@ech0void ) Ref: https://github.com/error311/FileRise/security/advisories/GHSA-4hfj-6478-5cv7