Stronger_Cracker
- 25 Tem 2022
- 6,410 Mesaj
Aktiflik
Seviye
Deneyim
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.
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.
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ı.
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.
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
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
