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:
- Genişletilmiş Kaynak Erişimi: Sunucunun, köken denetimlerini yeterince kısıtlamadan çeşitli kökenlerden gelen isteklere izin vermesi.
- Genel Erişim İzinleri: "Access-Control-Allow-Origin" başlığında "*", yani tüm kökenlere izin veren ayarların bulunması.
- Yanlış Yöntem İzinleri: Sunucunun, CORS istekleri için uygun HTTP yöntemlerini (GET, POST, PUT, DELETE, vb.) doğru şekilde sınırlamaması.
- 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
Yorum Gönder
1.Görüşleriniz bizim için önemlidir.
2. Konu dışı sorularınız için İletişim sayfasından ulaşabilirsiniz.