server Side Request Forgery(SSRF)


what is:

  • خلينا نقول إن عندك تطبيق أو موقع بيطلب منك تدخل رابط URL عشان يعمل حاجة معينة، زي مثلاً إنك تدخل رابط لصفحتك الشخصية على LinkedIn. المفروض إنك تحط رابط زي https://linkedin.com/username، لكن المشكلة بتحصل لما الهاكر يستغل النقطة دي ويدخل رابط ضار بدل ما يدخل رابط صحيح

  • الهاكر بيستغل السيرفر اللي بيشغل الـAPI، وبيطلب منه إنه يفتح مواقع معينة أو يتصل بعناوين مش مفروض يتصل بيها


Example:

  • الوصول لملفات السيرفر نفسه:

    • لو الـAPI بيقبل روابط من غير ما يتحقق منها بشكل كافي، الهاكر ممكن يدخل رابط بيطلب من السيرفر يجيب بيانات من ملف موجود على الجهاز اللي بيشغل الموقع نفسه.

    • مثلاً: بدل ما الهاكر يحط رابط LinkedIn، ممكن يحط رابط زي http://localhost/api/user-data (localhost معناه السيرفر نفسه). هنا السيرفر بيحاول يجيب الملف اللي في العنوان ده، ولو مفيش حماية كافية، السيرفر فعلاً يقدر يوصل للبيانات ويرجعها للهاكر!

  • استغلال السيرفر لتحميل فيروسات أو برامج تجسس:

    • الهاكر ممكن يحط رابط لموقع ضار. السيرفر لما يروح يفتح الرابط ده، ممكن يحمل ملفات ضارة أو فيروسات من غير ما حد ياخد باله.

    • يعني: بدل ما الهاكر يحط رابط عادي، يحط رابط لموقع بيحتوي على برامج تجسس، وبكده الهاكر يستغل السيرفر نفسه عشان ينفذ الهجوم.

  • إيه هي الخطورة من هجوم SSRF؟

    • اختراق بيانات حساسة: الهاكر يقدر يطلب ملفات أو بيانات من السيرفر اللي بتكون مخفية أو محمية، زي بيانات المستخدمين أو أسرار تانية.

      • تخيل إن في API بيطلب منك تدخل رابط لصورة مثلاً. الهاكر بدل ما يحط رابط لصورة، يحط رابط بيشير لملف داخلي في السيرفر نفسه (localhost). لو الـAPI مش محمي، السيرفر هيروح يفتح الملف الداخلي ويرجع البيانات للهاكر.

    • تحميل برامج ضارة: السيرفر ممكن يحمل برامج ضارة أو فيروسات من مواقع ضارة بدون ما يكتشف الحماية أي مشكلة.

      • لو الـAPI بيقبل روابط ملفات عشان يحملها، الهاكر ممكن يحط رابط لموقع فيه فيروس. السيرفر هيروح يفتح الرابط ويحمل الفيروس، وبكده الموقع أو التطبيق نفسه يصاب

    • تنفيذ أوامر: الهاكر في بعض الأحيان يقدر يستخدم الهجوم ده عشان يخلي السيرفر ينفذ أوامر معينة، زي إنه يفتح منافذ تانية للهاكر أو يرسل بيانات لمكان تاني.


Prevention:

  • التحقق من الروابط (Validation):

    • لما المستخدم يدخل رابط URL، ما تصدقش الرابط اللي دخله بشكل أعمى. لازم تتحقق إنه رابط سليم وآمن.

    • يعني مثلاً: لو المستخدم مطلوب منه يحط رابط LinkedIn، لازم تتأكد إن الرابط فعلاً يبدأ بـ https://linkedin.com/ وما يكونش أي حاجة تانية.

  • تنقية المدخلات (Sanitization):

    • قبل ما السيرفر يعالج أي رابط، لازم تشيل أو تمنع أي مدخلات مش متوافقة مع اللي التطبيق محتاجه. يعني لو الرابط اللي دخله المستخدم مش بيمشي مع الشروط بتاعتك، ترفضه فورًا.

  • تحديد المواقع المسموح بزيارتها:

    • لو التطبيق بيسمح للمستخدم إنه يدخل روابط لمواقع، لازم تحدد مسبقًا المواقع اللي السيرفر يقدر يزورها. أي رابط خارج القائمة المسموحة يتم رفضه.

  • اختبار الحماية (Testing):

    • لازم تختبر الـAPI بتاعك بشكل مستمر باستخدام أدوات تحاكي الهجمات، زي fuzzing اللي بتجرب مدخلات غريبة أو ضارة، عشان تتأكد إن التطبيق بيقدر يتعامل مع أي هجوم بشكل صحيح.


scenarios:

Last updated