Hoşgeldin Misafir

Cross-Origin Resource Sharing "CORS" Yapılandırmalarında Yaygın Hatalar ve Riskler

Stronger_Cracker

25 Tem 2022
6,410 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Selamunaleyküm,

Cross-Origin Resource Sharing (CORS), modern web uygulamalarında tarayıcıların aynı origin politikası (Same-Origin Policy) nedeniyle engellediği kaynaklar arası HTTP taleplerine izin vermek için kullanılan bir mekanizmadır. CORS, doğru yapılandırıldığında güvenli bir şekilde API ve kaynak paylaşımını mümkün kılar; yanlış yapılandırıldığında ise ciddi veri sızıntısı ve yetkisiz erişim riskleri ortaya çıkar.

CORS Temelleri

CORS, istemci tarafında tarayıcı tarafından uygulanır ve üç temel HTTP başlığı ile çalışır:
Access-Control-Allow-Origin (ACAO): Kaynağa hangi origin’lerin erişebileceğini belirtir.
Access-Control-Allow-Methods: Hangi HTTP metodlarının (GET, POST, PUT vb.) kabul edileceğini belirler.
Access-Control-Allow-Headers: İsteğin hangi özel header’ları kullanabileceğini belirtir.

Tarayıcı, “preflight” adı verilen bir OPTIONS isteği göndererek, sunucunun izin verdiği metod ve header’ları kontrol eder. Yanlış yapılandırma burada ciddi güvenlik açıklarına yol açabilir.

Hatalar ve Riskler


Wildcard (*) Kullanımı

Access-Control-Allow-Origin: *

Sorun: Her kaynaktan gelen isteğe izin verir. Eğer endpoint hassas veri içeriyorsa, kötü niyetli bir site bu veriyi çalabilir.
Risk: Oturum çalma, kullanıcı verilerinin sızdırılması.

Yanlış Yöntem ve Header İzinleri

Access-Control-Allow-Methods: GET, POST, DELETE, PUT
Access-Control-Allow-Headers: *

Sorun: Tüm metod ve header’lara izin vererek saldırganın API’yi kötüye kullanmasına zemin hazırlar.

Risk: Veri manipülasyonu, yetkisiz kaynak güncellemeleri.

Dinamik Origin Kontrolü Hataları

const allowedOrigins = ['https://example.com'];
const origin = req.headers.origin;
if(allowedOrigins.includes(origin)) {
res.setHeader('Access-Control-Allow-Origin', origin);
}

Sorun: Regex veya string karşılaştırmaları hatalı yapılırsa saldırgan izin verilen bir origin gibi davranabilir.
Risk: API’ye yetkisiz erişim ve veri sızıntısı.

Örneğin:

Session Hijacking: Eğer ACAO: * kullanılmışsa ve tarayıcı çerezleri ile oturum doğrulaması yapılıyorsa, kötü niyetli bir site kullanıcının oturum bilgilerini çalabilir.

API Kötüye Kullanımı: Yanlış yöntem ve header izinleri, saldırganın DELETE veya PUT metodlarıyla veri üzerinde kontrol sağlamasına yol açabilir.

Güvenli CORS Uygulamaları

Spesifik Origin Listesi Kullanımı

Access-Control-Allow-Origin:https://trustedsite.com

Sadece Gerekli HTTP Metodlarına İzin Verme

Access-Control-Allow-Methods: GET, POST

Header’ları Sınırlandırma


Access-Control-Allow-Headers: Content-Type, Authorization

Dynamic Origin Doğrulamasında Güvenli Regex Kullanımı

if(/^https:\/\/(www\.)?trustedsite\.com$/.test(origin)) {
res.setHeader('Access-Control-Allow-Origin', origin);
}

Credential Desteğini Sadece Güvenli Origin’ler İçin Açma

Access-Control-Allow-Credentials: true