PortSwigger Cross-Origin Resource Sharing (CORS) Labs
Cross-origin resource sharin (CORS), belirli bir domain dışında bulunan kaynaklara kontrollü erişim sağlayan bir tarayıcı mekanızmasıdır. Same-origin policy (SOP)’nin esnetilmesiyle oluşmaktadır. Ancak bir web sitesinin CORS yapılandırması doğru yapılmamışsa, cross-domain saldırılarına neden olur. CORS, CSRF gibi cross-domain saldırılarına karşı bir savunma mekanizması değildir.
Same-origin policy, web sitesinin domain alanı dışındaki kaynaklarla etkileşimde olma yeteneğini sınırlayan kısıtlayıcı bir cross-origin göstergesidir. SOP, bir web sitesinin diğer bir web sitesinden veri çalması gibi potansiyel zararlı domainlerle etkileşimlere tepki olarak tanımlandı.
Lab-1 CORS vulnerability with basic origin
Bu laboratuvarda güvenli olmayan CORS yapılandırması bulunmaktadır ve uygulama bütün origin’lere güvenmektedir. Lab’ın tamamlanması için yönetici API key’ini ele geçiren, CORS kullanan bir JavaScript oluşturulmalı.
weiner:peter bilgileri ile giriş yaptıktan sonra proxy aracında /accountDetails endpointine bir GET request’i gönderilerek kullanıcı ile ilişkili, içerisinde apikey bilgisi de bulunan veriler response’da görüntülenmektedir.
Lab’ın açıklama kısmında uygulamanın herhangi bir origin’e güvendiği bilgisi verilmiştir. Bu bilginin kontrolü için origin header’ına grkm.com adresi yazılarak request tekrarlanmaktadır. Gönderilen requestin yanıtı olarak daha önce aldığımız veriler bize tekrar döndürülmektedir. CORS’un doğru yapılandırılmadığı doğrulanmaktadır.
Exploit server’da aşağıdaki script’ler yazılarak kurbana gönderildiğinde, origin’i bizim zararlı web sitemiz olan bir request hedef web uygulamasına içerisinde API key barındıran bir response elde etmek için request oluşturacaktır.
Zararlı web sitesinin log kayıtları incelendiğinde administrator kullanıcısının apı key verisi görüntülenmektedir.
Lab-2 CORS vulnerability with trusted null origin
Bu laboratuvardaki CORS yapılandırılması güvensiz bir şekilde yapılandırılmıştır ve origin değeri “null” olan bütün requestlere güvenmektedir. Lab’ın tamamlanması için administrator API verisinin elde etmeye neden olan bir JavaScript hazırlanmalıdır.
Kullanıcının API verisini döndüren response incelendiğinde Access-Control-Allow-Credentials header’ı görüntülenmektedir. Bu header CORS’un desteklenebileceği düşüncesini doğurmaktadır.
Origin: grkm.com payload’u denendiğinde sunucu hatası görüntülenmektedir. Ancak aşağıdaki görselde de görüntülenebileceği üzere Origin: null header’ı yazılıp istek yapıldığında sunucu bize API verisini döndürmektedir ve ek olarak null değeri Access-Control-Allow-Origin header’ında yansımaktadır.
İlgili payload exploit sunucusuna gönderilmektedir.
Administrator kullanıcısının API bilgisi log kayıtlarına düşmektedir ve submit yapılarak lab tamamlanır.
Lab-3 CORS vulnerability with trusted insecure protocols
Bu laboratuvarda protokolden bağımsız olarak subdomainlere güvendiğinden güvenli olmayan bir CORS yapılandırması bulunmaktadır. Lab’ın tamamlanması için Administrator API’ını ele geçiren CORS kullanan bir JavaScript payload’u yazılmalıdır.
Bir önceli lab’da gördüğümüz gibi Access-Control-Allow-Credentials header’ını görmekteyiz. Bu durum CORS olma ihtimalini bize düşündürmekte.
Lab açıklama kısmında subdomainlere güvendiği bilgisini verdiğinden Origin header’ına subdomain adresi yazılarak deneme yapılmakta ve response’da girilen subdomain bilgisinin yansıtıldığı görüntülenmekte.
Daha sonraasında bir ürünün stok kontrolünü yapmak istendiğinde açılan sayfada subdomain kullanıldığı gözlemlenmektedir.
Stok kontrol fonksiyonundaki productID değerinin XSS barındırdığı görüntülenmektedir.
Uygulama subdomainlere güvendiğinden stok kontrol sayfasındaki XSS kullanılarak uygulamaya bir istek gönderilmektedir. Gönderilen isteğin yanıtı exploit sunucusuna dönecektir ve administrator kullanıcısının API bilgisi tespit edilecektir.
Lab-4 CORS vulnerability with internal network pivot attack
Bu laboratuvarda bütün iç ağa origin’e güvenen hatalı CORS yapılandırmasına sahiptir. Lab’ın tamamlanması için 192.168.0.0/24 port 8080 end point’ini bulmak için bir JavaScript payload’ı yazılmalıdır. Ayrıca end point tespit edildikten sonra carlos kullanıcısının silinmesi için CORS-based bir saldırı gerçekleştirilmelidir.
Öncelikle endpoint için local network üzerinde tarama yapılmalıdır. Exploit server ve collaborator kullanılarak tarama yapılmaktadır ve sonuç collaborator da görüntülenmektedir.
Tespit edilen ip ve port kullanılarak username kısmında bir XSS güvenlik zafiyeti aranmaktadır.
foundXSS=1
Ip ve port adressleri kullanarak admin sayfasının kaynak kodunu ele geçirmeye çalışılmaktadır.
Tespit edilen kaynak kod kullanılarak hedeflenen kullanıcıyı silmek için exploit server kullanılmaktadır.