🇰🇷 한글 설명
Parse Server의 비밀번호 재설정 메커니즘에서 재설정 토큰의 1회용 보장이 이루어지지 않는 취약점이 발견되었습니다. 공격자가 탈취한 토큰을 사용하여 사용자와 동시에 재설정 요청을 보낼 경우, 사용자의 의도와 달리 공격자가 설정한 비밀번호가 적용될 수 있습니다.
💡 쉬운 설명
비밀번호를 바꿀 때 사용하는 일회용 번호가 여러 번 사용될 수 있는 문제입니다. 해커가 이 번호를 가로채서 사용자보다 먼저 혹은 동시에 사용하면, 사용자가 모르는 사이에 비밀번호를 바꿔버릴 수 있습니다.
🇺🇸 원문 (English)
Parse Server is an open source backend that can be deployed to any infrastructure that can run Node.js. Prior to 9.6.0-alpha.28 and 8.6.48, the password reset mechanism does not enforce single-use guarantees for reset tokens. When a user requests a password reset, the generated token can be consumed by multiple concurrent requests within a short time window. An attacker who has intercepted a password reset token can race the legitimate user's password reset request, causing both requests to succeed. This may result in the legitimate user believing their password was changed successfully while the attacker's password takes effect instead. All Parse Server deployments that use the password reset feature are affected. Starting in versions 9.6.0-alpha.28 and 8.6.48, the password reset token is now atomically validated and consumed as part of the password update operation. The database query that updates the password includes the reset token as a condition, ensuring that only one concurrent request can successfully consume the token. Subsequent requests using the same token will fail because the token has already been cleared. There is no known workaround other than upgrading.
📍 영향받는 시스템
Parse Server 9.6.0-alpha.28 및 8.6.48 미만 버전
⚔️ 공격 벡터
탈취한 비밀번호 재설정 토큰을 이용한 경합 조건(Race Condition) 공격
🛡️ 대응 방법
Parse Server를 9.6.0-alpha.28 또는 8.6.48 이상의 버전으로 업그레이드
🔧 검증 코드
출력된 parse-server의 버전이 9.6.0-alpha.28 또는 8.6.48보다 낮은지 확인