🇰🇷 한글 설명
Rocket.Chat의 SAML 연동에서 인바운드 LogoutRequest 메시지의 서명을 검증하지 않는 취약점입니다. 공격자는 대상 사용자의 SAML NameID(대개 이메일 주소)만 알면 서명되지 않은 로그아웃 요청을 보내 피해자의 세션을 즉시 종료시킬 수 있습니다. 인증이나 피해자의 상호작용이 필요 없어 반복 및 자동화가 가능합니다.
💡 쉬운 설명
공격자가 사용자의 이메일 주소만 알면 그 사용자를 채팅 서비스에서 강제로 로그아웃시킬 수 있습니다. 이를 반복하면 SAML 로그인 사용자 전체가 서비스를 사용할 수 없게 됩니다.
🇺🇸 원문 (English)
Rocket.Chat is an open-source, secure, fully customizable communications platform. Prior to 8.5.0, 8.4.1, 8.3.3, 8.2.3, 8.1.4, 8.0.5, 7.13.7, and 7.10.11, Rocket.Chat's SAML integration does not verify the signature on inbound LogoutRequest messages. An unauthenticated remote attacker who knows a target user's SAML NameID - which major identity providers (Okta, Google Workspace, Microsoft Entra ID, JumpCloud) expose as the user's email address - can craft a valid-looking unsigned LogoutRequest and submit it to the SP logout endpoint. The server processes it as legitimate, immediately destroying the victim's session. Because the attack requires no authentication and no interaction from the victim, it can be repeated in a loop against individual users or scripted across many accounts, effectively rendering the Rocket.Chat instance unusable for SAML-authenticated users. This vulnerability is fixed in 8.5.0, 8.4.1, 8.3.3, 8.2.3, 8.1.4, 8.0.5, 7.13.7, and 7.10.11.
📍 영향받는 시스템
Rocket.Chat 8.5.0 미만, 8.4.1 미만, 8.3.3 미만, 8.2.3 미만, 8.1.4 미만, 8.0.5 미만, 7.13.7 미만, 7.10.11 미만 (SAML 연동 사용 환경)
⚔️ 공격 벡터
인증 없이 대상 사용자의 SAML NameID를 이용해 서명되지 않은 LogoutRequest를 SP 로그아웃 엔드포인트에 전송하여 세션 강제 종료
🛡️ 대응 방법
Rocket.Chat을 8.5.0, 8.4.1, 8.3.3, 8.2.3, 8.1.4, 8.0.5, 7.13.7, 7.10.11 등 해당 브랜치의 패치 버전으로 업그레이드
🔧 검증 코드
출력된 버전이 8.5.0 이상(또는 해당 브랜치의 패치 버전 이상)이면 패치된 것이며, 그보다 낮거나 버전을 찾지 못하면 취약할 수 있으므로 설치 방식에 맞게 버전을 직접 확인해야 합니다.
docker exec $(docker ps -qf ancestor=rocket.chat) node -p "require('/app/bundle/package.json').version" 2>/dev/null || grep -m1 '"version"' /app/bundle/package.json 2>/dev/null || echo 'version not found'