Skip to content

Latest commit

 

History

History
197 lines (99 loc) · 13.6 KB

File metadata and controls

197 lines (99 loc) · 13.6 KB

🌐 API6:2023 - Unrestricted Access to Sensitive Business Flows


📌 1. التعريف (Definition)

تحدث هذه الثغرة عندما يترك الـ API "عملية تجارية حساسة" (Business Flow) متاحة للاستخدام المفرط أو الآلي دون قيود تمنع إساءة الاستخدام. هنا المخترق لا يسرق بيانات، بل يستغل منطق النظام لتحقيق مكاسب شخصية أو الإضرار بالشركة.


🧠 Real-World Analogy (المثل الواقعي)

  1. تخيل أنك فتحت باب التسجيل لدورة تدريبية مجانية لـ 20 شخصاً فقط. قام شخص واحد باستخدام "بوت" وملأ الـ 20 مقعداً بأسماء وهمية في جزء من الثانية.
  • النتيجة: الدورة "محجوزة بالكامل" تقنياً، لكن القاعة ستكون فارغة واقعياً، وأنت خسرت فرصة تدريب أشخاص حقيقيين.

  • الثغرة: هي عدم وجود قانون يقول: "يُسمح لكل رقم هاتف أو IP بالمشاركة مرة واحدة كل 24 ساعة".


🧩 2. أنواع الثغرة (API6 Types)

1. استغلال المخزون والندرة (Inventory Exhaustion)

هذا النوع يهدف إلى منع الآخرين من الوصول للمنتج أو الخدمة دون قصد شرائها فعلياً.

  • السيناريو: في المواقع التي تبيع تذاكر أو منتجات محدودة، يقوم المخترق بإضافة كل الكمية المتاحة إلى "سلة التسوق" (Add to Cart).

  • الهدف: النظام يقوم بحجز هذه المنتجات مؤقتاً (مثلاً لمدة 15 دقيقة)، مما يجعل الموقع يظهر للزبائن الحقيقيين كأنه "نفد من المخزون" (Sold Out).

  • النتيجة: شلل تام في المبيعات وضرر تجاري هائل.

2. التلاعب بالسمعة والمصداقية (Reputation & Social Proof Manipulation)

يضرب "صورة" البراند.

  • السيناريو: استخدام "بوتات" لعمل إعجابات (Likes)، تقييمات (Reviews)، أو تعليقات بشكل آلي ومكثف.

  • الهدف: رفع تقييم منتج رديء أو تدمير تقييم منافس عبر إغراق الصفحة بآلاف التقييمات السلبية في ثوانٍ.

  • النتيجة: تضليل المستخدمين وضياع مصداقية المنصة.

3. إساءة استخدام العروض والمكافآت (Incentive & Promo Abuse)

هنا يبحث المخترق عن "الثغرات المالية" في منطق العروض.

  • السيناريو: نظام "ادعُ صديقاً واحصل على 5$". يقوم المخترق بإنشاء سكربت يولد آلاف الحسابات الوهمية (Fake Accounts) ويقوم بعمل إحالة (Referral) لنفسه.

  • الهدف: تجميع أرصدة ضخمة أو أكواد خصم بطريقة غير شرعية.

  • النتيجة: خسارة مالية مباشرة للشركة (Drainage of Funds).


🔥 3. Impact (خطورة الثغرة)

1. خسائر مالية فادحة (Direct Financial Loss) 💸

إذا كان الـ API مرتبطاً بعمليات تكلف مالاً، فإن إساءة استخدامه تعني استنزافاً فورياً للميزانية.

  • مثال: لو كان لديك عرض "أول 100 مشترك يحصلون على خصم 50%"، وقام مخترق بحجز الـ 100 خصم في ثانية واحدة عبر بوت، ستحرم العملاء الحقيقيين وتضطر لدفع تكاليف هذه الخصومات لمن لا يستحق.

2. الحرمان من الخدمة لعملائك الحقيقيين (Denial of Service to Real Users) 🚫

هذا لا يعني سقوط السيرفر تقنياً، بل يعني "امتلاء" الخدمة بالوهميين.

  • الأثر: إذا قام شخص بحجز كل مواعيد الاستشارات في موقعك بأسماء وهمية، فإن العميل الحقيقي الذي يريد دفع المال لطلب خدمة "تصميم هوية" سيجد أنك "مشغول دائماً" ويغادر لمنافس آخر.

3. تدمير البيانات والتحليلات (Skewed Analytics & Data Pollution) 📊

كصاحب مشروع، أنت تبني قراراتك على البيانات.

  • الأثر: عندما يغرق البوت نظامك بآلاف الطلبات الوهمية، ستصبح إحصائيات موقعك (عدد الزوار، نسبة التحويل، أكثر الخدمات طلباً) غير صحيحة تماماً. ستبني خطتك التسويقية القادمة على "بيانات مزيفة"، مما يؤدي لقرارات تجارية خاطئة.

4. الإضرار بسمعة البراند (Brand Reputation Damage) 📉

  • الأثر مثلاً: إذا استطاع منافس إغراق متجر بآلاف التقييمات الوهمية السيئة، أو قام بحجز المنتجات في السلة لمنع الزبائن من الشراء، ستفقد العميلات الثقة في الموقع ويصبح البراند مرتبطاً في أذهانهن بالتعليق والمشاكل التقنية.

5. استنفاد الموارد البشرية (Operational Overload) 😫

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

🛠️ 4. Discovery (كيف تكتشفها؟)

1. تحديد "التدفقات الحساسة" (Identify Sensitive Flows) 🔍

أول خطوة هي تحديد المسارات التي يترتب عليها "منفعة" أو "تكلفة". اسأل نفسك:

  • أين يوجد زر "إرسال"، "حجز"، "تصويت"، أو "شراء"؟

  • أي مسار API يؤدي لتغيير في المخزون أو إرسال بريد إلكتروني؟

2. اختبار "القدرة على التكرار" (The Repetition Test) 🔁

استخدم أدوات مثل Burp Suite Intruder أو سكربت Python بسيط.

  • التجربة: حاول إرسال الطلب نفسه 50 مرة في دقيقة واحدة.

  • التحليل:

    • هل قبل السيرفر الـ 50 طلباً؟

    • هل حصلت على 50 كود خصم؟ أو قمت بـ 50 عملية تصويت بنفس الحساب؟

    • إذا لم يقل لك السيرفر "تمهل قليلاً" (Rate Limit) أو "لقد قمت بهذا الفعل مسبقاً"، فالثغرة موجودة.

3. فحص "التحقق من الهوية البشرية" (Bot Detection Check) 🤖

  • هل الـ Endpoint يتطلب Captcha؟

  • هل هناك تحقُّق من "تسلسل الخطوات"؟ (مثلاً: هل يسمح السيرفر بطلب /api/v1/checkout مباشرة دون المرور بـ /api/v1/add-to-cart؟).

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

4. اختبار "الالتفاف على القيود" (Constraint Bypass) 🚧

إذا وجدت قيوداً، حاول كسرها:

  • إذا كان التقييد يعتمد على الـ IP، جرب استخدام بروكسي أو تغيير الـ IP مع كل طلب.

  • إذا كان يعتمد على رقم الهاتف، هل يقبل الـ API أرقاماً وهمية أو بصيغ مختلفة لنفس الرقم؟

5. مراقبة "الوقت والجهد" (Latency & Resource Monitoring) ⏱️

  • عند إرسال طلبات مكثفة لعملية "توليد تقرير PDF"، هل تلاحظ أن النظام بدأ يتباطأ لكل المستخدمين؟ هذا مؤشر على أن التدفق غير محمي ويؤثر على منطق العمل بالكامل.

💡 علامات تدل على وجود الثغرة (Red Flags)

  1. عدم وجود Rate Limiting على العمليات التي تكلف مالاً (مثل رسائل الـ OTP).

  2. إمكانية تنفيذ عملية "الحجز" أو "الشراء" دون الحاجة لتسجيل دخول أو ببريد إلكتروني غير مفعل.

  3. غياب التوازن بين "الفعل" و"الزمن" (مثلاً: مستخدم يكتب تقييماً للمنتج في أقل من ثانية من فتحه للصفحة).


🛡️ 5. Remediation (كيف تُصلح؟)

1. تحديد سقف للطلبات (Rate Limiting) ⏱️

هذا هو خط الدفاع الأول. لا تسمح بأكثر من عدد معين من الطلبات في وقت محدد.

  • مثال: "يُسمح بطلب كود خصم واحد فقط كل ساعة لكل IP أو لكل حساب مستخدم".

  • برمجياً: في Node.js يمكنك استخدام مكتبات مثل express-rate-limit.

2. التحقق من "البشرية" (Bot Detection) 🤖

استخدم أدوات تميز بين الإنسان والآلة في العمليات الحساسة.

  • الحل: إضافة reCAPTCHA v3 (التي تعمل في الخلفية دون إزعاج العميل).

  • الفائدة: تمنع السكربتات التلقائية من إغراق مثلا مسابقة بمشاركات وهمية.

3. فرض "تسلسل العمليات" (Step-by-Step Validation) ⛓️

لا تسمح بالوصول للخطوة النهائية مباشرة.

  • الحل: يجب أن يتحقق السيرفر من أن المستخدم مر بالخطوات السابقة. (مثلاً: لا يمكن حجز موعد استشارة إلا بعد قضاء 30 ثانية على الأقل في صفحة تفاصيل الخدمة، أو بعد التحقق من رقم الهاتف).

4. قيود تعتمد على البيانات (Business Logic Constraints) 📊

ضع قيوداً ذكية في قاعدة البيانات:

  • Unique Constraints: في مسابقتك، اجعل حقل "رقم الهاتف" أو "الإيميل" فريداً (Unique) في قاعدة البيانات لكل مثلا مسابقة، ليمنع النظام تكرار المشاركة تلقائياً.

  • Max Usage: تحديد عدد أقصى لكل مستخدم (مثلاً: "هذا العميل لا يمكنه إضافة أكثر من 10 منتجات للسلة في المرة الواحدة").

5. المراقبة والتحليل (Monitoring & Anomaly Detection) 🚩

  • استخدم أنظمة تنبهك عندما يحدث سلوك مفاجئ (مثلاً: "تنبيه: تم طلب 500 كود خصم في آخر 10 ثوانٍ!").

  • هذا يسمح لك بالتدخل يدوياً وإيقاف الهجوم قبل أن يستنزف الميزانية.

6. التحقق من الهوية (Identity Verification) 🆔

  • بالنسبة للعمليات المكلفة (مثل طلب خدمة)، اطلب تفعيل الإيميل أو رقم الهاتف (OTP) قبل اعتماد الطلب. هذا يرفع "تكلفة الهجوم" على المخترق ويجعله غير مجدٍ له.

🧠 6. Attacker Mindset (اسأل نفسك كمخترق)

عندما تشاهد تدفقاً تجارياً (Business Flow) في أي موقع، اطرح هذه الأسئلة "الخبيثة":

  • 🤑 "كيف يمكنني جعل هذا العرض مخصصاً لي وحدي؟" "الموقع أعلن مثلا عن مسابقة لـ 3 فائزين. إذا استطعت إرسال 10,000 طلب مشاركة بأسماء وأرقام هوية وهمية، سأضمن تقنياً أن الأسماء الثلاثة المختارة ستكون تابعة لي. هل هناك ما يمنعني من أتمتة هذا الطلب (Automation)؟"

  • 🛒 "هل يمكنني تجميد مبيعات المنافس؟" "مثلا متجر إلكتروني لديه خصم كبير اليوم. ماذا لو استخدمت 'بوت' يضيف كل المنتجات إلى السلة ويصل إلى صفحة الدفع دون أن يدفع فعلياً؟ هل سيظل المخزون محجوزاً لي ويظهر للآخرين أنه 'نفد'؟ سأكرر هذه العملية كل 15 دقيقة لأقتل مبيعاتهم طوال اليوم."

  • 📩 "من سيدفع فاتورة الرسائل؟" "هذا الـ API يرسل كود تفعيل (OTP) عبر الرسائل النصية القصيرة (SMS) عند التسجيل. إذا لم يكن هناك حد للطلبات، سأقوم بطلب 1,000 رسالة في الدقيقة لرقم هاتف عشوائي. هل سيستمر السيرفر بالإرسال حتى تنفذ ميزانية صاحب الموقع؟"

  • 🗣️ "كيف أصنع 'إجماعاً وهمياً'؟" "هل يمكنني تجاوز التحقق من الـ IP أو الكوكيز لأصوت لنفسي آلاف المرات؟ هل يثق السيرفر في البيانات التي يرسلها المتصفح فقط؟"

  • 💳 "أين هي الثغرة في المنطق المالي؟" "الموقع يعطي رصيداً مجانياً عند دعوة صديق. هل يتحقق النظام من أن 'الصديق' قد قام بعملية شراء حقيقية؟ أم أن مجرد تفعيل الإيميل يكفي؟ سأقوم بإنشاء سكربت يولد إيميلات مؤقتة ويدعو نفسه باستمرار."