🇰🇷 한글 설명
ApostropheCMS 4.28.0 이하에서 패스워드 리셋 엔드포인트의 타이밍 사이드-채널 취약점으로 인해 유효한 사용자 존재 여부를 응답 시간 차이를 통해 추측할 수 있습니다. 사용자를 찾지 못할 때는 2초의 고정 지연 후 반환하지만, 유효한 사용자를 찾으면 MongoDB 업데이트와 SMTP 이메일 전송으로 인해 응답 시간이 달라져 자동화된 계정 열거가 가능합니다. 레이트 리미팅이 없어 대규모 신용카드 충전(credential stuffing) 공격에 악용될 수 있습니다.
💡 쉬운 설명
ApostropheCMS의 비밀번호 재설정 기능에서 응답 속도 차이로 어떤 사용자 계정이 실제로 존재하는지 알아낼 수 있습니다. 이 정보를 이용해 공격자가 많은 계정을 자동으로 찾아낸 뒤 해킹 시도를 할 수 있습니다.
🇺🇸 원문 (English)
ApostropheCMS is an open-source Node.js content management system. Versions 4.28.0 and prior contain a timing side-channel vulnerability in the password reset endpoint (/api/v1/@apostrophecms/login/reset-request) that allows unauthenticated username and email enumeration. When a user is not found, the handler returns after a fixed 2-second artificial delay, but when a valid user is found, it performs a MongoDB update and SMTP email send with no equivalent delay normalization, producing measurably different response times. The endpoint also accepts both username and email via an $or query, and has no rate limiting as the existing checkLoginAttempts throttle only applies to the login flow. This enables automated enumeration of valid accounts for use in credential stuffing or targeted phishing. Only instances that have explicitly enabled the passwordReset option are affected, as it defaults to false. This issue has been fixed in version 4.29.0.
📍 영향받는 시스템
ApostropheCMS 4.28.0 이하 (passwordReset 옵션 활성화된 경우)
⚔️ 공격 벡터
POST /api/v1/@apostrophecms/login/reset-request 엔드포인트에 대량의 username/email 전송 후 응답 시간 측정으로 유효한 계정 열거
🛡️ 대응 방법
ApostropheCMS를 4.29.0 이상으로 업그레이드 또는 passwordReset 옵션 비활성화
🔧 검증 코드
패키지가 설치되어 있으면 버전 번호 확인 후 4.28.0 이하면 취약, 4.29.0 이상이면 안전
npm list @apostrophecms/cms 2>/dev/null | grep -E '@apostrophecms|version'