Konuyu Okuyanlar:

API Güvenliği ve OWASP API Top 10: BOLA BFLA ve Temel Kontroller

API Güvenliği ve OWASP API Top 10: BOLA BFLA ve Temel Kontroller
[center]
[Resim: attachment.php?aid=147]
[/center]

Selam millet, BlueTornado yazıyor.

Modern uygulamaların yüzeyi çoğu zaman HTML formlarından çok JSON API'lerdir. OWASP API Security Top 10, bu yüzeyi hedefleyen riskleri listeler. Bu rehberde 2023 sürümüne odaklanarak özellikle BOLA ve BFLA'yı, labda test yaklaşımını ve savunma kontrollerini anlatıyoruz. İcat istatistik veya uydurma CVE yok; resmi OWASP dokümanına bağlı kalıyoruz.

Konuda Anlatılacaklar
  1. API güvenliği neden ayrı ele alınır?
  2. OWASP API Top 10 2023 özeti
  3. BOLA (object) ve BFLA (function) derinlemesine
  4. Lab: basit API ile A/B hesap testi
  5. Korunma: authn/authz, rate limit, şema
  6. İleri seviye: GraphQL, mass assignment, envanter
  7. Kaynakça ve yasal uyarı

1) API Güvenliği Nedir?
API'ler makine-okur, otomasyona açıktır, mobil/SPA/partner entegrasyonlarını besler. UI'da gizlenen bir düğme API'de hâlâ duruyor olabilir. Kimlik doğrulama (authentication) ile yetkilendirme (authorization) karıştırılmamalıdır: "Token var" yetki demek değildir.

2) OWASP API Top 10 2023 Özeti
Resmi liste (kısa Türkçe karşılıklarıyla):
  • API1:2023 Broken Object Level Authorization (BOLA)
  • API2:2023 Broken Authentication
  • API3:2023 Broken Object Property Level Authorization
  • API4:2023 Unrestricted Resource Consumption
  • API5:2023 Broken Function Level Authorization (BFLA)
  • API6:2023 Unrestricted Access to Sensitive Business Flows
  • API7:2023 Server Side Request Forgery
  • API8:2023 Security Misconfiguration
  • API9:2023 Improper Inventory Management
  • API10:2023 Unsafe Consumption of APIs

Detay için OWASP API Security Project sayfasına bakın. Sürüm yılını raporlarınızda belirtin.

[center][/center]

3) BOLA Nedir?
Broken Object Level Authorization, web'deki IDOR'un API dilindeki adıdır. Kullanıcı, erişmemesi gereken nesneye kimlik (id) ile ulaşır.

Kod:
# Tehlikeli GET /api/v1/users/214/orders # Authorization yalnızca "login oldu mu?" seviyesinde

Kod:
# Doğru yön order = repo.get(order_id) if order.owner_id != current_user.id: raise Forbidden()

4) BFLA Nedir?
Broken Function Level Authorization, işlev düzeyinde yetki eksikliğidir. Özellikle admin uçlarının gizlenerek "güvende" sanılması.

Kod:
DELETE /api/v1/admin/users/214 POST /api/v1/admin/settings/maintenance # UI'da admin menüsü yok ama endpoint açık

Kod:
# Rol kontrolü if "admin" not in current_user.roles: raise Forbidden()

BOLA nesne sahipliğine, BFLA ise role/işleve bakar; ikisi birlikte test edilmelidir.

5) Lab: Mini API Testi
Kendi bilgisayarınızda iki kullanıcı oluşturabileceğiniz bir lab API'si kullanın (Juice Shop API, crAPI, veya kendi Flask iskeletiniz).

Kod:
# A kullanıcısı token TOKEN_A=... TOKEN_B=... # A kendi kaynağını okur curl -s -H "Authorization: Bearer $TOKEN_A" http://127.0.0.1:8000/api/orders/1 # A, B'nin order id'sini dener curl -s -o /tmp/out -w "%{http_code}" -H "Authorization: Bearer $TOKEN_A" \ http://127.0.0.1:8000/api/orders/2 # 403/404 beklenir; 200 + B verisi = BOLA

Kod:
# BFLA denemesi curl -s -o /tmp/out -w "%{http_code}" -H "Authorization: Bearer $TOKEN_A" \ -X DELETE http://127.0.0.1:8000/api/admin/users/2 # 403 beklenir

[center][/center]

6) Kavram Referansı ve Korunma

Object property level (API3): Kullanıcı nesneyi görebilir ama
Kod:
is_admin
,
Kod:
salary
alanlarını okuyamamalı / yazamamalıdır (mass assignment ile bağlantılı).

Kod:
# Allowlist serialize return {"id": o.id, "item": o.item, "status": o.status} # role, internal_notes yok

Resource consumption (API4): Rate limit, pagination tavanı, max page size, maliyetli aramalar için kota.

Kod:
# Örnek (nginx / API gateway) limit_req_zone $binary_remote_addr zone=api:10m rate=5r/s;

Inventory (API9): Eski
Kod:
/v1
unutulmuş, shadow API, document edilmemiş debug uçları. OpenAPI envanteri tutun; gateway'de yalnızca bilinen route'ları açın.

Kod:
# OpenAPI'de tanımlı olmayan yolu reddet (gateway politikası)

Authn (API2): Credential stuffing'e karşı rate limit + MFA; JWT için bir önceki konudaki kurallar.

7) Uygulamalı Kontrol Listesi
  • Her endpoint için: kim çağırabilir, hangi nesneler?
  • A/B hesap otomasyon testi CI'da
  • Admin prefix'leri ayrı authz middleware
  • Response'ta fazla alan sızıntısı var mı?
  • Rate limit ve payload size limit
  • WAF/gateway + uygulama içi kontrol (defense in depth)
  • Log: authz deny olayları

Kod:
# Pseudo test def test_bola_forbidden(client, user_a, order_of_b): r = client.get(f"/api/orders/{order_of_b.id}", headers=auth(user_a)) assert r.status_code in (403, 404)

[center][/center]

8) İleri Seviye
GraphQL: Tek endpoint; field-level authz, query depth/cost limit, introspection'ı production'da kapatma.

BFLA keşfi: OpenAPI / JS bundle içinde
Kod:
/admin
,
Kod:
role
,
Kod:
internal
string araması (kendi uygulamanız).

Unsafe consumption (API10): Üçüncü parti API yanıtına güvenerek komut/SQL birleştirmeyin; şema doğrulayın.

Kod:
# Rapor Bulgu: BOLA (API1:2023) / CWE-639 Endpoint: GET /api/orders/{id} Kanıt: Kullanıcı A, B siparişini 200 ile okudu Öneri: object-level authz + otomatik test

9) Sonuç
API güvenliği, UI güvenlik varsayımlarını taşımaz. BOLA ve BFLA en sık atlanan yetki hatalarıdır; rate limit, şema ve envanter ile tamamlayın. OWASP API Top 10'u ekip içinde ortak dil yapın.



Ek: Partner API ve Versiyonlama Notları
Dışarıya açılan partner API'lerinde ek olarak:
  • İstemci kimliği başına ayrı kimlik bilgisi ve scope
  • IP allowlist (mümkünse) + mTLS (yüksek güvenlikli B2B)
  • Değişiklik yönetimi: breaking change için yeni versiyon
  • Eski versiyonun kapatılma tarihi (inventory ile bağlantılı)

Kod:
# Scope örneği Authorization: Bearer ... # token içinde scope: "orders:read" # orders:write gerektiren endpoint'te reddedin

Kod:
# Sayfalama tavanı GET /api/orders?limit=1000 -> 400 Bad Request (max 50)

[center][/center]

API Top 10 maddelerini sprint Definition of Done listesine tek satırlık kontroller olarak eklemek, "sonra bakarız" riskini azaltır.

Kaynakça
Yasal Uyarı
API testleri yalnızca kendi sistemleriniz veya yazılı pentest yetkisi kapsamında yapılmalıdır. İzinsiz API tarama ve veri erişimi TCK 243-245 kapsamında suç olabilir. Eğitim amaçlıdır.

Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).


Ek DosyalarEkran Görüntüleri
   
Cevapla



Hızlı Menü: