
研究者: Daniil Khomichenok, Alexander Klimenko
影響を受けるバージョン < 5.12.4 ( https://github.com/Alinto/sogo/releases/tag/SOGo-5.12.4 )
日付: 01.10.2025
「ユーザー名を記憶」 機能が有効な場合、base64 エンコードされたフィールドがブラウザの Cookie に追加されます。
この値は、/SOGo/connect エンドポイントへの POST リクエストの "userName" パラメータから取得されます。
サーバーの応答には、Cookie を設定する base64 エンコードされた XSS ペイロードが含まれます:
Set-Cookie: SOGoLogin=dGVzdDIyMkBxYXRlc3Qub2YuYnk8L3NjcmlwdD48c2NyaXB0PmFsZXJ0KCcxMjMnKTwvc2NyaXB0Pg%3D%3D; expires=Sun, 02-Nov-2025 09:58:23 GMT;
"userName" パラメータの POST リクエストに以下の値を追加します:
これには JavaScript インジェクション が含まれており、ユーザーが認証ページに再訪すると 実行 され、ユーザーのブラウザの "SOGoLogin" Cookie に保存 されます。
インジェクションを含む認証ページのコード:
<script type="text/javascript">
var cookieUsername = "[email protected]</script><script>alert('123')</script>";
var language = 'English';
var loginHint = ''
</script>
XSS インジェクションをパラメータ値として受け入れる、ログイン記憶の Set-Cookie のコード:
if (rememberLogin)
[response addCookie: [self _cookieWithUsername: [params objectForKey: @"userName"]]];
else
[response addCookie: [self _cookieWithUsername: nil]];
修正: https://github.com/Alinto/sogo/commit/9e20190fad1a437f7e1307f0adcfe19a8d45184c