API Güvenliği (OWASP API Top 10)
OWASP API Top 10 difficulty: orta
Modern uygulamalar mantığı API’ye taşır; saldırı yüzeyi de oraya kayar. OWASP API Security Top 10 (2023) bu bağlama özgü riskleri tanımlar. En kritik olanlar yetkilendirme kusurlarıdır (BOLA/BFLA).
OWASP API Top 10 (2023)
Section titled “OWASP API Top 10 (2023)”| ID | Risk | Test özeti |
|---|---|---|
| API1 | BOLA (Broken Object Level Auth) | ID değiştir → başkasının kaydı |
| API2 | Broken Authentication | JWT/token, brute, parola reset |
| API3 | Broken Object Property Level Auth | Aşırı ifşa + kütle atama |
| API4 | Unrestricted Resource Consumption | Rate/DoS/maliyet |
| API5 | BFLA (Broken Function Level Auth) | Admin uçlarına erişim |
| API6 | Unrestricted Sensitive Business Flows | Otomasyon / iş akışı suistimali |
| API7 | SSRF | Kullanıcı URL → sunucu isteği |
| API8 | Security Misconfiguration | CORS, verbose hata, varsayılan |
| API9 | Improper Inventory Management | Gölge/eski API sürümleri |
| API10 | Unsafe Consumption of APIs | 3. parti API’ye kör güven |
ffuf -u https://api.hedef.com/FUZZ -w api-words.txt -mc 200,401,403,500nuclei -u https://api.hedef.com -t http/exposures/apis/□ Mobil APK → apktool / jadx → endpoint + secret□ Eski sürüm: /api/v1 yanında /api/v2, /internal, /debug□ Farklı Host: api., mobile-api., gateway.BOLA (API1) — nesne yetkisi
Section titled “BOLA (API1) — nesne yetkisi”-
Kendi kaynağını oluştur: GET /api/orders/1001 .
-
ID değiştir: 1002 , UUID brute, tahmin edilebilir slug.
-
Yatay (aynı rol) ve dikey (user → admin kaydı) dene.
-
Metotları değiştir: GET engelli ama PUT / PATCH / DELETE açık olabilir.
-
İç içe kaynaklar: /users/1/orders/9 → user_id ve order_id ayrı ayrı oynat.
GET /api/users/123/invoices HTTP/1.1Authorization: Bearer <token># 124, 125... veya sızdırılmış GUID listesiBFLA (API5) — fonksiyon yetkisi
Section titled “BFLA (API5) — fonksiyon yetkisi”GET /api/admin/usersDELETE /api/users/1POST /api/roles/assignPOST /api/v1/internal/rebuild-index# Path: /api/user → /api/admin/user# Verb: GET → DELETEKütle atama & aşırı ifşa (API3)
Section titled “Kütle atama & aşırı ifşa (API3)”{ "email": "a@b.com", "password": "x", "role": "admin", "isVerified": true }// Yanıtta UI'de olmayan alanlar{ "id": 1, "email": "...", "passwordHash": "...", "ssn": "...", "internalNotes": "..." }□ PATCH /users/me — role, balance, verified bayrakları□ JSON dışında form field / multipart aynı isimler□ GraphQL mutation input'ta gizli alanlarAuth & JWT (API2)
Section titled “Auth & JWT (API2)”□ alg none / key confusion → [JWT](/web/jwt-attacks/)□ Token URL query'de; log ve Referer sızıntısı□ Refresh uzun ömürlü; logout invalidate yok□ /api/v1 auth var, /api/v2 veya /internal yok□ API key header tahmin / sızmış key GitHubRate & maliyet (API4 / API6)
Section titled “Rate & maliyet (API4 / API6)”ffuf -u https://api.hedef.com/invite -w emails.txt -X POST \ -H 'Authorization: Bearer ...' -t 50Envanter (API9)
Section titled “Envanter (API9)”/api/v1 /api/v2 /api/beta /api/internal /api/debugEski mobil app mitmproxy trafiği → unutulan uçlarStaging subdomain + prod tokenSwagger'da "deprecated" ama canlıSSRF & 3. parti (API7 / API10)
Section titled “SSRF & 3. parti (API7 / API10)”□ Webhook URL, avatar import, PDF fetch → [SSRF](/web/ssrf/)□ Backend'in 3. parti yanıtına güvenmesi → poisoned JSON□ Partner API callback imzasızTest checklist
Section titled “Test checklist”[ ] Her nesne ID'si — BOLA[ ] Her admin/fonksiyon — BFLA[ ] Gövdeye ekstra alan — mass assignment[ ] Yanıt şeması — hassas alan[ ] Tüm sürümler / gölge API[ ] Rate limit / maliyet tavanı[ ] JWT/oturum[ ] CORS / verbose stack[ ] GraphQL ayrı turSaldırı zinciri
Section titled “Saldırı zinciri”OpenAPI/JS → endpoint envanteri → iki kullanıcı token ile BOLA matrisi → admin path BFLA → mass assignment role=admin → impact: hesap devralma / data dump