Penligent Başlık

IDOR Nedir? Bu Yaygın Güvenlik Riskine İlişkin Basit Bir Kılavuz

Güvensiz Doğrudan Nesne Referansının (IDOR) ne anlama geldiğini, saldırganların bundan nasıl yararlandığını ve geliştiricilerin güvenli kodlama uygulamaları, erişim kontrol modelleri ve otomatik test platformları kullanarak IDOR güvenlik açıklarını nasıl önleyebileceklerini öğrenin.

IDOR Nedir?

Güvensiz Doğrudan Nesne Referansı (IDOR), bir uygulamanın kullanıcı kimlikleri, sipariş numaraları veya dosya adları gibi dahili nesne tanımlayıcılarını, talep edenin bu nesneye erişim yetkisi olup olmadığını doğrulamadan ifşa ettiği bir güvenlik açığıdır. Bir URL veya API çağrısındaki bir parametreyi değiştirerek, bir saldırgan erişmemesi gereken verileri görüntüleyebilir, değiştirebilir veya silebilir.

IDOR'u Anlamak: Bu Güvenlik Açığı Neden Hala Önemli?

IDOR, aşağıdaki geniş kategoriye aittir Bozuk Erişim KontrolüOWASP'ın yıllardır en kritik web güvenliği risklerinden biri olarak sıraladığı IDOR. IDOR'un tehlikesi basitliğinde yatmaktadır: saldırganın gelişmiş istismar tekniklerine, yük kodlamasına veya ayrıcalık yükseltmeye ihtiyacı yoktur. Değiştirilen tek bir parametre -genellikle sadece bir sayı- özel bilgileri açığa çıkarabilir.

Tipik bir savunmasız model şuna benzer:

bash

/api/user/profile?id=1002

Uygulama sahiplik veya yetkilendirmeyi doğrulamazsa, kimliği 1003 başka bir kullanıcının verilerini ifşa edebilir.

Modern uygulamalar (özellikle API'ler, mikro hizmetler veya mobil istemcileri içerenler) genellikle büyük ölçüde parametrelendirilmiş nesne erişimine dayanır. Bu mimari hızlı ve esnek olmakla birlikte, yetkilendirme kontrolleri tutarsız veya eksik olduğunda kolayca IDOR'a neden olabilir.

IDOR WordPress

CVE-2025-13526: Vahşi Doğada Gerçek Dünyadan Bir IDOR Vakası

IDOR istismarının en son yüksek görünürlüklü örneklerinden biri CVE-2025-13526popüler WordPress eklentisi OneClick Chat to Order'ı (sürüm ≤ 1.0.8) etkiliyor.

  • Güvenlik açığı eklentinin wa_order_thank_you_override fonksiyon. Eklenti, bir order_id parametresini URL sorgu dizesinden - talebin siparişin gerçek sahibinden gelip gelmediğini kontrol etmeden.
  • Saldırganlar (kimliği doğrulanmamış olanlar bile) basitçe order_id "teşekkür" sayfası URL'sindeki değer (örn. order_id=123456 için order_id=123455) ve diğer müşterilerin sipariş detaylarını alabilir. Açığa çıkan veriler şunları içeriyordu isimler, e-posta adresleri, telefon numaraları, fatura/nakliye adresleri, sipariş kalemleri ve fiyatları, ödeme yöntemi meta verileri. wiz.io+2Gowri Infosec+2
  • Sipariş kimlikleri sıralı ve öngörülebilir olduğundan, toplu numaralandırma önemsiz hale geldi - yani bir saldırgan veya otomatik komut dosyası binlerce siparişi dakikalar içinde toplayabilir. Orta+1
  • Güvenlik açığına CVSS v3.1 temel puanı olan 7.5 (Yüksek) atanmıştır ve bu puan istismarın kolaylığını (yetkilendirme gerekmez) ve veri maruziyetinin ciddiyetini yansıtmaktadır.
  • Geliştirici sorunu sürümde düzeltti 1.0.9Sadece hak sahiplerinin (veya yetkili kullanıcıların) sipariş verilerini görüntüleyebilmesini sağlamak için uygun yetkilendirme kontrolleri uygulayarak. Site sahiplerine derhal yükseltme yapmaları çağrısında bulunuldu. Gowri Infosec+1

Gerçek dünyadaki bu ihlal, IDOR'un teorik veya eski bir hata olmadığını göstermektedir - canlı, istismar edilebilir ve potansiyel olarak ciddi gizlilik ve uyumluluk sonuçları vardır.

CVE-2025-13526: Vahşi Doğada Gerçek Dünyadan Bir IDOR Vakası Penligent

IDOR'un Meydana Geldiği Yaygın Gerçek Dünya Senaryoları

IDOR, kullanıcı kontrollü girdi yoluyla dahili nesnelere referans veren herhangi bir sistemde görünebilir. Aşağıda yaygın bağlamlar verilmiştir:

Uygulama TürüNesne ÖrneğiIDOR Neden Oluşur?
Hesap sistemleriuserIdKullanıcı tanımlayıcılarını doğrudan açığa çıkarma
E-ticaret uygulamalarıorderIdMülkiyetin yanlış doğrulanması
Dosya yönetimidosyaIdDosyalar için erişim kontrolü eksikliği
Biletleme platformlarıticketIdKullanıcılar diğer kullanıcıların biletlerine erişir
SaaS çok kiracılı uygulamalarkiracıIdKiracılar arası veri sızıntıları

Saldırganlar genellikle öngörülebilir kimlikleri numaralandırır, sıralı kimlikleri dener veya kimliği doğrulanmış istekleri değiştirilmiş parametrelerle yeniden oynatır.

Saldırganlar IDOR'u Nasıl İstismar Ediyor (Güvenli, Kontrollü Örnekler)

Aşağıdakiler güvenli̇ i̇llüstrasyon örnekleri̇ tipik savunmasız kalıpları ve bunların güvenli karşılıklarını gösterir. Bunlar zararlı istismarlar değildir; geliştiricilerin güvenli olmayan kalıpları tanımalarına yardımcı olmak için yaygın hataları modellemektedir.

Örnek 1: Node.js / Express'te IDOR

javascript

// ❌ Savunmasız Örnek: kullanıcı tarafından sağlanan kimliğe güvenme

app.get('/api/user/profile', (req, res) => {

const userId = req.query.id;

db.users.findById(userId).then(user => {

res.json(kullanıcı);

});

});

// ✅ Güvenli Örnek: yetkilendirmeyi zorla

app.get('/api/user/profile', (req, res) => {

const authenticatedId = req.user.id;

db.users.findById(authenticatedId).then(user => {

if (!user) return res.status(404).json({ error: "User not found" });

res.json({ id: user.id, email: user.email, role: user.role });

});

});

Örnek 2: Python / Flask'ta Yaygın Bir Kalıp

python

#❌ Güvensiz: sahiplik doğrulaması yok

@app.get("/invoice")

def get_invoice():

invoice_id = request.args.get("id")

return get_invoice_by_id(invoice_id)

#✅ Güvenli: izin kontrolü eklendi

@app.get("/invoice")

def get_invoice_secure():

invoice_id = request.args.get("id")

user_id = session["user_id"]

invoice = get_invoice_by_id(invoice_id)

if invoice.owner_id != user_id:

return {"hata": "Unauthorized"}, 403

iade faturası

Örnek 3: Arka Uç ve Ön Uç Kombine Savunma (Java + React)

Java (Spring Boot)

java

// ❌ Eksik yetkilendirme kontrolü

@GetMapping("/orders")

public Order getOrder(@RequestParam String orderId) {

return orderRepository.findById(orderId);

}

// ✅ Güvenli uygulama

@GetMapping("/orders")

public ResponseEntity getOrder(

@RequestParam String orderId,

Principal principal) {

Order sipariş = orderRepository.findById(orderId);

if (!order.getUser().equals(principal.getName())) {

return ResponseEntity.status(HttpStatus.FORBIDDEN)

.body(Collections.singletonMap("error", "Access denied"));

}

return ResponseEntity.ok(order);

}

React tarafı güvenli istek

javascript

async function fetchOrder(orderId) {

const res = await fetch(/orders?orderId=${orderId}, {

headers: { "Authorization": Bearer ${localStorage.getItem("token")} }

});

if (!res.ok) throw new Error("Yetkisiz veya bulunamadı");

return res.json();

}

IDOR Güvenlik Açıklarını Tespit Etme: Pratik Geliştirici Yaklaşımları

IDOR'u bulmak genellikle onu istismar etmekten daha zordur. Enjeksiyon güvenlik açıklarının aksine, IDOR her zaman bariz teknik hatalar üretmez; belirtileri mantıksal ve davranışsaldır.

Yaygın tespit teknikleri şunları içerir:

  1. Diferansiyel fuzzing (birden fazla ID'nin test edilmesi)
  2. Yeniden oynatma testi (yakalama → değiştirme → yeniden oynatma)
  3. Çok kullanıcılı rol değiştirme
  4. Parametre numaralandırma

Güvenli fuzzing sözde kodu:

python

Basit güvenli fuzzing örneği

ids = ["1001", "1002", "1003"]

için i in ids:

res = client.get(f"/api/user/profile?id={i}")

print(i, res.status_code, len(res.text))

IDOR'u Önleme: Geliştiricilerin Uyması Gereken En İyi Uygulamalar

IDOR'un önlenmesi gizleme ile ilgili değildir - bu yetkilendirmesunucu düzeyinde tutarlı bir şekilde gerçekleştirilmiştir.

İstemciden gelen nesne tanımlayıcılarına asla güvenmeyin

Her parametre değiştirilebilir. Şifrelenmiş kimlikler bile kurcalanabilir.

Her istekte sunucu tarafı yetkilendirmesini zorunlu kılma

Tanınmış erişim kontrol modellerini kullanın:

  • RBAC (Rol Tabanlı Erişim Kontrolü)
  • ABAC (Öznitelik Tabanlı Erişim Kontrolü)
  • ACL'ler (Erişim Kontrol Listeleri)
  • Kod olarak politika gibi sistemler OPA

Yetki kaynakları:

PortSwigger Web Güvenlik Akademisi: https://portswigger.net/web-security/access-control

Numaralandırılamayan tanımlayıcıları tercih edin

UUID'ler IDOR riskini azaltır ancak ortadan kaldırmaz.

Çok kiracılı ortamlarda kiracı sınırlarını doğrulama

Kiracılar arası IDOR en ağır ve maliyetli formlardan biridir.

Backend-for-Frontend (BFF) katmanı kullanın

Bir BFF, yetkilendirme mantığını merkezileştirerek istemciler arasındaki tutarsızlıkları azaltabilir.

Ek Gelişmiş Örnekler

Örnek 4: Eksik Yetkilendirme ile Go API

git

// ❌ Savunmasız işleyici

func GetDocument(w http.ResponseWriter, r *http.Request) {

id := r.URL.Query().Get("id")

doc := db.FindDocument(id)

json.NewEncoder(w).Encode(doc)

}

// ✅ Sahiplik doğrulaması ile

func GetDocumentSecure(w http.ResponseWriter, r *http.Request) {

id := r.URL.Query().Get("id")

user := r.Context().Value("user").(string)

doc := db.FindDocument(id)

if doc.Owner != user {

http.Error(w, "Unauthorized", http.StatusForbidden)

dönüş

}

json.NewEncoder(w).Encode(doc)

}

Örnek 5: GraphQL Uç Noktaları ve Nesne Yetkilendirmesi

javascript

// ❌ Savunmasız çözümleyici

const çözümleyiciler = {

Sorgu: {

order: (_, { id }) => db.getOrder(id),

}

};

// ✅ Sahiplik kontrolü ile güvenli çözümleyici

const resolversSecure = {

Sorgu: {

order: (_, { id }, context) => {

const order = db.getOrder(id);

if (order.owner !== context.user.id) {

yeni Hata("Erişim reddedildi") atar;

}

iade emri;

}

}

};

Örnek 6: Rust'ta Güvenli Erişim (Actix Web)

pas

// ❌ Savunmasız

async fn get_ticket(path: web::Path) -> impl Responder {

let id = path.into_inner();

let ticket = db::find_ticket(&id);

web::Json(ticket)

}

// ✅ Güvenli versiyon

async fn get_ticket_secure(

path: web::Path,

kullanıcı LoggedInUser

) -> impl Yanıtlayıcı {

let id = path.into_inner();

let ticket = db::find_ticket(&id);

if ticket.owner != user.id {

return HttpResponse::Forbidden().json("Erişim reddedildi");

}

HttpResponse::Ok().json(ticket)

}

IDOR Tespitini Otomatikleştirme: Geleneksel Araçlar Neden Zorlanıyor?

Çoğu geleneksel güvenlik açığı tarayıcısı IDOR'u güvenilir bir şekilde tespit edemez çünkü IDOR, tarayıcıların geleneksel olarak yapamadığı iki şeyi gerektirir:

  1. İş mantığı farkındalığı
  2. Bağlamsal çoklu kullanıcı testi

Yalnızca imza tabanlı algılamaya veya tek kullanıcılı isteklere dayanan tarama araçları, özellikle API'lerde IDOR'u genellikle tamamen gözden kaçırır.

Penligent IDOR'un Otomatik Olarak Belirlenmesine Nasıl Yardımcı Olur?

İşte burası PenligentYapay zeka odaklı bir sızma testi platformu olan Penligent, benzersiz bir avantaj sağlar. Geleneksel tarayıcıların aksine, Penligent gerçekleştirir:

  • Otomatik çok kullanıcılı simülasyon
  • Nesneler arası parametre çıkarımı
  • Akıllı kimlik desenleri tanıma
  • Davranışsal diferansiyel analiz
  • Gözlenen yanıtlara göre uyarlanan yapay zeka bulanıklaştırma

Penligent'ın güvenli, anonimleştirilmiş algılama çıktısının bir örneği:

vbnet

`Potansiyel IDOR tespit edildi:Bitiş noktası: /orders?id=1002Gözlenen davranış:

  • A Kullanıcısı #1003 Siparişini aldı (B Kullanıcısına ait)Risk: Başka bir kullanıcının verilerine yetkisiz erişim

Bu tür bir içgörüye sadece statik araçlarla veya manuel incelemeyle ulaşmak zordur.

Penligent ile CI/CD Kapsamında IDOR Risklerini Azaltma

Penligent, CI/CD boru hatlarına doğal bir şekilde entegre olur ve sürekli kapsama alanı sağlar:

  • API ve rota otomatik keşfi
  • Gerçek zamanlı izin matrisi çıkarımı
  • Evreleme ve üretim benzeri ortamların taranması
  • Güvenli, tekrarlanabilir PoC dizilerinin otomatik olarak oluşturulması

Bu azaltır:

  • İşletme mantığının kör noktaları
  • Çok kiracılı maruziyet
  • Düzenleyici riskler (GDPR, HIPAA, SOC2)

Sonuç: IDOR Basit Ama Yıkıcı Ve Önlenebilir

IDOR, erişim kontrolü güvenlik açıklarının en yaygın ve zarar verici biçimlerinden biri olmaya devam etmektedir. İş mantığı içinde gizlendiğinden, genellikle geleneksel araçları atlatır. Tutarlı yetkilendirme kontrolleri uygulayarak, öngörülemeyen tanımlayıcılar kullanarak, kiracı sınırlarını doğrulayarak ve Penligent gibi otomatik test platformlarını benimseyerek kuruluşlar büyük ölçekli veri açığa çıkma riskini önemli ölçüde azaltabilir.

IDOR tesadüfen veya iyi niyetle tamamen ortadan kaldırılamaz; yapılandırılmış erişim kontrolü, tutarlı mühendislik ilkeleri ve sürekli test gerektirir.

Gönderiyi paylaş:
İlgili Yazılar