Cross-Origin Resource Sharing (CORS) Test Rehberi

CORS (Cross-Origin Resource Sharing) Nedir?

CORS (Cross-Origin Resource Sharing), web tarayıcılarının ve sunucularının, bir kaynağın (örneğin bir API'nin) farklı bir kökenden (origin) gelen web sayfaları tarafından erişilmesini kontrol eden bir güvenlik mekanizmasıdır. Web standartlarına göre, bir web sayfası sadece aynı kökenden (protokol, domain ve port) gelen kaynaklara erişebilir. Ancak, bazı durumlarda, bir web uygulaması farklı kökenlerden gelen verileri kullanmak isteyebilir. İşte bu noktada CORS devreye girer.

CORS, sunucuların, belirli kökenlerden gelen istekleri kabul etmelerine ve güvenli bir şekilde işlemelerine olanak tanır. Sunucu, CORS başlıkları kullanarak hangi kökenlerin erişime izin verildiğini belirler. Bu başlıklar, tarayıcıların hangi kaynaklara izin verileceğini ve hangi HTTP yöntemlerinin desteklendiğini anlamalarına yardımcı olur.

CORS Vulnerability Test (CORS Zafiyeti Testi) Nedir?

CORS zafiyeti testi, bir uygulamanın CORS yapılandırmasının güvenliğini değerlendirmeyi amaçlayan bir test türüdür. Yanlış yapılandırılmış CORS ayarları, saldırganların yetkisiz kaynaklara erişim sağlamasına veya hassas verilere ulaşmasına neden olabilir. Bu tür testler, aşağıdaki alanlarda potansiyel güvenlik açıklarını tespit etmeye yardımcı olabilir:

  1. Genişletilmiş Kaynak Erişimi: Sunucunun, köken denetimlerini yeterince kısıtlamadan çeşitli kökenlerden gelen isteklere izin vermesi.
  2. Genel Erişim İzinleri: "Access-Control-Allow-Origin" başlığında "*", yani tüm kökenlere izin veren ayarların bulunması.
  3. Yanlış Yöntem İzinleri: Sunucunun, CORS istekleri için uygun HTTP yöntemlerini (GET, POST, PUT, DELETE, vb.) doğru şekilde sınırlamaması.
  4. Eksik Başlıklar: CORS isteklerine uygun başlıkların eklenmemesi veya yanıtların yeterince güvenli olmaması.

Bu testler genellikle güvenlik uzmanları veya siber güvenlik araçları tarafından yapılır ve bir uygulamanın CORS yapılandırmasının güvenli olduğunu doğrulamak veya potansiyel güvenlik açıklarını belirlemek için kullanılır.

Cross-Origin Resource Sharing (CORS) Güvenlik Analizi

CORS, web tarayıcılarının farklı alan adlarından gelen HTTP isteklerini güvenli bir şekilde yönetmesine olanak tanır. Yanlış yapılandırmalar, çeşitli güvenlik açıklarına yol açabilir.

Access-Control-Allow-Origin 

Bu başlık, hangi alan adlarından gelen isteklerin işleme alınabileceğini belirler. Yanlış yapılandırıldığında, tüm alan adlarına izin verilmesi, hassas verilere yetkisiz erişime neden olabilir.

Örnek:

HTTP/1.1 200 OK Access-Control-Allow-Origin: https://trustedwebsite.com

Yanlış yapılandırma örneği:

HTTP/1.1 200 OK Access-Control-Allow-Origin: *

Bu durumda, tüm alan adlarından gelen istekler kabul edilir.

Access-Control-Allow-Credentials 

Bu başlık, kimlik doğrulama bilgileri içeren isteklerin yönetimini sağlar. true olarak ayarlandığında, Access-Control-Allow-Origin başlığı belirli bir alan adı içermelidir. Aksi takdirde, kimlik doğrulama bilgileri yetkisiz alanlara sızabilir.

Örnek:

HTTP/1.1 200 OK Access-Control-Allow-Origin: https://trustedwebsite.com Access-Control-Allow-Credentials: true

Yanlış yapılandırma:

HTTP/1.1 200 OK Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true

Bu yapılandırma, herhangi bir alan adından gelen kimlik doğrulama bilgilerini açığa çıkarabilir.

Pre-flight İstekleri

CORS isteklerinden önce yapılan pre-flight istekleri, özellikle DELETE, PUT gibi hassas HTTP metodları için sunucudan izin alınmasını sağlar.

Örnek Pre-flight İsteği:

OPTIONS /api/resource HTTP/1.1 Origin: https://clientwebsite.com Access-Control-Request-Method: POST Access-Control-Request-Headers: Content-Type

Sunucu yanıtı:

HTTP/1.1 204 No Content Access-Control-Allow-Origin: https://clientwebsite.com Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Headers: Content-Type

Yerel Ağ İsteklerinde Pre-flight İsteği

Yerel ağlarda yapılan CORS isteklerinin güvenliği, IP bazlı izinlerle sağlanmalıdır.

Örnek:

OPTIONS http://192.168.1.100/api/data Origin: http://192.168.1.50 Access-Control-Request-Method: GET

Sömürülebilir Yanlış Yapılandırmalar

Yanlış yapılandırmalar, çeşitli güvenlik açıklarına neden olabilir. Örneğin, tüm alan adlarına izin veren yapılandırmalar, kimlik doğrulama bilgilerini sızdırabilir.

Örnek Sömürü:

fetch('https://vulnerablewebsite.com/api/data', { method: 'GET', credentials: 'include' }) .then(response => response.json()) .then(data => console.log(data));

Ağ Konumlandırma Olarak Kimlik Doğrulama Sömürüsü

Ağ konumlandırmaya dayalı kimlik doğrulama, belirli ağlardan gelen istekleri yönetir. Ancak, bu yöntemdeki yanlış yapılandırmalar, IP adreslerinin sahte olarak gösterilmesine neden olabilir.

Origin Değerinin Yansıması

Access-Control-Allow-Origin başlığında yansıyan origin değeri, güvenlik açıklarına yol açabilir.

Örnek:

Access-Control-Allow-Origin: <script>alert('XSS')</script>

Origin'in Null Değeri

null olarak ayarlanmış origin değeri, geniş çaplı erişim risklerine neden olabilir.

Örnek:

Access-Control-Allow-Origin: null

Düzenli İfade Bypass Teknikleri

Düzenli ifadeler kullanılarak yapılan güvenlik kontrolleri, çeşitli bypass teknikleri ile aşılabilir.

Örnek Bypass:

let blockedOrigins = /^https:\/\/(malicious\.com|evilsite\.org)$/; let origin = 'https://sub.malicious.com'; if (!blockedOrigins.test(origin)) { // Passes the regex test }

Gelişmiş Düzenli İfade Bypassları

Daha karmaşık düzenli ifade bypassları, güvenlik kontrollerinin atlatılmasına olanak tanır.

Örnek:

let blockedOrigins = /^https:\/\/(?:[^\.]+\.)?(malicious\.com|evilsite\.org)$/; let origin = 'https://malicious%2ecom'; if (!blockedOrigins.test(decodeURIComponent(origin))) { // Bypasses the regex check }

Alt Alan Adında XSS

Alt alan adlarında bulunan XSS açıkları, geniş çaplı güvenlik riskleri oluşturabilir.

Örnek:

<script src="http://subdomain.vulnerablewebsite.com/evil.js"></script>

Sunucu Tarafı Önbellek Zehirlenmesi

Sunucu tarafı önbellek zehirlenmesi, zararlı bilgilerin sunulmasına neden olabilir.

Örnek:

GET / HTTP/1.1 Host: victim.com X-Forwarded-Host: attacker.com

İstemci Tarafı Önbellek Zehirlenmesi

İstemci tarafında yapılan önbellek zehirlenmesi, zararlı bilgilerin kullanıcı tarayıcılarında depolanmasına neden olabilir.

Örnek:

fetch('https://vulnerablewebsite.com/api/data', { method: 'GET', headers: { 'Cache-Control': 'no-cache' } }) .then(response => response.json()) .then(data => { // Poisoned data can be stored in cache });

XSSI (Cross-Site Script Inclusion) / JSONP

XSSI saldırıları, kullanıcının kimlik doğrulama bilgilerini ifşa edebilir.

Örnek:

<script src="https://vulnerablewebsite.com/api/data?callback=stealData"></script> <script> function stealData(response) { console.log(response); // Steal sensitive data } </script>

Kolay Bypass Teknikleri

Bazı bypass teknikleri, basit ama etkili olabilir.

Örnek:

let origin = 'https://allowedsite.com'; if (origin.startsWith('https://allowedsite.com')) { let maliciousOrigin = 'https://allowedsite.com.malicious.com'; }

Iframe ve Popup Bypass

Iframe ve popup kombinasyonları, güvenlik önlemlerini atlatabilir.

Örnek:

<iframe src="https://trustedwebsite.com" onload="popup()"></iframe> <script> function popup() { window.open('https://malicioussite.com'); } </script>

DNS Rebinding Güvenlik Analizi

DNS Rebinding, bir domainin IP adresini manipüle ederek hedef sistemi kandırmaya yönelik bir tekniktir. Bu teknik, çeşitli saldırı senaryolarında kullanılabilir.

TTL ile DNS Rebinding

TTL (Time to Live) değerlerini manipüle ederek DNS Rebinding saldırıları gerçekleştirilebilir.

Örnek:

; Set a very low TTL for the domain maliciousdomain.com. 10 IN A 192.168.1.100

DNS Önbellek Taşması ile DNS Rebinding

DNS önbellek taşması, DNS sunucularının önbelleğini manipüle ederek kullanıcıları sahte IP adreslerine yönlendirebilir.

Örnek:

; Exploit DNS cache overflow victim.com. 3600 IN A 10.0.0.1 overflow.com. 3600 IN A 192.168.1.100

DNS Önbellek ile DNS Rebinding

DNS önbelleği kullanılarak yapılan DNS Rebinding saldırıları, domainin IP adresini değiştirebilir.

Örnek:

; Manipulate DNS cache to bind to a local IP malicious.com. 3600 IN A 127.0.0.1

Diğer Yaygın Bypass Teknikleri

Diğer yaygın bypass teknikleri, HTTP başlıklarının manipülasyonu ve zararlı scriptlerin kullanılması gibi yöntemleri içerir.

Örnek:

GET / HTTP/1.1 Host: victim.com X-HTTP-Method-Override: DELETE

DNS Rebinding'in Silahlanması

DNS Rebinding saldırılarının daha karmaşık ve etkili bir şekilde kullanılması, bu tekniklerin silahlandırılması anlamına gelir.

Örnek:

; Weaponized DNS rebinding with multiple stages stage1.com. 10 IN A 192.168.1.100 stage2.com. 10 IN A 127.0.0.1

DNS Rebinding'e Karşı Koruma

DNS Rebinding saldırılarına karşı etkili korunma yöntemleri arasında güvenli DNS yapılandırmaları ve TTL değerlerinin doğru ayarlanması bulunur.

Örnek Koruma:

# Configure DNS resolver to prevent rebinding server=/malicious.com/127.0.0.1

Bu çalışma, CORS ve DNS Rebinding konularındaki güvenlik açıklarını ve bu açıkların nasıl yönetilebileceğini kapsamlı bir şekilde incelemektedir. Örnekler ve öneriler, sistemlerin güvenliğini artırmak için kullanılabilir.

Yorumlar