Skip to content

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).

IDRiskTest özeti
API1BOLA (Broken Object Level Auth)ID değiştir → başkasının kaydı
API2Broken AuthenticationJWT/token, brute, parola reset
API3Broken Object Property Level AuthAşırı ifşa + kütle atama
API4Unrestricted Resource ConsumptionRate/DoS/maliyet
API5BFLA (Broken Function Level Auth)Admin uçlarına erişim
API6Unrestricted Sensitive Business FlowsOtomasyon / iş akışı suistimali
API7SSRFKullanıcı URL → sunucu isteği
API8Security MisconfigurationCORS, verbose hata, varsayılan
API9Improper Inventory ManagementGölge/eski API sürümleri
API10Unsafe Consumption of APIs3. parti API’ye kör güven
Terminal window
ffuf -u https://api.hedef.com/FUZZ -w api-words.txt -mc 200,401,403,500
Terminal window
nuclei -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.
  1. Kendi kaynağını oluştur: GET /api/orders/1001 .

  2. ID değiştir: 1002 , UUID brute, tahmin edilebilir slug.

  3. Yatay (aynı rol) ve dikey (user → admin kaydı) dene.

  4. Metotları değiştir: GET engelli ama PUT / PATCH / DELETE açık olabilir.

  5. İç içe kaynaklar: /users/1/orders/9 → user_id ve order_id ayrı ayrı oynat.

GET /api/users/123/invoices HTTP/1.1
Authorization: Bearer <token>
# 124, 125... veya sızdırılmış GUID listesi
GET /api/admin/users
DELETE /api/users/1
POST /api/roles/assign
POST /api/v1/internal/rebuild-index
# Path: /api/user → /api/admin/user
# Verb: GET → DELETE
{ "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 alanlar
□ 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 GitHub
Terminal window
ffuf -u https://api.hedef.com/invite -w emails.txt -X POST \
-H 'Authorization: Bearer ...' -t 50
/api/v1 /api/v2 /api/beta /api/internal /api/debug
Eski mobil app mitmproxy trafiği → unutulan uçlar
Staging subdomain + prod token
Swagger'da "deprecated" ama canlı
□ Webhook URL, avatar import, PDF fetch → [SSRF](/web/ssrf/)
□ Backend'in 3. parti yanıtına güvenmesi → poisoned JSON
□ Partner API callback imzasız
[ ] 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ı tur
OpenAPI/JS → endpoint envanteri
→ iki kullanıcı token ile BOLA matrisi
→ admin path BFLA
→ mass assignment role=admin
→ impact: hesap devralma / data dump