دليل شامل من اختيار البرنامج لحد إثبات الـ impact — مبني على تحليل عميق لمنهجية Arson على Starbucks Bug Bounty.
شاهد شرح الفيديو الكامل لمنهجية الـ IDOR وكيفية اختيار الأهداف واكتشاف الثغرات عملياً.
الاتنين ممكن يودوا لنفس النتيجة — بس الطريق مختلف تماماً. وخلطهم بيضيع attack vectors كاملة.
التطبيق بيأخد ID من الـ user ويرجع data من غير ما يتأكد إن الـ user ده صاحب الـ data دي.
Failure: object-level authorization
الـ user بيوصل لـ mechanism من المفروض إن الـ role بتاعه مش مسموحله يستخدمه أصلاً.
Failure: function-level authorization
النهارده هنتكلم عن الـ IDOR وعن الـ Access Control Violations. الموضوع ده مش بس عشان تتعلم — ده عشان تفهم ليه الـ automated scanners مش هتلاقي الـ bugs دي أبداً. إنت بتفهم الـ context اللي الـ scanner مش بيفهمه — ده الـ unfair advantage بتاعك.
لو قدرت تغير ID بتاعك لـ ID حد تاني وشفت بياناته — ده IDOR. إنت authorized تستخدم الـ mechanism — بس مش المفروض توصل لـ object حد تاني. أما لو وصلت لـ endpoint مش مسموحلك بيه أصلاً — ده Access Control Violation.
في الـ cloud-first world اللي احنا فيه، الـ attacker مش بيدور على shell — بيدور على data. الـ customer database هي الـ Crown Jewel. AWS Lambda بيديك scope محدود — بس لو وصلت للـ database، ده هو الـ devastating impact الحقيقي.
مش كل برنامج يستاهل وقتك — في معايير أساسية لازم تتأكد منها الأول.
Starbucks Singapore ليه؟ نفس الـ codebase تقريباً — بس بيتعمله testing أقل بكتير. والـ Singapore version لسه إنجليزي — فمعندكش language barrier.
المنهجية الصح: وثق الـ identifiers مش الـ passwords.
استخدم you+demo1@wearehacker.one و you+demo2@wearehacker.one. الاتنين بيوصلوا نفس الـ inbox — بس الـ app بيشوفهم حسابين منفصلين. الشركة هتعرف إنك researcher.
بعد الإنشاء: Burp Suite → jwt.io → وثق الـ nameId وكل identifier. المقارنة بينهم هي اللي بتكشف الـ sequential pattern.
Burp Suite بيشوف الـ traffic من الاتنين. ده بيخليك تقدر تقارن بين الـ requests والـ responses بسهولة.
A1: 8800327 — A2: 8800329. Sequential = الـ IDs predictable = الباب مفتوح. لو GUIDs — هتحتاج تلاقيهم من endpoints تانية.
مش note-taking عادي — ده نظام تفكير يخليك تشوف الـ application كاملاً في رأسك.
لو مش بتعمل notes — إنت مش هتنجح في الـ IDOR testing. مش رأي — ده fact. الـ IDOR testing مبني على الـ context. إنت محتاج تعرف كل mechanism، إيه اللي بيتبعت في كل request، وإيه اللي بيرجع في الـ response. لو مش موثق — هتنسى وهتلف في دوايرة.
شيل كل حاجة غير ضرورية لحد ما تفهم إيه اللي الـ backend بيستخدمه فعلاً عشان يعرف إنت مين.
أول ما بتفتح endpoint جديد في Burp Repeater، السؤال الأول مش "في IDOR ولا لأ؟" — السؤال هو: إيه أصغر request ممكن يشتغل؟
إنت بتشيل cookie بعد cookie، header بعد header، لحد ما الـ response يتعطل. الـ minimum set اللي بيشتغل — ده هو الـ authentication mechanism بتاعك.
ده بيعلمنا حاجة مهمة: لازم تثبت إن الـ token ده فعلاً هو اللي الـ backend بيستخدمه — مش بس إنه مش validated.
STEP 1 — Remove CSRF token
STEP 2 — Remove JWT access_token
STEP 3 — Remove session cookie
STEP 4 — Any explicit ID in URL or body?
الـ JWT مش magic — base64 + signature. لو الـ signature مش validated، إنت تقدر تغير أي حاجة جوا.
HS256 بيستخدم shared secret واحد. أقل شيوعاً من RS256. لو شايفه — ده pointer ممكن يكون legacy implementation.
الـ Pointer مش vulnerability — هو إشارة إن الـ team مش بيطبق best practices.
أي حاجة في الـ application بتقولك إن الـ security team مش على المستوى. بتدلك إنك على الطريق الصح.
= فريق بيشتغل تحت ضغط + technical debt كبير
| الـ Pointer | إيه اللي بيعنيه | الخطوة التالية | الأولوية |
|---|---|---|---|
| CSRF token غير validated | Developer أضافه بس ما ربطهوش | تحقق من كل endpoints | MEDIUM |
| Session cookie بدون HTTP-only | قابل للسرقة بـ XSS | دور على XSS → session hijack chain | HIGH |
| JWT بيستخدم HS256 | قرار غريب — legacy ممكن | اختبر validation، جرب none algorithm | HIGH |
| Auth patterns مختلفة في نفس الـ app | Tech debt — كودبيسين اتلموا | API endpoints ممكن تكون أقل حماية | HIGH |
| Generic error message | Dev بيخبي فرق بين not found وunauthorized | قارن response time وsize → Blind IDOR | MEDIUM |
| Sequential IDs في الـ JWT | Predictable — مش GUIDs | أعلى أولوية على كل endpoint | CRITICAL |
قبل ما تهاجم حاجة، إنت لازم تفهم التطبيق كاملاً. الـ CRUD map هو طريقتك.
| Operation | HTTP | IDOR Type | Impact | مثال |
|---|---|---|---|---|
| READ | GET / POST | Unauthorized data access | HIGH | شوف profile / cards حد تاني |
| UPDATE | POST / PUT | Unauthorized modification | CRITICAL | غيّر email / role حد تاني |
| DELETE | DELETE | Unauthorized deletion | CRITICAL | امسح account حد تاني |
| CREATE | POST | Resource under other user | MEDIUM | أضف order لـ account حد تاني |
كل IDOR bug بيتمحور حول object معين. كل ما عرفته أكتر، كل ما قدرت تثبت الـ impact أحسن.
لما تعرف الـ fields بتاعة الـ Gift Card — إنت عارف بالظبط إيه الـ sensitive data اللي تعرضه كـ proof of concept.
balance + cardNumber = maximum impact proof.
كل قرار في الـ IDOR testing ليه مساره المحدد.
PHASE 1 — AUTH MECHANISM
SESSION BRANCH
JWT BRANCH
PHASE 2 — ID TYPE
PHASE 3 — CONFIRMATION
الـ Blind IDOR = مش بتشوف الـ data مباشرة بس في إشارة إن الـ object موجود.
Step by step — من لحظة ما تفتح الـ program لحد ما تكتب الـ report.
Authenticated testing ✅ Self-registration ✅ Surface كبيرة ✅ Non-English bonus ✅. افتح scope وشوف كل الـ subdomains.
mkdir target && touch idor_notes.md. اكتب: ## Pointers → ## Accounts → ## Mechanisms → ## Objects. ثابت على كل target.
A1 في normal browser، A2 في incognito. Burp Suite scope = target domain فقط. Wappalyzer لتحديد الـ tech stack.
كل account: Burp → jwt.io → وثق كل identifier. Sequential IDs = gold. GUIDs = هتحتاج تلاقيهم من مصادر تانية.
Feature inventory كامل. كل section فيه READ/UPDATE/DELETE. Apply الـ minimum request theory على كل endpoint.
أولوية: endpoints اللي فيها explicit ID في الـ body أو URL. بعت ID بتاع A2 من session بتاع A1 وشوف الـ response.
جد. ابعد عن الـ computer. اتنفس. اتأكد إنك فاهم بالظبط إيه اللي بيحصل قبل ما تكتب report. التسرع = false positives محرجة.
كل سؤال عن decision-making حقيقي.