الفرق الحمراء — الهجومخبير70mL19

أمن واجهات البرمجة (APIs)

أهم 10 ثغرات في الـ APIs بحسب OWASP

#BOLA#OAuth#GraphQL#REST

لماذا أمن الـ API هو سطح الهجوم الأهم اليوم؟

تشبيه — شرح مبسط
الموقع التقليدي مثل بنك بشبّاك واحد يخدم الزبائن. الـ API الحديث مثل بنك بألف باب خلفي للموظفين، الموبايل، الشركاء، الشركات الأخرى. نسيت إغلاق باب واحد = مصيبة. أكثر من 70% من حركة الويب الآن APIs.

OWASP API Security Top 10 (2023)

  1. API1 — BOLA (Broken Object Level Auth): نسخة الـ IDOR على API. أكثر الثغرات شيوعاً.
  2. API2 — Broken Authentication: ضعف JWT، تخمين tokens.
  3. API3 — Broken Object Property Level Auth: مستخدم يعدّل حقولاً ليس مسموحاً له بها (mass assignment).
  4. API4 — Unrestricted Resource Consumption: لا rate limit → DoS أو brute force.
  5. API5 — Broken Function Level Auth: المستخدم العادي يصل لـ /admin/*.
  6. API6 — Unrestricted Access to Sensitive Business Flows: شراء آلاف العناصر بسعر تخفيض.
  7. API7 — Server Side Request Forgery (SSRF).
  8. API8 — Security Misconfiguration: CORS مفتوح، debug endpoints.
  9. API9 — Improper Inventory Management: APIs قديمة (v1) منسية و مستخدمة.
  10. API10 — Unsafe Consumption of 3rd-party APIs.

BOLA — أكثر الثغرات شيوعاً

HTTP
# طلب شرعي
GET /api/v1/users/1042/orders
Authorization: Bearer eyJ...

# تغيير المعرّف فقط
GET /api/v1/users/1043/orders
Authorization: Bearer eyJ...   ← نفس التوكن
# لو نجح: BOLA — السيرفر لم يفحص الملكية
الدفاع
في كل endpoint يجب أن يكون: WHERE owner_id = current_user.id. لا تعتمد فقط على الـ ID في الـ URL. استخدم UUIDs لتقليل التخمين.

GraphQL — سطح هجوم خاص

  • Introspection — كشف كل الـ schema (عطّله في الإنتاج).
  • Query depth attacks — query عميق يستهلك الـ CPU.
  • Field duplication / aliasing — لاختراق rate limits.
  • Batching attacks — تجربة كل كلمات السر في طلب واحد.
  • SQL/NoSQL injection داخل الـ resolvers.
graphql attack
# 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.
الأمان الحديث
استخدم Authorization Code + PKCE دائماً، حتى للـ SPAs. خزّن tokens في HttpOnly cookies، لا في localStorage.

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

tools
# 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)

مبادئ تصميم آمن

  1. Never trust the client — فحص كل شيء على السيرفر.
  2. صلاحيات على مستوى كل field، لا فقط الـ object.
  3. استخدم scopes ضيقة و short-lived tokens.
  4. إصدار (versioning) واضح + خطة hijack للـ deprecation.
  5. كل response يحوي Content-Type صحيح + headers أمنية.
  6. سجّل كل authn/authz failures في الـ SIEM.
  7. Pagination بحدود قصوى لمنع dump كامل.