- بواسطة x32x01 ||
في اختبار الاختراق اتعودنا ندوّر على ثغرات سببها إدخال خبيث زي: XSS - SQL Injection - Command Injection ❌
لكن فيه نوع أخطر بكتير…
ثغرات مش محتاجة Payload ولا بتكسر Validation ولا بتغير أي قيمة
ومع ذلك… تأثيرها ممكن يبقى كارثي 🔥 هنا بنتكلم عن Race Condition Attacks ⏱️
1️⃣ استقبال الطلب
2️⃣ التحقق من الحالة (هل مسموح؟)
3️⃣ تنفيذ العملية
4️⃣ تحديث الحالة
💥 المشكلة إن الخطوات دي مش دايمًا Atomic يعني ممكن طلب تاني:
السيرفر بيعمل الآتي:
❗ ما كسرناش Validation
❗ بس استغلينا التوقيت
الكود ده شكله سليم ✔️ لكن لو اتنفّذ بالتزامن مفيش Lock ولا Transaction
يبقى عرضة لـ Race Condition 💣
ابعت طلبات متزامنة ➜ راقب السلوك
وده فرق جوهري 🔍
لكن: ماذا لو اتبعت أكتر من مرة؟ وفي نفس اللحظة؟
التحول في التفكير ده هو الفرق الحقيقي بين: 👶 مبتدئ 🧑💻 مختبر اختراق محترف
مش كل ثغرة بتكسر القواعد… بعضها بس بيسبقك بثانية ⏱️
لكن فيه نوع أخطر بكتير…
ثغرات مش محتاجة Payload ولا بتكسر Validation ولا بتغير أي قيمة
ومع ذلك… تأثيرها ممكن يبقى كارثي 🔥 هنا بنتكلم عن Race Condition Attacks ⏱️
الفكرة الأساسية قبل أي تعريف 🤔
السيرفر غالبًا بيفترض حاجة بسيطة جدًا:- الطلبات هتوصل بالترتيب
- الطلب الأول يخلص قبل ما التاني يبدأ
- تبعت أكتر من طلب في نفس اللحظة
- Check (التحقق)
- Update (تحديث الحالة)
السيرفر بيفكر إزاي أصلًا؟ 🧠
في أغلب الأنظمة، السيناريو بيبقى كده:1️⃣ استقبال الطلب
2️⃣ التحقق من الحالة (هل مسموح؟)
3️⃣ تنفيذ العملية
4️⃣ تحديث الحالة
💥 المشكلة إن الخطوات دي مش دايمًا Atomic يعني ممكن طلب تاني:
- يعدّي مرحلة التحقق
- قبل ما الطلب الأول يحدّث الحالة
مثال عملي بسيط (من غير أدوات) 🔥
تخيّل سيناريو شائع جدًا: 🎟 كوبون خصم يُستخدم مرة واحدةالسيرفر بيعمل الآتي:
- هل الكوبون مستخدم؟ ❌ لا
- إذًا استخدمه ✅
- إرسال 5 طلبات في نفس اللحظة
- كل طلب بيسأل نفس السؤال
- قبل ما حالة الكوبون تتحدّث
- الكوبون اتستخدم 5 مرات
❗ ما كسرناش Validation
❗ بس استغلينا التوقيت
مثال منطقي مبسّط بالكود 💻
Code:
if coupon.used == false:
apply_discount()
coupon.used = true يبقى عرضة لـ Race Condition 💣
ليه Race Condition خطيرة جدًا؟ 🚨
لأنها ممكن تؤدي إلى:- 💰 مضاعفة الرصيد
- 💳 تكرار عمليات مالية
- 🧱 إنشاء موارد غير محدودة
- 🔓 تجاوز قيود “مرة واحدة فقط”
- 👑 الحصول على صلاحيات إضافية
ليه أدوات الفحص الآلي مش بتكتشفها؟ 🤷♂️
لأن:- مفيش Payload معروف
- مفيش Error Message
- مفيش Pattern ثابت
ابعت طلبات متزامنة ➜ راقب السلوك
وده فرق جوهري 🔍
Race Condition بتظهر فين غالبًا؟ 🎯
- أنظمة الدفع 💳
- الكوبونات والخصومات
- التسجيلات
- تغيير كلمات المرور
- استهلاك الرصيد أو النقاط
- APIs اللي بتتعامل مع State
إزاي بيفكر مختبر الاختراق المحترف؟ 🧠
السؤال مش: هل الطلب ده آمن؟لكن: ماذا لو اتبعت أكتر من مرة؟ وفي نفس اللحظة؟
التحول في التفكير ده هو الفرق الحقيقي بين: 👶 مبتدئ 🧑💻 مختبر اختراق محترف
إزاي نمنع Race Condition؟ 🛡️
من الناحية التقنية:- Server-side Locking
- Atomic Operations
- Proper Transaction Handling
- Rate Limiting (حل جزئي)
الخلاصة 📌
أي منطق بيعتمد على: “مرة واحدة فقط” هو هدف محتمل لـ Race Condition ⚠️مش كل ثغرة بتكسر القواعد… بعضها بس بيسبقك بثانية ⏱️
التعديل الأخير: