
세션 범위 TOTP 속도 제한은 반복적인 검증 시도를 허용합니다
FileRise 3.23.0 이전 버전은 실패한 TOTP 검증 시도를 PHP 세션 상태에 저장했습니다. 이 카운터는 하나의 세션 내에서 시도 횟수를 제한했지만, 새로 생성된 세션 간에는 유지되지 않았습니다.
대상 계정의 유효한 기본 자격 증명을 이미 보유한 공격자는 로그인 워크플로를 재시작하여 새로운 대기 중 로그인 세션을 받고 TOTP 시도 허용량을 복원할 수 있었습니다. 이 과정을 반복하면 의도된 5회 시도 제한을 넘어 지속적인 온라인 TOTP 추측이 가능했습니다.
TOTP 검증 흐름은 실패 카운터를 $_SESSION에 유지했습니다. 5회 실패 제출 후, 해당 세션에서 추가 시도는 HTTP 429를 반환했습니다.
그러나 새 세션에서 기본 인증을 성공적으로 완료하면 새로운 TOTP 실패 카운터를 가진 새로운 대기 중 로그인 상태가 생성되었습니다. 따라서 이전 계정의 TOTP 실패는 이월되지 않았습니다.
이 문제는 동일한 지속적 제한을 적용하지 않은 다른 대기 중 로그인 TOTP 핸들러에도 영향을 미쳤습니다. 결과적으로 수정 사항은 모든 대기 중 로그인 TOTP 검증 경로에 중앙 집중식으로 적용되었습니다.
이 문제는 CWE-307: 과도한 인증 시도에 대한 부적절한 제한으로 분류됩니다.
악용하려면 자격 증명 재사용, 피싱 또는 기타 침해를 통해 획득한 비밀번호와 같이 대상 계정의 유효한 기본 자격 증명을 보유해야 합니다.
이 취약점은 자격 증명을 노출하거나 TOTP를 즉시 우회하지 않습니다. 지속적인 계정 전체 제한 없이 자동화된 TOTP 추측을 계속할 수 있게 합니다. 추측이 성공하면 영향을 받는 계정의 권한(잠재적으로 관리자 권한 포함)으로 인증이 완료됩니다.
TOTP가 활성화되지 않은 계정은 이 특정 2차 인증 요소 속도 제한 문제의 영향을 받지 않습니다.
FileRise 3.23.0은 중앙 집중식 지속적 TOTP 시도 제한을 도입합니다:
기존 계정, TOTP 시크릿, 세션, Docker 설치 및 배포 구성에는 마이그레이션이 필요하지 않습니다.
사용자는 FileRise 3.23.0 이상으로 업그레이드해야 합니다.
책임 있는 공개와 자세한 재현 단계에 감사드립니다.
TOTP 검증 워크플로를 검토하여 근본적인 문제를 확인했습니다. 실패한 TOTP 제출은 기본 프런트엔드 검증 엔드포인트의 PHP 세션 카운터에 의해서만 제한되었습니다. 따라서 새 세션에서 성공적인 기본 인증 단계를 반복하면 2차 인증 요소 시도 예산을 복원할 수 있었습니다. 또한 검토 과정에서 동일한 시도 카운터를 적용하지 않은 다른 대기 중 로그인 TOTP 핸들러를 확인했으며, 따라서 수정 사항은 보고된 엔드포인트뿐만 아니라 검증 경로 전반에 중앙 집중식으로 적용되었습니다.
수정 사항은 FileRise v3.23.0에 구현되었습니다:
계정 제한은 15분 창에서 5회 시도입니다. 소스 전체 제한은 공유 네트워크의 오탐을 줄이기 위해 의도적으로 더 높은 동일 창에서 50회 시도입니다. 기존 계정, TOTP 시크릿, 세션, Docker 설치 및 배포 구성에는 마이그레이션이 필요하지 않습니다.
Credit: Pervin Zahidli (@ech0void ) Ref : https://github.com/error311/FileRise/security/advisories/GHSA-4hfj-6478-5cv7