Çoğu panel sahibi güvenliği giriş kapısında bitmiş sanır. Şifre güçlü, iki faktör açık, oturum süreli; dolayısıyla içeride her şey yolunda kabul edilir. Oysa sahada gördüğümüz en pahalı açıklar kapıda değil, koridorda oluşuyor. Geçerli bir bayi hesabıyla giren biri, adres çubuğundaki tek bir sayıyı değiştirerek başka bayinin siparişini görebiliyorsa; ya da gizlenmiş bir menü öğesinin arkasındaki uç noktaya doğrudan istek atıp fiyat listesini değiştirebiliyorsa, kimlik doğrulamanın hiçbir önemi kalmaz.
Bu yazıda bir e-pin scripti üzerinde yetki yükseltme açıklarını nasıl sistematik biçimde arayacağını anlatıyoruz. Yatay ve dikey yükselmenin farkı, IDOR testinin somut adımları, arayüzde saklamanın neden güvenlik olmadığı, API ve webhook uçlarında kaçırılan kontroller ve bulduklarını kalıcı olarak kapatmak için kurman gereken merkezi yetki katmanı. Kendi yazılımını geliştiriyorsan bu bir yol haritası; Pinova gibi lisanslı bir e-pin satış yazılımı kullanıyorsan yine de bu testleri yapmalısın, çünkü kendi eklentin ve özelleştirmen bu katmanı delebilir.
Yatay mı dikey mi: neyi aradığını biliyor musun?
İki ayrı sorunu tek isimle anmak, testin en yaygın hatasıdır. Yatay yükselme, aynı seviyedeki başka bir kullanıcının verisine erişmektir: bayi A'nın bayi B'nin siparişini, faturasını, müşteri listesini görmesi. Dikey yükselme ise seviyenin üstüne çıkmaktır: bayinin yönetici işlevini çalıştırması, fiyat tanımlaması, bakiye eklemesi, kullanıcı rolü değiştirmesi.
Ayrımı bilmek testi yönlendirir. Yatay açıklar neredeyse her zaman nesne kimliğinin sahipliğinin doğrulanmamasından doğar; sorgu "bu kayıt var mı" diye bakar, "bu kayıt bu kullanıcıya mı ait" diye bakmaz. Dikey açıklar ise rol kontrolünün merkezî olmamasından, her denetleyicide elle tekrarlanmasından doğar. Bir yerde if bloğu yazmayı unuttun ve kapı orada açık kaldı. Bu yüzden dikey testleri, kodda tekrarın en yoğun olduğu yeni eklenmiş özelliklerde yoğunlaştırmalısın.
IDOR testini nasıl elle yaparsın?
Kuruluma iki test bayisi aç: A ve B. Her ikisiyle de birer sipariş oluştur, birer destek talebi yaz, birer fatura üret. Sonra A'nın tarayıcı oturumuyla, B'ye ait kayıtların kimliklerini tek tek dene. Sipariş detayı, fatura indirme, destek talebi görüntüleme, kod listesi, log kaydı, dosya eki. Dönen yanıt 200 ise ve içerik B'ye aitse bulgunu yazdın.
Dikkat edilmesi gereken üç incelik var. Birincisi, sayfa boş görünse bile ağ sekmesindeki JSON yanıtına bak; arayüz veriyi göstermese de uç nokta göndermiş olabilir. İkincisi, yalnızca GET ile yetinmeyin; silme, güncelleme ve iptal uçlarını da dene, en tehlikeli bulgular oralardadır. Üçüncüsü, kimlik alanı gövdedeyse orayı da değiştir; birçok dijital ürün satış scripti URL'deki kimliği doğrular ama form gövdesindeki ikinci kimliği sessizce güvenilir kabul eder.
| Test senaryosu | Beklenen doğru davranış | Yanlış davranış işareti | Risk |
|---|---|---|---|
| Başka bayinin sipariş kimliğini çağırmak | 404 veya 403 | 200 ve dolu içerik | Kritik |
| Gizlenmiş yönetici uç noktasına doğrudan istek | 403 | İşlemin gerçekleşmesi | Kritik |
| Form gövdesindeki kullanıcı kimliğini değiştirmek | Sunucunun oturumdan okuması | Gövdeye güvenilmesi | Kritik |
| Kendi rolünü istek içinde admin olarak göndermek | Alanın yok sayılması | Rolün güncellenmesi | Kritik |
| Başkasının fatura PDF'ini indirmek | 403 | Dosyanın inmesi | Yüksek |
| Süresi geçmiş oturum çerezini yeniden kullanmak | Oturumun reddi | Erişimin devamı | Yüksek |
| Alt kullanıcıyla üst hesabın limitini değiştirmek | 403 | Limitin değişmesi | Yüksek |
| API anahtarıyla kapsam dışı uca istek | 403 ve kayda düşme | Yanıt dönmesi | Yüksek |
Arayüzde gizlemek güvenlik sayılır mı?
Sayılmaz ve bu, denetimlerde en sık rastladığımız yanılgıdır. Menü öğesini role göre gizlemek bir kullanıcı deneyimi kararıdır, yetki kararı değildir. Tarayıcıda gizlenen bağlantının adresi kaynak kodda, JavaScript paketinde ya da bir eski ekran görüntüsünde duruyordur. Saldırgan menüyü hiç kullanmaz; isteği doğrudan atar.
Kural nettir: yetki kontrolü sunucuda, veriye dokunan katmanın hemen önünde yapılmalıdır. Şablon içinde rol sormak yerine, isteği karşılayan her uç noktanın başında hem kimliği hem sahipliği hem de eylem iznini doğrulayan tek bir merkezi kapı olmalı. Daha iyisi, varsayılanı "reddet" yapıp izin verilen eylemleri tek tek beyan etmektir. Böylece yeni bir özellik eklediğinde unuttuğun yer açık kalmaz, kapalı kalır; hata yönü seni korur. İyi tasarlanmış bir dijital ürün satış yazılımı bu kapıyı çerçeve düzeyinde zorunlu kılar.
Denetimlerde bulunan yetki açıklarının türü
- Sahiplik doğrulanmayan nesne erişimi (IDOR) 42%
- Uç noktada eksik rol kontrolü 28%
- İstek gövdesindeki alanlara güvenme 18%
- API anahtarı kapsam ihlali 12%
API ve webhook uçları neden en çok kaçırılan yer?
Web arayüzünü dikkatle koruyup API tarafını unutmak klasik bir kör noktadır. Bayilerine entegrasyon için anahtar veriyorsan, o anahtarın kapsamı olmak zorundadır: hangi uçlara erişebilir, hangi işlemleri yapabilir, hangi IP'den gelebilir, saatte kaç istek atabilir. Kapsam tanımlamadığın anahtar, pratikte o hesabın tam yetkili ikinci şifresidir ve bir kere sızdığında iptal edene kadar her şeyi yapabilir.
Webhook tarafında ise iki test yap. Birincisi imza doğrulaması: imzayı bozup istek at, kabul ediliyorsa ödeme bildirimini taklit edebiliyorlar demektir. İkincisi tekrar oynatma: geçerli bir bildirimi aynen ikinci kez gönder, sistem aynı siparişi ikinci kez tamamlıyorsa bakiye üretme açığın var. Zaman damgası penceresi ve tek kullanımlık kimlik kontrolü bu iki testi kapatır. Bunlar bir epin yazılım kurulumunda gözden kaçtığında, zararı doğrudan stoktan ve kasadan çıkar.
Yalnızca başarılı işlemleri loglamak, keşif aşamasını tamamen görmezden gelmek demektir. 403 yanıtlarını hesap bazında say; aynı bayiden dakikalar içinde onlarca ret geliyorsa bu bir hata değil, tarama girişimidir.
Bulguları nasıl kalıcı olarak kapatırsın?
Tek tek yama atmak, aynı açığı altı ay sonra başka bir ekranda yeniden görmenin garantisidir. Kalıcı çözüm, yetki mantığını denetleyicilerden çıkarıp tek bir politika katmanına taşımaktır: "bu kullanıcı, bu nesne üzerinde, bu eylemi yapabilir mi?" sorusunu tek bir yerde yanıtlarsın. Sorgu düzeyinde de kapsamı daralt; listeleri baştan hesap kimliğiyle filtreleyen yöntemler kullan, sonradan kontrol etmeye güvenme.
Üstüne iki alışkanlık ekle. Birincisi regresyon testi: bulduğun her açık için, ikinci bir hesabın o kaydı çağırdığında 403 aldığını doğrulayan otomatik bir test yaz. Böylece açık bir daha geri gelmez. İkincisi sürüm öncesi kontrol listesi; her yeni ekran ve her yeni uç nokta yayına çıkmadan önce yatay ve dikey testten geçer. Yapman gereken şey kahramanlık değil, tekrarlanabilir bir rutin. Bu rutini kurduğunda, hangi e-pin satış scripti üzerinde çalıştığından bağımsız olarak risk eğrini kalıcı biçimde aşağı çekersin.
| Kontrol | Nasıl doğrulanır | Sıklık |
|---|---|---|
| Her uç noktada sahiplik doğrulaması | İkinci hesapla kimlik denemesi | Her sürüm |
| Varsayılan reddet politikası | Yetkisiz rolle tüm uçların taranması | Her sürüm |
| İstek gövdesindeki kimlik/rol alanlarının yok sayılması | Manipüle edilmiş gövde ile istek | Her sürüm |
| Liste sorgularının hesap bazında filtrelenmesi | Kod incelemesi ve sorgu logu | Aylık |
| API anahtarı kapsamı ve IP kısıtı | Kapsam dışı uca istek | Aylık |
| Webhook imza ve tekrar oynatma koruması | Bozuk imza ve çift gönderim | Aylık |
| 403 yanıtlarının izlenmesi ve uyarı eşiği | Log paneli üzerinden | Sürekli |
| Bulgular için regresyon testi | Otomatik test paketi | Sürekli |
| Rol ve yetki matrisinin yazılı olması | Doküman gözden geçirme | Üç aylık |
Yetki katmanını sıfırdan kurmak yerine hazır olanı denetle
Pinova; merkezi rol ve yetki matrisi, sahiplik doğrulamalı sorgu kapsamları, kapsamlı API anahtarları ve imzalı webhook altyapısıyla gelir.
Yetki testi yapmak için sızma testi uzmanı olmam gerekir mi?
Gerekmez. İki test hesabı, tarayıcının ağ sekmesi ve sabırlı bir kontrol listesiyle en yaygın açıkların büyük kısmını bulabilirsin. Derin testleri sonra profesyonele bırakırsın.
Menüyü rolüne göre gizlemek yeterli değil mi?
Değil. Gizleme yalnızca görünürlüğü etkiler; uç noktanın adresini bilen biri isteği doğrudan atabilir. Kontrol her zaman sunucu tarafında, veriye erişimden önce yapılmalıdır.
Testleri canlı sistemde yapabilir miyim?
Silme ve güncelleme denemelerini canlıda yapma. Kopya bir kurulumda veya hazırlık ortamında çalış; yalnızca okuma testlerini, kendi açtığın test hesaplarıyla ve düşük hacimde canlıda yürütebilirsin.
Açık bulduğumda önce neyi düzeltmeliyim?
Para ve stok hareketine dokunan uçları: bakiye, çekim, fiyat tanımı, kod listesi ve sipariş iptali. Ardından kişisel veriye erişen okuma uçlarını kapat.
Yetki yükseltme, e-pin işinde sessiz ilerleyen bir hasardır: kimse kapıyı kırmaz, biri koridorda yanlış odaya girer ve aylarca fark edilmez. Bu yüzden testi bir defalık proje değil, her sürümün parçası yap. Kendi kurulumunda hangi kontrollerin hazır geldiğini karşılaştırmak istersen özellik listesini ve fiyat seçeneklerini incele, sonra rol matrisini ve bayi panelinin sınırlarını canlı demo üzerinde bizzat zorlayarak gör.

