🇰🇷 한글 설명
Parse Server의 특정 버전에서 인증된 사용자가 세션 생성 시 서버가 생성하는 필드(sessionToken, expiresAt, createdWith)를 임의로 덮어쓸 수 있는 취약점이 발견되었습니다. 이를 통해 공격자는 세션 만료 정책을 우회하거나 예측 가능한 세션 토큰을 설정하여 보안을 무력화할 수 있습니다.
💡 쉬운 설명
로그인 정보를 만드는 과정에서 사용자가 만료 날짜를 마음대로 조작할 수 있는 문제입니다. 이를 이용하면 로그아웃되지 않고 영구적으로 접속을 유지하거나 보안을 뚫을 수 있습니다.
🇺🇸 원문 (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.17 and 8.6.42, an authenticated user can overwrite server-generated session fields (`sessionToken`, `expiresAt`, `createdWith`) when creating a session object via `POST /classes/_Session`. This allows bypassing the server's session expiration policy by setting an arbitrary far-future expiration date. It also allows setting a predictable session token value. Starting in version 9.6.0-alpha.17 and 8.6.42, the session creation endpoint filters out server-generated fields from user-supplied data, preventing them from being overwritten. As a workaround, add a `beforeSave` trigger on the `_Session` class to validate and reject or strip any user-supplied values for `sessionToken`, `expiresAt`, and `createdWith`.
📍 영향받는 시스템
Parse Server 9.6.0-alpha.17 및 8.6.42 미만 버전
⚔️ 공격 벡터
인증된 사용자가 POST /classes/_Session 엔드포인트를 통해 조작된 세션 필드 값을 전송
🛡️ 대응 방법
Parse Server를 9.6.0-alpha.17 또는 8.6.42 이상 버전으로 업데이트하거나, _Session 클래스에 beforeSave 트리거를 추가하여 필드 값을 검증 및 제거
🔧 검증 코드
출력된 결과에 취약한 버전 범위가 포함되어 있다면 해당 버전이 설치된 상태입니다.
npm list parse-server | grep -E 'parse-server@([0-8]\.[0-6]\.[0-4]{2,}|9\.6\.0-alpha\.1[7-9])'