API Security — البوابة اللي محدش بيراقبها
BOLA و OAuth و GraphQL و REST — اللي بتقع فيه فعلاً
ليه أمن الـ API بقى الجبهة رقم واحد دلوقتي؟
إنت بتأمّن "الموقع". تمام.
طب الموبايل app؟ والـ partner integrations؟ والـ admin dashboard؟ والـ v1 القديم اللي محدش فاكره من 2019؟
كل واحد من دول API منفصل. جبهة منفصلة. ثغرات منفصلة.
- طب يا حضرتك، أنا حاطط WAF قدام كل حاجة.. مش كفاية؟
يا نجم الجيل. الـ WAF بيشوف الـ traffic، مش بيشوف منطق الـ business. الـ BOLA بيمر منه طبيعي — السيرفر هو اللي لازم يشوف إن الـ user ده مش صاحب الـ object ده.
for i in range(1, 10_000_000). اللي حصل فعلياً: 9.8 مليون رقم passport, license, address. مش 0day. مش APT. BOLA + sequential IDs + endpoint منسي. ده الـ API1 و API9 مع بعض في حادثة واحدة.OWASP API Security Top 10 (2023)
- API1 — BOLA (Broken Object Level Auth): نسخة الـ IDOR للـ API. الأكثر شيوعاً وبفارق كبير.
- API2 — Broken Authentication: JWT ضعيف، tokens تتخمن.
- API3 — Broken Object Property Level Auth: اليوزر بيعدل في حقول مش مسموح له بيها (mass assignment).
- API4 — Unrestricted Resource Consumption: مفيش rate limit → DoS أو brute force.
- API5 — Broken Function Level Auth: يوزر عادي بيوصل لـ
/admin/*. - API6 — Unrestricted Access to Sensitive Business Flows: شراء آلاف القطع بسعر التخفيض.
- API7 — Server Side Request Forgery (SSRF).
- API8 — Security Misconfiguration: CORS مفتوح على الآخر، debug endpoints سايبة.
- API9 — Improper Inventory Management: APIs قديمة (v1) منسية ولسة شغالة.
- API10 — Unsafe Consumption of 3rd-party APIs.
BOLA — الثغرة الأكثر شيوعاً وأرخصها في الاكتشاف
# طلب شرعي
GET /api/v1/users/1042/orders
Authorization: Bearer eyJ...
# تغيير المعرّف فقط
GET /api/v1/users/1043/orders
Authorization: Bearer eyJ... ← نفس التوكن
# لو نجح: BOLA — السيرفر لم يفحص الملكيةWHERE owner_id = current_user.id. متعتمدش على الـ ID في الـ URL لوحده. استخدم UUIDs عشان تقلل التخمين.GraphQL — جبهة لوحدها
- Introspection — بيكشف الـ schema كاملة (اقفله في الإنتاج).
- Query depth attacks — استعلامات عميقة بتاكل الـ CPU.
- Field duplication / aliasing — عشان تتخطى rate limits.
- Batching attacks — تجرب كل الباسوردات في request واحد.
- SQL/NoSQL injection جوه الـ resolvers نفسهم.
# Introspection للكشف
{ __schema { types { name fields { name } } } }
# Batching brute-force
[
{ "query": "mutation { login(u: \"admin\", p: \"a\") }" },
{ "query": "mutation { login(u: \"admin\", p: \"b\") }" },
...
]أدوات: graphql-cop, InQL, clairvoyance, GraphQLmap.
OAuth 2.0 / OIDC — الغلطات اللي بتتكرر
- Implicit flow — مات خلاص، متستخدموش.
- Missing PKCE في الموبايل والـ SPAs.
- redirect_uri مش محدد بدقة → سرقة الـ code.
- State parameter ناقص → CSRF.
- قبول tokens من أي issuer.
- مفيش فحص لـ
audجوه الـ JWT.
Rate Limiting وDoS
- على مستوى الـ user والـ IP والـ endpoint كل واحد لوحده.
- استخدم token bucket أو sliding window.
- بطّئ الـ login بعد 3 محاولات (exponential backoff).
- راقب API spike anomalies في الـ SIEM.
- الأدوات: Cloudflare Rate Limiting, AWS WAF rate-based rules, Redis-cell, envoy ratelimit.
API Discovery و Inventory
متقدرش تحمي حاجة معرفش بوجودها. الـ shadow APIs والـ zombie APIs هما أكبر خطر دلوقتي.
- Salt Security, Noname, 42Crunch, Akamai API Security.
- توليد OpenAPI specs تلقائياً من الـ traffic.
- مراجعة دورية للـ deprecated endpoints.
اختبار الـ APIs
# Discovery
kiterunner scan https://api.target.com -A=apiroutes-241121
arjun -u https://api.target.com/users -m GET # parameter discovery
# Fuzzing
ffuf -u "https://api.target.com/v1/FUZZ" -w api-wordlist.txt -mc 200,401,403
postman / Insomnia / Hoppscotch
# Authn / Authz testing
ZAP API scanner
mindmap-style: Burp + Autorize plugin
graphw00f # GraphQL fingerprinting
clairvoyance # GraphQL schema recovery without introspection
# Continuous
Schemathesis (property-based)
Stoplight + Spectral (lint OpenAPI)مبادئ تصميم آمن
- Never trust the client — افحص كل حاجة على السيرفر، مفيش استثناء.
- صلاحيات على مستوى كل field، مش بس الـ object.
- استخدم scopes ضيقة وshort-lived tokens.
- versioning واضح + خطة deprecation معلنة.
- كل response معاه Content-Type صح + security headers.
- سجّل كل authn/authz failures في الـ SIEM. ده اللي هيكشف لك الهجوم.
- Pagination بحدود قصوى عشان متسمحش بـ dump كامل.
غلطات الـ junior في الـ API
- "الموبايل client بيشيك الصلاحيات" — الـ client مش معاك. أي حاجة بتعتمد على الـ client = ثغرة.
- JWT في localStorage — أي XSS يسرّبهم. استخدم HttpOnly cookies + SameSite=Strict.
- سيبوا /v1 شغال — الـ /v2 معمول صح، الـ /v1 لسه فيه BOLA من 2019. الـ attacker مش غبي، بيستخدم القديم.
- CORS مفتوح —
Access-Control-Allow-Origin: *مع credentials = هدية للمهاجم. - مفيش rate limit على /login — Password spraying في 4 ساعات على 50 ألف حساب. والـ logs مش بتاخد بالها.
- Mass assignment — يبعت
{"is_admin": true}في PUT /profile. والـ ORM بيقبلها زي ما هي.
الخلاصة الناشفة
الـ API مش "موقع بدون UI". الـ API هو الـ backend بكل صلاحياته مكشوف على الإنترنت.
كل endpoint = قرار authorization منفصل. مفيش "نسيت أحط check" — لو نسيت، يبقى دي ثغرة.
وقبل ما تأمّن الـ APIs، اعرفهم. الـ Shadow API اللي مش في الـ inventory هو اللي بياخد الشركة.
اكتبها على Confluence فوق:
API محدش فاكره = breach محدش هيسمع بيه إلا في الجرنال.