XS-Search/XS-Leaks
Last updated
Last updated
**** kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen iş akışlarını kolayca oluşturun ve otomatikleştirin. Bugün Erişim Alın:
XS-Search, yan kanal zafiyetlerini kullanarak çapraz kaynak bilgilerini çıkarmak için kullanılan bir yöntemdir.
Bu saldırıda yer alan ana bileşenler şunlardır:
Zayıf Web: Bilgilerin çıkarılmasının hedeflendiği web sitesi.
Saldırganın Web'i: Saldırgan tarafından oluşturulan, kurbanın ziyaret ettiği ve istismarı barındıran kötü niyetli web sitesi.
Dahil Etme Yöntemi: Zayıf Web'i Saldırganın Web'ine dahil etmek için kullanılan teknik (örneğin, window.open, iframe, fetch, href ile HTML etiketi vb.).
Leak Tekniği: Zayıf Web'in durumundaki farklılıkları belirlemek için dahil etme yöntemi aracılığıyla toplanan bilgilere dayanan teknikler.
Durumlar: Saldırganın ayırt etmeyi hedeflediği Zayıf Web'in iki potansiyel durumu.
Tespit Edilebilir Farklılıklar: Saldırganın Zayıf Web'in durumunu çıkarmak için güvendiği gözlemlenebilir varyasyonlar.
Zayıf Web'in durumlarını ayırt etmek için analiz edilebilecek birkaç yön vardır:
Durum Kodu: Çeşitli HTTP yanıt durum kodları arasında ayırt etme, sunucu hataları, istemci hataları veya kimlik doğrulama hataları gibi.
API Kullanımı: Sayfalar arasında Web API'lerinin kullanımını belirleme, çapraz kaynak bir sayfanın belirli bir JavaScript Web API'sini kullanıp kullanmadığını ortaya çıkarma.
Yönlendirmeler: Farklı sayfalara yapılan navigasyonları tespit etme, sadece HTTP yönlendirmeleri değil, aynı zamanda JavaScript veya HTML tarafından tetiklenenleri de.
Sayfa İçeriği: HTTP yanıt gövdesindeki veya sayfa alt kaynaklarındaki varyasyonları gözlemleme, örneğin gömülü çerçeve sayısı veya resimlerdeki boyut farklılıkları.
HTTP Başlığı: Belirli bir HTTP yanıt başlığının varlığını veya muhtemel değerini not etme, X-Frame-Options, Content-Disposition ve Cross-Origin-Resource-Policy gibi başlıklar dahil.
Zamanlama: İki durum arasındaki tutarlı zaman farklılıklarını fark etme.
HTML Elemanları: HTML, çapraz kaynak dahil etme için çeşitli elemanlar sunar, stil sayfaları, resimler veya betikler gibi, tarayıcıyı HTML dışı bir kaynağı talep etmeye zorlar. Bu amaçla potansiyel HTML elemanlarının bir derlemesi https://github.com/cure53/HTTPLeaks adresinde bulunabilir.
Çerçeveler: iframe, object ve embed gibi elemanlar, HTML kaynaklarını doğrudan saldırganın sayfasına gömebilir. Eğer sayfa çerçeve koruması yoksa, JavaScript, içerikWindow özelliği aracılığıyla çerçevelenmiş kaynağın pencere nesnesine erişebilir.
Açılır Pencereler: window.open
yöntemi, bir kaynağı yeni bir sekmede veya pencerede açar ve JavaScript'in yöntemlerle ve özelliklerle etkileşimde bulunması için bir pencere tutamacı sağlar. Açılır pencereler, genellikle tek oturum açma işlemlerinde kullanılır, hedef kaynağın çerçeveleme ve çerez kısıtlamalarını aşar. Ancak, modern tarayıcılar açılır pencere oluşturmayı belirli kullanıcı eylemleriyle sınırlamaktadır.
JavaScript İstekleri: JavaScript, XMLHttpRequests veya Fetch API kullanarak hedef kaynaklara doğrudan istekler yapmaya izin verir. Bu yöntemler, isteği takip etme gibi isteğin üzerinde hassas kontrol sağlar.
Olay İşleyici: XS-Leaks'teki klasik bir leak tekniği, onload ve onerror gibi olay işleyicilerin kaynak yükleme başarısı veya başarısızlığı hakkında bilgi sağlamasıdır.
Hata Mesajları: JavaScript istisnaları veya özel hata sayfaları, ya doğrudan hata mesajından ya da varlığı ve yokluğu arasındaki farkı ayırt ederek leak bilgisi sağlayabilir.
Küresel Sınırlar: Bir tarayıcının fiziksel sınırlamaları, bellek kapasitesi veya diğer zorunlu tarayıcı sınırları gibi, bir eşik aşıldığında sinyal verebilir ve leak tekniği olarak hizmet edebilir.
Küresel Durum: Tarayıcıların küresel durumları (örneğin, Geçmiş arayüzü) ile tespit edilebilir etkileşimler istismar edilebilir. Örneğin, bir tarayıcının geçmişindeki giriş sayısı, çapraz kaynak sayfalar hakkında ipuçları verebilir.
Performans API'si: Bu API, mevcut sayfanın performans detaylarını sağlar, belgenin ve yüklenen kaynakların ağ zamanlamasını içerir, istenen kaynaklar hakkında çıkarımlar yapmayı mümkün kılar.
Okunabilir Nitelikler: Bazı HTML nitelikleri çapraz kaynak olarak okunabilir ve leak tekniği olarak kullanılabilir. Örneğin, window.frame.length
özelliği, JavaScript'in bir web sayfasında çapraz kaynak olarak dahil edilen çerçeveleri saymasına olanak tanır.
XSinator, bilinen birkaç XS-Leaks'e karşı tarayıcıları kontrol etmek için otomatik bir araçtır ve makalesinde açıklanmıştır: https://xsinator.com/paper.pdf
Araca şu adresten erişebilirsiniz: https://xsinator.com/
Hariç Tutulan XS-Leaks: XSinator'daki diğer leak'lerle çelişeceği için hizmet çalışanlarına dayanan XS-Leaks'leri hariç tutmak zorunda kaldık. Ayrıca, belirli bir web uygulamasındaki yanlış yapılandırma ve hatalara dayanan XS-Leaks'leri de hariç tutmayı seçtik. Örneğin, CrossOrigin Resource Sharing (CORS) yanlış yapılandırmaları, postMessage sızıntıları veya Cross-Site Scripting. Ayrıca, genellikle yavaş, gürültülü ve hatalı oldukları için zaman tabanlı XS-Leaks'leri de hariç tuttuk.
Dünyanın en gelişmiş topluluk araçlarıyla desteklenen iş akışlarını kolayca oluşturun ve otomatikleştirin. Trickest kullanarak. Bugün Erişim Alın:
Aşağıdaki tekniklerden bazıları, web sayfalarının olası durumlarındaki farklılıkları tespit etmek için zaman kullanacak. Bir web tarayıcısında zamanı ölçmenin farklı yolları vardır.
Saatler: performance.now() API'si, geliştiricilerin yüksek çözünürlüklü zaman ölçümleri almasına olanak tanır. Saldırganların örtük saatler oluşturmak için kötüye kullanabileceği önemli sayıda API vardır: Broadcast Channel API, Message Channel API, requestAnimationFrame, setTimeout, CSS animasyonları ve diğerleri. Daha fazla bilgi için: https://xsleaks.dev/docs/attacks/timing-attacks/clocks.
Dahil Etme Yöntemleri: Çerçeveler, HTML Elemanları
Tespit Edilebilir Farklılık: Durum Kodu
Özet: Bir kaynağı yüklemeye çalışırken, kaynak başarıyla/başarısızlıkla yüklendiğinde onerror/onload olayları tetiklenir, durum kodunu belirlemek mümkündür.
Kod örneği, JS'den betik nesneleri yüklemeye çalışır, ancak diğer etiketler (nesneler, stil sayfaları, resimler, sesler vb.) de kullanılabilir. Ayrıca, etiketi doğrudan enjekte etmek ve onload
ve onerror
olaylarını etiketin içinde tanımlamak da mümkündür (JS'den enjekte etmek yerine).
Bu saldırının ayrıca bir betiksiz versiyonu da vardır:
In this case if example.com/404
is not found attacker.com/?error
will be loaded.
Inclusion Methods: HTML Elemanları
Detectable Difference: Zamanlama (genellikle Sayfa İçeriği, Durum Kodu nedeniyle)
Summary: The performance.now() API bir isteği gerçekleştirmek için ne kadar zaman gerektiğini ölçmek için kullanılabilir. Ancak, 50ms'den fazla süren görevleri tanımlayabilen PerformanceLongTaskTiming API gibi diğer saatler de kullanılabilir.
Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events başka bir örnek:
Bu teknik, bir öncekiyle aynıdır, ancak saldırgan da ilgili bir süre almak için bazı eylemleri zorlayacaktır ve o süreyi ölçer.
performance.now + Force heavy taskInclusion Methods: Çerçeveler
Detectable Difference: Zamanlama (genellikle Sayfa İçeriği, Durum Kodu nedeniyle)
Summary: The SharedArrayBuffer clock bir isteği gerçekleştirmek için ne kadar zaman gerektiğini ölçmek için kullanılabilir. Diğer saatler de kullanılabilir.
Bir kaynağı almak için geçen süre, unload
ve beforeunload
olaylarını kullanarak ölçülebilir. beforeunload
olayı, tarayıcının yeni bir sayfaya geçiş yapmadan önce tetiklenirken, unload
olayı geçişin gerçekten gerçekleştiği anda meydana gelir. Bu iki olay arasındaki zaman farkı, tarayıcının kaynağı almak için harcadığı süreyi belirlemek için hesaplanabilir.
Inclusion Methods: Çerçeveler
Detectable Difference: Zamanlama (genellikle Sayfa İçeriği, Durum Kodu nedeniyle)
Summary: The performance.now() API bir isteği gerçekleştirmek için ne kadar zaman gerektiğini ölçmek için kullanılabilir. Diğer saatler de kullanılabilir.
Framing Protections yokluğunda, bir sayfanın ve alt kaynaklarının ağ üzerinden yüklenmesi için gereken zamanın bir saldırgan tarafından ölçülebileceği gözlemlenmiştir. Bu ölçüm genellikle mümkündür çünkü bir iframe'in onload
işleyicisi, yalnızca kaynak yüklemesi ve JavaScript yürütmesi tamamlandıktan sonra tetiklenir. Script yürütmesinin getirdiği değişkenliği aşmak için, bir saldırgan <iframe>
içinde sandbox
niteliğini kullanabilir. Bu niteliğin eklenmesi, özellikle JavaScript'in yürütülmesi gibi birçok işlevselliği kısıtlar ve böylece ağırlıklı olarak ağ performansından etkilenen bir ölçüm yapılmasını kolaylaştırır.
Inclusion Methods: Frames
Detectable Difference: Sayfa İçeriği
More info:
Summary: Eğer doğru içerik erişildiğinde sayfanın hata vermesini sağlayabilir ve herhangi bir içerik erişildiğinde doğru bir şekilde yüklenmesini sağlayabilirseniz, o zaman tüm bilgileri zaman ölçmeden çıkarmak için bir döngü oluşturabilirsiniz.
Code Example:
Sayfanın gizli içeriği bir Iframe içinde eklenebileceğini varsayalım.
Kurbanın "flag" içeren dosyayı bir Iframe kullanarak aramasını sağlayabilirsiniz (örneğin bir CSRF istismar ederek). Iframe içinde onload olayı her zaman en az bir kez çalıştırılacağını biliyorsunuz. Sonra, iframe'in URL'sini değiştirerek sadece URL içindeki hash'in içeriğini değiştirerek değiştirebilirsiniz.
Örneğin:
URL1: www.attacker.com/xssearch#try1
URL2: www.attacker.com/xssearch#try2
Eğer ilk URL başarıyla yüklendiyse, o zaman URL'nin hash kısmını değiştirirken onload olayı tekrar tetiklenmeyecek. Ama eğer sayfa yüklenirken bir tür hata almışsa, o zaman onload olayı tekrar tetiklenecektir.
Sonra, erişildiğinde doğru bir şekilde yüklenen sayfa ile hata olan sayfa arasında ayrım yapabilirsiniz.
Inclusion Methods: Frames
Detectable Difference: Sayfa İçeriği
More info:
Summary: Eğer sayfa hassas içeriği dönüyorsa, veya kullanıcı tarafından kontrol edilebilen bir içerik dönüyorsa. Kullanıcı geçersiz durumda geçerli JS kodu ayarlayabilir, her denemede <script>
etiketleri içinde yükleyebilir, böylece geçersiz durumlarda saldırganların kodu çalıştırılır, ve geçerli durumlarda hiçbir şey çalıştırılmayacaktır.
Code Example:
Inclusion Methods: HTML Elemanları
Detectable Difference: Durum Kodu & Başlıklar
Summary: Cross-Origin Read Blocking (CORB), web sayfalarının belirli hassas çapraz kaynaklı kaynakları yüklemesini engelleyen bir güvenlik önlemidir ve Spectre gibi saldırılara karşı koruma sağlar. Ancak, saldırganlar bu koruyucu davranışı istismar edebilir. CORB'ye tabi bir yanıt, nosniff
ile birlikte CORB korumalı Content-Type
ve 2xx
durum kodu döndüğünde, CORB yanıtın gövdesini ve başlıklarını temizler. Bunu gözlemleyen saldırganlar, durum kodu (başarı veya hata gösteren) ve Content-Type
(koruma altında olup olmadığını belirten) kombinasyonunu çıkarabilir, bu da potansiyel bilgi sızıntısına yol açar.
Code Example:
Saldırı hakkında daha fazla bilgi için daha fazla bilgi bağlantısını kontrol edin.
Inclusion Methods: Frames
Detectable Difference: Sayfa İçeriği
Summary: id veya name niteliğinden hassas verileri sızdırın.
Bir iframe içinde bir sayfa yüklemek ve sayfanın belirtilen id ile iframe içindeki elemanı odaklanmasını sağlamak için #id_value
kullanmak mümkündür, sonra bir onblur
sinyali tetiklendiğinde, ID elemanı vardır.
portal
etiketleri ile aynı saldırıyı gerçekleştirebilirsiniz.
Inclusion Methods: Frames, Pop-up'lar
Detectable Difference: API Kullanımı
Summary: postMessage'dan hassas bilgileri toplayın veya postMessages'ın varlığını kullanarak sayfadaki kullanıcının durumunu bilmek için bir oracle olarak kullanın.
Code Example: Tüm postMessages'ı dinleyen herhangi bir kod.
Uygulamalar genellikle postMessage
yayınlarını farklı kaynaklar arasında iletişim kurmak için kullanır. Ancak, bu yöntem targetOrigin
parametresi düzgün bir şekilde belirtilmediğinde istemeden hassas bilgileri açığa çıkarabilir, bu da herhangi bir pencerenin mesajları almasına izin verir. Ayrıca, bir mesajı almanın kendisi bir oracle işlevi görebilir; örneğin, belirli mesajlar yalnızca oturum açmış kullanıcılara gönderilebilir. Bu nedenle, bu mesajların varlığı veya yokluğu, kullanıcının durumu veya kimliği hakkında bilgi verebilir, örneğin, kimlik doğrulamasının yapılıp yapılmadığı gibi.
Dünyanın en gelişmiş topluluk araçlarıyla desteklenen iş akışlarını kolayca oluşturmak ve otomatikleştirmek için Trickest kullanın. Bugün Erişim Alın:
Inclusion Methods: Frames, Pop-up'lar
Detectable Difference: API Kullanımı
More info: https://xsinator.com/paper.pdf (5.1)
Summary: WebSocket bağlantı limitini tüketmek, bir çapraz kaynak sayfasının WebSocket bağlantılarının sayısını sızdırır.
Bir hedef sayfanın WebSocket bağlantılarını kullanıp kullanmadığını ve ne kadarını kullandığını belirlemek mümkündür. Bu, bir saldırganın uygulama durumlarını tespit etmesine ve WebSocket bağlantı sayısına bağlı bilgileri sızdırmasına olanak tanır.
Eğer bir kaynak maksimum WebSocket bağlantı nesnelerini kullanıyorsa, bağlantı durumlarından bağımsız olarak, yeni nesnelerin oluşturulması JavaScript istisnalarına yol açar. Bu saldırıyı gerçekleştirmek için, saldırgan web sitesi hedef web sitesini bir pop-up veya iframe içinde açar ve ardından hedef web yüklendikten sonra mümkün olan maksimum sayıda WebSocket bağlantısı oluşturmaya çalışır. Atılan istisnaların sayısı, hedef web sitesi penceresinin kullandığı WebSocket bağlantılarının sayısıdır.
Inclusion Methods: Frames, Pop-up'lar
Detectable Difference: API Kullanımı
More info: https://xsinator.com/paper.pdf (5.1)
Summary: Sadece birinin aynı anda aktif olabileceğini tespit edin.
Code Example: https://xsinator.com/testing.html#Payment%20API%20Leak
Bu XS-Leak, bir saldırganın bir çapraz kaynak sayfasının bir ödeme talebi başlattığını tespit etmesine olanak tanır.
Çünkü aynı anda yalnızca bir ödeme talebi aktif olabileceğinden, eğer hedef web sitesi Payment Request API'sini kullanıyorsa, bu API'yi kullanma girişimleri başarısız olacak ve bir JavaScript istisnası oluşturacaktır. Saldırgan, periyodik olarak Payment API UI'sini göstermeye çalışarak bunu istismar edebilir. Eğer bir deneme bir istisna oluşturursa, hedef web sitesi şu anda bunu kullanıyor demektir. Saldırgan, UI oluşturulduktan hemen sonra kapatarak bu periyodik denemeleri gizleyebilir.
Inclusion Methods:
Detectable Difference: Zamanlama (genellikle Sayfa İçeriği, Durum Kodu nedeniyle)
Summary: Tek iş parçacıklı JS olay döngüsünü kötüye kullanarak bir webin yürütme süresini ölçün.
Code Example:
JavaScript, tek iş parçacıklı bir olay döngüsü eşzamanlılık modelinde çalışır, bu da sadece bir görevi aynı anda gerçekleştirebileceği anlamına gelir. Bu özellik, farklı bir kaynaktan gelen kodun çalıştırılmasının ne kadar sürdüğünü ölçmek için istismar edilebilir. Bir saldırgan, sabit özelliklere sahip olayları sürekli olarak göndererek kendi kodunun olay döngüsündeki yürütme süresini ölçebilir. Bu olaylar, olay havuzu boş olduğunda işlenecektir. Eğer diğer kaynaklar da aynı havuza olay gönderiyorsa, bir saldırgan, kendi görevlerinin yürütülmesindeki gecikmeleri gözlemleyerek bu dış olayların yürütülmesinin ne kadar sürdüğünü çıkarabilir. Gecikmeleri izleme yöntemi, farklı kaynaklardan gelen kodun yürütme süresini açığa çıkarabilir ve potansiyel olarak hassas bilgileri sızdırabilir.
Bir yürütme zamanlamasında, daha hassas ölçümler elde etmek için ağ faktörlerini ortadan kaldırmak mümkündür. Örneğin, sayfa yüklenmeden önce kullanılan kaynakları yükleyerek.
Inclusion Methods:
Detectable Difference: Zamanlama (genellikle Sayfa İçeriği, Durum Kodu nedeniyle)
Summary: Bir web işleminin yürütme süresini ölçmenin bir yöntemi, bir iş parçacığının olay döngüsünü kasıtlı olarak engellemek ve ardından olay döngüsünün tekrar kullanılabilir hale gelmesi için ne kadar sürdüğünü zamanlamaktır. Olay döngüsüne bir engelleyici işlem (uzun bir hesaplama veya senkron API çağrısı gibi) ekleyerek ve sonraki kodun yürütülmeye başlaması için geçen süreyi izleyerek, engelleme süresi boyunca olay döngüsünde yürütülen görevlerin süresini çıkarabilirsiniz. Bu teknik, JavaScript'in olay döngüsünün tek iş parçacıklı doğasını kullanır; burada görevler sıralı olarak yürütülür ve aynı iş parçacığını paylaşan diğer işlemlerin performansı veya davranışı hakkında içgörüler sağlayabilir.
Code Example:
Yürütme süresini olay döngüsünü kilitleyerek ölçme tekniğinin önemli bir avantajı, Site İzolasyonu'nu aşma potansiyelidir. Site İzolasyonu, farklı web sitelerini ayrı süreçlere ayıran bir güvenlik özelliğidir ve kötü niyetli sitelerin diğer sitelerden hassas verilere doğrudan erişimini engellemeyi amaçlar. Ancak, bir saldırgan, paylaşılan olay döngüsü aracılığıyla başka bir kaynağın yürütme zamanlamasını etkileyerek, o kaynağın faaliyetleri hakkında dolaylı olarak bilgi çıkarabilir. Bu yöntem, diğer kaynağın verilerine doğrudan erişim gerektirmez, bunun yerine o kaynağın faaliyetlerinin paylaşılan olay döngüsü üzerindeki etkisini gözlemler, böylece Site İzolasyonu tarafından oluşturulan koruyucu engellerden kaçınır.
Bir yürütme zamanlamasında, daha hassas ölçümler elde etmek için ağ faktörlerini ortadan kaldırmak mümkündür. Örneğin, sayfa yüklenmeden önce kullanılan kaynakları yükleyerek.
Inclusion Methods: JavaScript İstekleri
Detectable Difference: Zamanlama (genellikle Sayfa İçeriği, Durum Kodu nedeniyle)
Summary: Bir saldırgan, 1 hariç tüm soketleri kilitleyebilir, hedef web'i yükleyebilir ve aynı anda başka bir sayfayı yükleyebilir, son sayfanın yüklenmeye başlaması için geçen süre, hedef sayfanın yüklenmesi için geçen süredir.
Code Example:
Tarayıcılar, sunucu iletişimi için soketler kullanır, ancak işletim sistemi ve donanımın sınırlı kaynakları nedeniyle, tarayıcılar eşzamanlı soket sayısına bir sınır koymak zorundadır. Saldırganlar bu sınırlamayı aşağıdaki adımlarla istismar edebilir:
Tarayıcının soket limitini belirleyin, örneğin, 256 global soket.
255 soketi uzun bir süre boyunca, bağlantıları tamamlamadan açık tutmak için çeşitli hostlara 255 istek başlatarak doldurun.
soketi hedef sayfaya bir istek göndermek için kullanın.
Farklı bir hosta 257. bir istek yapmaya çalışın. Tüm soketler kullanıldığından (2. ve 3. adımlara göre), bu istek, bir soket mevcut olana kadar bekleyecektir. Bu isteğin ilerlemesi için geçen gecikme, saldırgana 256. soketle (hedef sayfanın soketi) ilgili ağ etkinliği hakkında zaman bilgisi sağlar. Bu çıkarım, 2. adımda yer alan 255 soketin hala meşgul olması nedeniyle mümkündür; bu da, yeni mevcut olan soketin 3. adımda serbest bırakılan soket olması gerektiği anlamına gelir. 256. soketin mevcut hale gelmesi için geçen süre, dolayısıyla hedef sayfaya yapılan isteğin tamamlanması için gereken süreyle doğrudan bağlantılıdır.
Daha fazla bilgi için: https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/
Inclusion Methods: JavaScript İstekleri
Detectable Difference: Zamanlama (genellikle Sayfa İçeriği, Durum Kodu nedeniyle)
More info:
Summary: Önceki teknikle aynı ama tüm soketleri kullanmak yerine, Google Chrome aynı kaynağa 6 eşzamanlı isteğe bir sınır koyar. Eğer 5'ini engellersek ve sonra 6. bir istek başlatırsak, bunu zamanlayabiliriz ve eğer kurban sayfasının aynı uç noktaya daha fazla istek göndermesini sağlarsak, 6. istek daha uzun sürecektir ve bunu tespit edebiliriz.
Performance API
, web uygulamalarının performans metrikleri hakkında içgörüler sunar ve Resource Timing API
ile daha da zenginleştirilmiştir. Resource Timing API, isteklerin süresi gibi ayrıntılı ağ isteği zamanlamalarını izlemeyi sağlar. Özellikle, sunucular yanıtlarında Timing-Allow-Origin: *
başlığını içerdiğinde, transfer boyutu ve alan adı arama süresi gibi ek veriler kullanılabilir hale gelir.
Bu veri zenginliği, performance.getEntries
veya performance.getEntriesByName
gibi yöntemler aracılığıyla elde edilebilir ve performansla ilgili bilgilerin kapsamlı bir görünümünü sağlar. Ayrıca, API, performance.now()
ile elde edilen zaman damgaları arasındaki farkı hesaplayarak yürütme sürelerini ölçmeyi kolaylaştırır. Ancak, Chrome gibi bazı tarayıcılarda performance.now()
'un hassasiyetinin milisaniyelerle sınırlı olabileceği ve bu durumun zamanlama ölçümlerinin ayrıntılığını etkileyebileceği unutulmamalıdır.
Zamanlama ölçümlerinin ötesinde, Performance API güvenlikle ilgili içgörüler için de kullanılabilir. Örneğin, Chrome'daki performance
nesnesindeki sayfaların varlığı veya yokluğu, X-Frame-Options
uygulandığını gösterebilir. Özellikle, bir sayfa X-Frame-Options
nedeniyle bir çerçevede render edilmekten engellenirse, performance
nesnesinde kaydedilmeyecektir, bu da sayfanın çerçeveleme politikaları hakkında ince bir ipucu sağlar.
Inclusion Methods: Frames, HTML Elemanları
Detectable Difference: Durum Kodu
More info: https://xsinator.com/paper.pdf (5.2)
Summary: Hatalarla sonuçlanan bir istek, bir kaynak zamanlama girişi oluşturmaz.
HTTP yanıt durum kodları arasında ayrım yapmak mümkündür çünkü bir hata ile sonuçlanan istekler performans girişi oluşturmaz.
Inclusion Methods: HTML Elemanları
Detectable Difference: Durum Kodu
More info: https://xsinator.com/paper.pdf (5.2)
Summary: Bir tarayıcı hatası nedeniyle, hatalarla sonuçlanan istekler iki kez yüklenir.
Önceki teknikte, yüklenemeyen kaynakların iki kez yüklendiği durumları belirten iki durum da tespit edilmiştir. Bu, Performans API'sinde birden fazla girişe yol açar ve bu nedenle tespit edilebilir.
Inclusion Methods: HTML Elemanları
Detectable Difference: Durum Kodu
More info: https://xsinator.com/paper.pdf (5.2)
Summary: Hatalarla sonuçlanan istekler birleştirilemez.
Bu teknik, bahsedilen belgede bir tabloda bulunmuştur ancak teknik hakkında herhangi bir açıklama bulunmamıştır. Ancak, bunu kontrol ederek kaynak kodunu bulabilirsiniz https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak
Inclusion Methods: Frames
Detectable Difference: Sayfa İçeriği
More info: https://xsinator.com/paper.pdf (5.2)
Summary: Boş yanıtlar kaynak zamanlama girişleri oluşturmaz.
Bir saldırgan, bir isteğin boş bir HTTP yanıt gövdesi ile sonuçlanıp sonuçlanmadığını tespit edebilir çünkü boş sayfalar bazı tarayıcılarda performans girişi oluşturmaz.
Inclusion Methods: Frames
Detectable Difference: Sayfa İçeriği
More info: https://xsinator.com/paper.pdf (5.2)
Summary: Güvenlik İddialarında XSS Auditor kullanarak, saldırganlar, oluşturulan yüklerin denetleyicinin filtreleme mekanizmasını tetiklemesi durumunda yanıtların değişimini gözlemleyerek belirli web sayfası öğelerini tespit edebilir.
Güvenlik İddialarında (SA), başlangıçta Cross-Site Scripting (XSS) saldırılarını önlemek için tasarlanmış olan XSS Auditor, paradoksal olarak hassas bilgileri sızdırmak için istismar edilebilir. Bu yerleşik özellik Google Chrome'dan (GC) kaldırılmış olsa da, SA'da hala mevcuttur. 2013 yılında Braun ve Heiderich, XSS Auditor'un yanlış pozitiflere yol açarak meşru betikleri yanlışlıkla engelleyebileceğini göstermiştir. Bunun üzerine, araştırmacılar, bilgileri çıkarmak ve çapraz kaynak sayfalarında belirli içerikleri tespit etmek için teknikler geliştirmiştir; bu kavram XS-Leaks olarak bilinir ve ilk olarak Terada tarafından rapor edilmiş, Heyes tarafından bir blog yazısında detaylandırılmıştır. Bu teknikler, GC'deki XSS Auditor'a özgü olmasına rağmen, SA'da XSS Auditor tarafından engellenen sayfaların Performans API'sinde giriş oluşturmadığı keşfedilmiştir; bu da hassas bilgilerin hala sızdırılabileceği bir yöntem sunar.
Inclusion Methods: Frames
Detectable Difference: Başlık
Summary: X-Frame-Options başlığına sahip kaynak, kaynak zamanlama girişi oluşturmaz.
Eğer bir sayfanın bir iframe içinde render edilmesine izin verilmezse, bu performans girişi oluşturmaz. Sonuç olarak, bir saldırgan X-Frame-Options
yanıt başlığını tespit edebilir.
Aynı şey embed etiketi kullanıldığında da geçerlidir.
Inclusion Methods: Frames
Detectable Difference: Başlık
More info: https://xsinator.com/paper.pdf (5.2)
Summary: İndirmeler, Performans API'sinde kaynak zamanlama girişleri oluşturmaz.
Aynı şekilde, ContentDisposition başlığı nedeniyle indirilmiş bir kaynak da performans girişi oluşturmaz. Bu teknik, tüm büyük tarayıcılarda çalışır.
Inclusion Methods: Frames
Detectable Difference: Yönlendirme
More info: https://xsinator.com/paper.pdf (5.2)
Summary: Kaynak zamanlama girişi, bir yönlendirmenin başlangıç zamanını sızdırır.
Bazı tarayıcıların çapraz kaynak istekleri için çok fazla bilgi kaydetme davranışını kötüye kullanan bir XS-Leak örneği bulduk. Standart, çapraz kaynaklı kaynaklar için sıfıra ayarlanması gereken bir dizi özelliği tanımlar. Ancak, SA'da, kullanıcıların hedef sayfa tarafından yönlendirildiğini tespit etmek mümkündür; Performans API'sini sorgulayarak ve redirectStart zamanlama verilerini kontrol ederek.
Inclusion Methods: Fetch API
Detectable Difference: Yönlendirme
More info: https://xsinator.com/paper.pdf (5.2)
Summary: Yönlendirme gerçekleştiğinde zamanlama girişlerinin süresi negatiftir.
GC'de, yönlendirme ile sonuçlanan isteklerin süresi negatiftir ve bu nedenle yönlendirme ile sonuçlanmayan isteklerden ayrılabilir.
Inclusion Methods: Frames
Detectable Difference: Başlık
More info: https://xsinator.com/paper.pdf (5.2)
Summary: CORP ile korunan kaynaklar, kaynak zamanlama girişleri oluşturmaz.
Bazı durumlarda, nextHopProtocol girişi bir sızıntı tekniği olarak kullanılabilir. GC'de, CORP başlığı ayarlandığında, nextHopProtocol boş olacaktır. Not edin ki, SA, CORP etkin kaynaklar için hiç performans girişi oluşturmayacaktır.
Inclusion Methods: Frames
Detectable Difference: API Kullanımı
Summary: Belirli bir kaynak için bir hizmet çalıştırıcısının kaydedilip kaydedilmediğini tespit edin.
Code Example:
Hizmet çalıştırıcıları, bir kaynakta çalışan olay odaklı betik bağlamlarıdır. Bir web sayfasının arka planında çalışır ve kaynakları yakalamak, değiştirmek ve önbelleğe almak için kullanılabilir, böylece çevrimdışı web uygulamaları oluşturulabilir. Eğer bir hizmet çalıştırıcısı tarafından önbelleğe alınmış bir kaynak, iframe aracılığıyla erişilirse, kaynak hizmet çalıştırıcısı önbelleğinden yüklenir. Kaynağın hizmet çalıştırıcısı önbelleğinden yüklenip yüklenmediğini tespit etmek için Performans API'si kullanılabilir. Bu, bir Zamanlama saldırısı ile de yapılabilir (daha fazla bilgi için belgeyi kontrol edin).
Inclusion Methods: Fetch API
Detectable Difference: Zamanlama
Summary: Bir kaynağın önbelleğe alınıp alınmadığını kontrol etmek mümkündür.
Performance API kullanarak bir kaynağın önbelleğe alınıp alınmadığını kontrol etmek mümkündür.
Inclusion Methods: Fetch API
Detectable Difference: Sayfa İçeriği
Summary: performance
API'sinden bir isteğin ağ süresini almak mümkündür.
Inclusion Methods: HTML Elemanları (Video, Ses)
Detectable Difference: Durum Kodu
Summary: Firefox'ta, bir çapraz kaynak isteğinin durum kodunu doğru bir şekilde sızdırmak mümkündür.
Code Example: https://jsbin.com/nejatopusi/1/edit?html,css,js,output
The MediaError
arayüzünün message özelliği, başarılı bir şekilde yüklenen kaynakları benzersiz bir dizi ile tanımlar. Bir saldırgan, bu özelliği gözlemleyerek mesaj içeriğini kullanarak bir çapraz kaynak kaynağının yanıt durumunu çıkarabilir.
Dahil Etme Yöntemleri: Fetch API
Tespit Edilebilir Fark: Başlık
Daha fazla bilgi: https://xsinator.com/paper.pdf (5.3)
Özet: Güvenlik İddialarında (SA), CORS hata mesajları istemeden yönlendirilmiş isteklerin tam URL'sini açığa çıkarır.
Bu teknik, bir saldırgana bir çapraz kaynak sitesinin yönlendirmesinin hedefini çıkarmasını sağlar. Özellikle, bir CORS etkin isteği kullanıcı durumuna dayalı olarak yönlendirme yapan bir hedef siteye gönderildiğinde ve tarayıcı isteği reddettiğinde, yönlendirme hedefinin tam URL'si hata mesajında ifşa edilir. Bu güvenlik açığı, yönlendirme gerçeğini açığa çıkarmakla kalmaz, aynı zamanda yönlendirme uç noktasını ve içerebileceği herhangi bir hassas sorgu parametresini de açığa çıkarır.
Dahil Etme Yöntemleri: Fetch API
Tespit Edilebilir Fark: Başlık
Daha fazla bilgi: https://xsinator.com/paper.pdf (5.3)
Özet: Güvenlik İddialarında (SA), CORS hata mesajları istemeden yönlendirilmiş isteklerin tam URL'sini açığa çıkarır.
Bir saldırgan, açık hata mesajlarını kullanarak çapraz kaynak yanıtlarının boyutunu çıkarabilir. Bu, genellikle CDN'lerden alınan kaynakların değiştirilmediğini doğrulamak için bütünlük niteliğini kullanan Alt Kaynak Bütünlüğü (SRI) mekanizması nedeniyle mümkündür. SRI'nin çapraz kaynak kaynaklarında çalışabilmesi için bunların CORS etkin olması gerekir; aksi takdirde bütünlük kontrollerine tabi değildir. Güvenlik İddialarında (SA), CORS hata XS-Leak gibi, bir bütünlük niteliği ile başarısız olan bir fetch isteğinden sonra bir hata mesajı yakalanabilir. Saldırganlar, herhangi bir isteğin bütünlük niteliğine sahtelik hash değeri atayarak bu hatayı kasıtlı olarak tetikleyebilir. SA'da, ortaya çıkan hata mesajı, istenen kaynağın içerik uzunluğunu istemeden açığa çıkarır. Bu bilgi sızıntısı, bir saldırgana yanıt boyutundaki değişiklikleri ayırt etme imkanı tanır ve karmaşık XS-Leak saldırılarına zemin hazırlar.
Dahil Etme Yöntemleri: Pop-up'lar
Tespit Edilebilir Fark: Durum Kodu
Özet: Eğer yalnızca kurbanın web sitesi CSP'de izin verilirse ve farklı bir alan adına yönlendirmeye çalışırsa, CSP tespit edilebilir bir hata tetikler.
Bir XS-Leak, CSP'yi kullanarak bir çapraz kaynak sitenin farklı bir kaynağa yönlendirilip yönlendirilmediğini tespit edebilir. Bu sızıntı yönlendirmeyi tespit edebilir, ayrıca yönlendirme hedefinin alan adını da açığa çıkarır. Bu saldırının temel fikri, saldırgan sitesinde hedef alan adını izin vermektir. Hedef alana bir istek gönderildiğinde, çapraz kaynak bir alana yönlendirir. CSP, buna erişimi engeller ve bir ihlal raporu oluşturur. Tarayıcıya bağlı olarak, bu rapor yönlendirme hedefinin konumunu sızdırabilir. Modern tarayıcılar, yönlendirildiği URL'yi belirtmeyecek, ancak yine de bir çapraz kaynak yönlendirmesinin tetiklendiğini tespit edebilirsiniz.
Dahil Etme Yöntemleri: Çerçeveler, Pop-up'lar
Tespit Edilebilir Fark: Sayfa İçeriği
Özet: Dosyayı önbellekten temizle. Hedef sayfayı açar, dosyanın önbellekte mevcut olup olmadığını kontrol eder.
Kod Örneği:
Tarayıcılar, tüm web siteleri için tek bir paylaşılan önbellek kullanabilir. Kaynağın kökenine bakılmaksızın, bir hedef sayfanın belirli bir dosyayı talep edip etmediğini çıkarmak mümkündür.
Bir sayfa yalnızca kullanıcı oturum açtığında bir resmi yüklüyorsa, kaynağı geçersiz kılabilir (artık önbelleğe alınmadıysa, daha fazla bilgi bağlantılarına bakın), bu kaynağı yükleyebilecek bir istek gerçekleştirebilir ve kaynağı kötü bir istekle (örneğin, aşırı uzun bir referans başlığı kullanarak) yüklemeyi deneyebilirsiniz. Eğer kaynak yüklemesi herhangi bir hata tetiklemediyse, bunun nedeni önbelleğe alınmış olmasıdır.
Dahil Etme Yöntemleri: Çerçeveler
Tespit Edilebilir Fark: Başlık
Daha fazla bilgi: https://bugs.chromium.org/p/chromium/issues/detail?id=1105875
Özet: CSP başlık yönergeleri, CSP iframe niteliği kullanılarak sorgulanabilir ve politika detaylarını açığa çıkarır.
Google Chrome'daki (GC) yeni bir özellik, web sayfalarının bir iframe öğesine bir nitelik ayarlayarak bir İçerik Güvenlik Politikası (CSP) önermesine olanak tanır; politika yönergeleri HTTP isteği ile birlikte iletilir. Normalde, gömülü içeriğin bunu bir HTTP başlığı aracılığıyla yetkilendirmesi gerekir, aksi takdirde bir hata sayfası görüntülenir. Ancak, eğer iframe zaten bir CSP tarafından yönetiliyorsa ve yeni önerilen politika daha kısıtlayıcı değilse, sayfa normal şekilde yüklenir. Bu mekanizma, bir saldırgana, hata sayfasını tanımlayarak bir çapraz kaynak sayfasının belirli CSP yönergelerini tespit etme yolu açar. Bu güvenlik açığı kapatılmış olarak işaretlenmiş olsa da, bulgularımız, hata sayfasını tespit edebilen yeni bir sızıntı tekniği ortaya koymaktadır ve temel sorunun asla tam olarak ele alınmadığını önermektedir.
Dahil Etme Yöntemleri: Fetch API
Tespit Edilebilir Fark: Başlık
Daha fazla bilgi: https://xsleaks.dev/docs/attacks/browser-features/corp/
Özet: Cross-Origin Resource Policy (CORP) ile güvence altına alınmış kaynaklar, yasaklı bir kökenden alındığında hata verir.
Kod Örneği: https://xsinator.com/testing.html#CORP%20Leak
CORP başlığı, belirli bir kaynağa no-cors çapraz kaynak isteklerini engelleyen nispeten yeni bir web platformu güvenlik özelliğidir. CORP ile korunan bir kaynak, alındığında hata verecektir.
Dahil Etme Yöntemleri: HTML Elemanları
Tespit Edilebilir Fark: Başlıklar
Özet: CORB, saldırganların nosniff
başlığının istekte mevcut olup olmadığını tespit etmelerine olanak tanıyabilir.
Kod Örneği: https://xsinator.com/testing.html#CORB%20Leak
Saldırı hakkında daha fazla bilgi için bağlantıyı kontrol edin.
Dahil Etme Yöntemleri: Fetch API
Tespit Edilebilir Fark: Başlıklar
Özet: Eğer Origin başlığı Access-Control-Allow-Origin
başlığında yansıtılıyorsa, bir kaynağın önbellekte zaten olup olmadığını kontrol etmek mümkündür.
Eğer Origin başlığı Access-Control-Allow-Origin
başlığında yansıtılıyorsa, bir saldırgan bu davranışı kötüye kullanarak CORS modunda kaynağı almaya çalışabilir. Eğer bir hata tetiklenmezse, bu, kaynağın web'den doğru bir şekilde alındığı anlamına gelir; eğer bir hata tetiklenirse, bunun nedeni önbellekten erişilmiş olmasıdır (hata, önbelleğin orijinal alan adına izin veren bir CORS başlığı ile bir yanıt kaydetmesi nedeniyle görünür).
Eğer köken yansıtılmıyorsa ancak bir joker karakter kullanılıyorsa (Access-Control-Allow-Origin: *
), bu çalışmayacaktır.
Dahil Etme Yöntemleri: Fetch API
Tespit Edilebilir Fark: Durum Kodu
Özet: GC ve SA, yönlendirme tamamlandıktan sonra yanıtın türünü (opaque-redirect) kontrol etmeye olanak tanır.
redirect: "manual"
ve diğer parametrelerle Fetch API kullanarak bir istek gönderildiğinde, response.type
niteliğini okumak mümkündür ve eğer opaqueredirect
ile eşitse, yanıt bir yönlendirme olmuştur.
Dahil Etme Yöntemleri: Pop-up'lar
Tespit Edilebilir Fark: Başlık
Daha fazla bilgi: https://xsinator.com/paper.pdf (5.4), https://xsleaks.dev/docs/attacks/window-references/
Özet: Cross-Origin Opener Policy (COOP) ile korunmuş sayfalar, çapraz kaynak etkileşimlerinden erişimi engeller.
Kod Örneği: https://xsinator.com/testing.html#COOP%20Leak
Bir saldırgan, bir çapraz kaynak HTTP yanıtında Cross-Origin Opener Policy (COOP) başlığının varlığını çıkarabilir. COOP, web uygulamaları tarafından dış sitelerin rastgele pencere referansları elde etmesini engellemek için kullanılır. Bu başlığın görünürlüğü, contentWindow
referansına erişmeye çalışarak belirlenebilir. COOP koşullu olarak uygulandığında, opener
niteliği belirleyici bir gösterge haline gelir: COOP aktif olduğunda tanımsızdır, yokluğunda ise tanımlıdır.
Dahil Etme Yöntemleri: Fetch API, HTML Elemanları
Tespit Edilebilir Fark: Durum Kodu / İçerik
Daha fazla bilgi: https://xsleaks.dev/docs/attacks/navigations/#server-side-redirects
Özet: Yönlendirme yanıt uzunluğundaki farklılıkları tespit et, çünkü sunucu bir hata ile yanıt verebilir ve bir uyarı oluşturulabilir.
Eğer bir sunucu tarafı yönlendirmesi yönlendirme içinde kullanıcı girdisi ve ek veri kullanıyorsa, bu davranışı tespit etmek mümkündür çünkü genellikle sunucuların istek uzunluğu sınırı vardır. Eğer kullanıcı verisi o uzunluk - 1 ise, çünkü yönlendirme o veriyi kullanıyor ve ek bir şey ekliyorsa, bu bir hata tetikler ve Hata Olayları aracılığıyla tespit edilebilir.
Eğer bir şekilde bir kullanıcıya çerez ayarlayabiliyorsanız, bu saldırıyı yeterince çerez ayarlayarak (çerez bombası) gerçekleştirebilirsiniz, böylece doğru yanıtın artmış boyutu bir hata tetikler. Bu durumda, bu isteği aynı siteden tetiklerseniz, <script>
otomatik olarak çerezleri gönderecektir (bu nedenle hataları kontrol edebilirsiniz).
Çerez bombası + XS-Arama örneği, bu yazının Beklenen çözümünde bulunabilir: https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#intended
SameSite=None
veya aynı bağlamda olmak genellikle bu tür bir saldırı için gereklidir.
Dahil Etme Yöntemleri: Pop-up'lar
Tespit Edilebilir Fark: Durum Kodu / İçerik
Özet: Yönlendirme yanıt uzunluğundaki farklılıkları tespit et, çünkü bir isteğin yönlendirme yanıt uzunluğu çok büyük olabilir.
Chromium belgelerine göre, Chrome'un maksimum URL uzunluğu 2MB'dır.
Genel olarak, web platformu URL'lerin uzunluğu üzerinde sınırlara sahip değildir (ancak 2^31 yaygın bir sınırdır). Chrome, pratik nedenlerle ve süreçler arası iletişimde hizmet reddi sorunlarını önlemek için URL'leri maksimum 2MB uzunluğuyla sınırlar.
Bu nedenle, eğer yönlendirme URL'si bir durumda daha büyükse, 2MB'dan daha büyük bir URL ile yönlendirme yapılması mümkündür. Bu gerçekleştiğinde, Chrome about:blank#blocked
sayfasını gösterir.
Dikkate değer fark, eğer yönlendirme tamamlandıysa, window.origin
bir hata fırlatır çünkü bir çapraz köken bu bilgiyi erişemez. Ancak, eğer sınır aşıldıysa ve yüklenen sayfa about:blank#blocked
ise, pencerenin origin
değeri ebeveynin değeri olarak kalır, bu da erişilebilir bir bilgidir.
2MB'ye ulaşmak için gereken tüm ek bilgiler, başlangıç URL'sinde bir hash aracılığıyla eklenebilir, böylece yönlendirmede kullanılabilir.
URL Max Length - Client SideDahil Etme Yöntemleri: Fetch API, Çerçeveler
Tespit Edilebilir Fark: Durum Kodu
Özet: Tarayıcının yönlendirme limitini kullanarak URL yönlendirmelerinin gerçekleşip gerçekleşmediğini belirleyin.
Eğer bir tarayıcının takip etmesi gereken maksimum yönlendirme sayısı 20 ise, bir saldırgan 19 yönlendirme ile kendi sayfasını yüklemeyi deneyebilir ve sonunda kurbanı test edilen sayfaya yönlendirebilir. Eğer bir hata tetiklenirse, bu durumda sayfa kurbanı yönlendirmeye çalışıyordur.
Dahil Etme Yöntemleri: Çerçeveler, Pop-up'lar
Tespit Edilebilir Fark: Yönlendirmeler
Daha fazla bilgi: https://xsleaks.dev/docs/attacks/navigations/
Özet: JavaScript kodu tarayıcı geçmişini manipüle eder ve uzunluk özelliği ile erişilebilir.
Geçmiş API'si, JavaScript kodunun tarayıcı geçmişini manipüle etmesine olanak tanır; bu, bir kullanıcının ziyaret ettiği sayfaları kaydeder. Bir saldırgan, uzunluk özelliğini bir dahil etme yöntemi olarak kullanabilir: JavaScript ve HTML navigasyonunu tespit etmek için.
history.length
kontrol edilerek, bir kullanıcı bir sayfaya geçiş yaptığında, aynı kökene geri döndüğünde ve history.length
değerinin yeni değerini kontrol ettiğinde.
Dahil Etme Yöntemleri: Çerçeveler, Pop-up'lar
Tespit Edilebilir Fark: URL, tahmin edilen URL ile aynıysa
Özet: Bir çerçevenin/pop-up'ın konumunun belirli bir URL'de olup olmadığını tahmin etmek mümkündür, geçmiş uzunluğundan yararlanarak.
Kod Örneği: Aşağıda
Bir saldırgan, JavaScript kodunu kullanarak çerçevenin/pop-up'ın konumunu tahmin edilen bir URL'ye manipüle edebilir ve hemen ardından about:blank
'e değiştirebilir. Eğer geçmiş uzunluğu arttıysa, bu, URL'nin doğru olduğu ve artış göstermesi için zaman bulduğu anlamına gelir çünkü URL aynıysa yeniden yüklenmez. Eğer artmadıysa, bu, tahmin edilen URL'yi yüklemeye çalıştığı ancak hemen ardından about:blank
yüklediği için, tahmin edilen URL'yi yüklerken geçmiş uzunluğunun asla artmadığı anlamına gelir.
Inclusion Methods: Frames, Pop-ups
Detectable Difference: Sayfa İçeriği
Summary: window.length
özelliğini inceleyerek iframe öğelerinin miktarını değerlendirin.
Code Example: https://xsinator.com/testing.html#Frame%20Count%20Leak
iframe
veya window.open
aracılığıyla açılan bir webdeki çerçeve sayısını saymak, kullanıcının o sayfadaki durumunu belirlemeye yardımcı olabilir.
Ayrıca, eğer sayfada her zaman aynı sayıda çerçeve varsa, çerçeve sayısını sürekli kontrol etmek, bilgi sızdırabilecek bir deseni belirlemeye yardımcı olabilir.
Bu tekniğin bir örneği, Chrome'da bir PDF'nin çerçeve sayımı ile belirlenebilmesidir çünkü dahili olarak bir embed
kullanılır. zoom
, view
, page
, toolbar
gibi içeriği kontrol etmeye izin veren Açık URL Parametreleri vardır; bu teknik ilginç olabilir.
Inclusion Methods: HTML Öğeleri
Detectable Difference: Sayfa İçeriği
Summary: İki olası durumu ayırt etmek için sızdırılan değeri okuyun.
HTML öğeleri aracılığıyla bilgi sızdırılması, özellikle kullanıcı bilgilerine dayalı dinamik medya dosyaları oluşturulduğunda veya su işaretleri eklendiğinde, medya boyutunu değiştirdiğinde web güvenliği açısından bir endişe kaynağıdır. Bu, belirli HTML öğeleri tarafından açığa çıkarılan bilgileri analiz ederek olası durumları ayırt etmek için saldırganlar tarafından istismar edilebilir.
HTMLMediaElement: Bu öğe, medyanın duration
ve buffered
sürelerini açığa çıkarır; bunlara API'si aracılığıyla erişilebilir. HTMLMediaElement hakkında daha fazla bilgi edinin
HTMLVideoElement: videoHeight
ve videoWidth
değerlerini açığa çıkarır. Bazı tarayıcılarda, webkitVideoDecodedByteCount
, webkitAudioDecodedByteCount
ve webkitDecodedFrameCount
gibi ek özellikler mevcuttur; bu da medya içeriği hakkında daha derinlemesine bilgi sunar. HTMLVideoElement hakkında daha fazla bilgi edinin
getVideoPlaybackQuality(): Bu fonksiyon, video oynatma kalitesi hakkında bilgiler sağlar; totalVideoFrames
dahil, bu da işlenen video verisinin miktarını gösterebilir. getVideoPlaybackQuality() hakkında daha fazla bilgi edinin
HTMLImageElement: Bu öğe, bir resmin height
ve width
değerlerini sızdırır. Ancak, bir resim geçersizse, bu özellikler 0 döner ve image.decode()
fonksiyonu reddedilir; bu da resmin düzgün bir şekilde yüklenmediğini gösterir. HTMLImageElement hakkında daha fazla bilgi edinin
Inclusion Methods: HTML Öğeleri
Detectable Difference: Sayfa İçeriği
Summary: Kullanıcının durumu veya durumu ile ilişkili web sitesi stilindeki değişiklikleri belirleyin.
Code Example: https://xsinator.com/testing.html#CSS%20Property%20Leak
Web uygulamaları, kullanıcının durumuna bağlı olarak web sitesi stilini değiştirebilir. Saldırgan sayfasında HTML bağlantı öğesi ile çapraz kökenli CSS dosyaları gömülebilir ve kurallar saldırgan sayfasına uygulanır. Eğer bir sayfa bu kuralları dinamik olarak değiştirirse, bir saldırgan, kullanıcı durumuna bağlı olarak bu farkları belirleyebilir.
Bir sızıntı tekniği olarak, saldırgan belirli bir HTML öğesinin CSS özelliklerini okumak için window.getComputedStyle
yöntemini kullanabilir. Sonuç olarak, etkilenen öğe ve özellik adı biliniyorsa, saldırgan keyfi CSS özelliklerini okuyabilir.
Inclusion Methods: HTML Öğeleri
Detectable Difference: Sayfa İçeriği
Summary: Daha önce ziyaret edilmiş bir URL'ye :visited
stilinin uygulanıp uygulanmadığını tespit edin.
Bu kaynağa göre, bu başsız Chrome'da çalışmıyor.
CSS :visited
seçici, daha önce kullanıcı tarafından ziyaret edilmiş URL'leri farklı şekilde stilize etmek için kullanılır. Geçmişte, bu stil farklılıklarını belirlemek için getComputedStyle()
yöntemi kullanılabiliyordu. Ancak, modern tarayıcılar, bu yöntemin bir bağlantının durumunu açığa çıkarmasını önlemek için güvenlik önlemleri uygulamıştır. Bu önlemler, bağlantının ziyaret edilmiş gibi görünmesini sağlamakta ve :visited
seçici ile uygulanabilecek stilleri kısıtlamaktadır.
Bu kısıtlamalara rağmen, bir bağlantının ziyaret edilmiş durumunu dolaylı olarak ayırt etmek mümkündür. Bir teknik, kullanıcıyı CSS'den etkilenen bir alanla etkileşime girmeye zorlamaktır; özellikle mix-blend-mode
özelliğini kullanarak. Bu özellik, öğelerin arka planlarıyla karışmasını sağlar ve kullanıcı etkileşimine bağlı olarak ziyaret edilmiş durumu açığa çıkarabilir.
Ayrıca, kullanıcı etkileşimi olmadan bağlantıların render sürelerini istismar ederek tespit yapılabilir. Tarayıcılar, ziyaret edilmiş ve ziyaret edilmemiş bağlantıları farklı şekilde render edebileceğinden, bu render süresinde ölçülebilir bir zaman farkı oluşturabilir. Bir kanıt konsepti (PoC), bu tekniği birden fazla bağlantı kullanarak zaman farkını artırmak için gösteren bir Chromium hata raporunda belirtilmiştir; böylece ziyaret edilmiş durum zaman analizi ile tespit edilebilir hale gelir.
Bu özellikler ve yöntemler hakkında daha fazla bilgi için belgelerine göz atın:
:visited
: MDN Belgeleri
getComputedStyle()
: MDN Belgeleri
mix-blend-mode
: MDN Belgeleri
Inclusion Methods: Frames
Detectable Difference: Başlıklar
Summary: Google Chrome'da, bir sayfa X-Frame-Options kısıtlamaları nedeniyle çapraz kökenli bir sitede gömülmesi engellendiğinde özel bir hata sayfası görüntülenir.
Chrome'da, X-Frame-Options
başlığı "deny" veya "same-origin" olarak ayarlanmış bir sayfa bir nesne olarak gömüldüğünde, bir hata sayfası görünür. Chrome, bu nesnenin contentDocument
özelliği için boş bir belge nesnesi (null yerine) döner; bu, iframe'lerde veya diğer tarayıcılarda böyle değildir. Saldırganlar, boş belgeyi tespit ederek bunu istismar edebilir; bu, özellikle geliştiricilerin X-Frame-Options başlığını tutarsız bir şekilde ayarladığı durumlarda, kullanıcının durumu hakkında bilgi açığa çıkarabilir. Güvenlik başlıklarının farkında olmak ve tutarlı bir şekilde uygulanması, bu tür sızıntıları önlemek için kritik öneme sahiptir.
Inclusion Methods: Frames, Pop-ups
Detectable Difference: Başlıklar
Summary: Bir saldırgan, iframe'leri kullanarak dosya indirmelerini ayırt edebilir; iframe'in sürekli erişilebilirliği, dosya indirmenin başarılı olduğunu gösterir.
Content-Disposition
başlığı, özellikle Content-Disposition: attachment
, tarayıcıya içeriği görüntülemek yerine indirmesi talimatını verir. Bu davranış, kullanıcının bir dosya indirmesini tetikleyen bir sayfaya erişip erişmediğini tespit etmek için istismar edilebilir. Chromium tabanlı tarayıcılarda, bu indirme davranışını tespit etmek için birkaç teknik vardır:
İndirme Çubuğu İzleme:
Chromium tabanlı tarayıcılarda bir dosya indirildiğinde, tarayıcı penceresinin alt kısmında bir indirme çubuğu görünür.
Pencere yüksekliğindeki değişiklikleri izleyerek, saldırgan indirme çubuğunun görünümünü çıkarabilir; bu, bir indirmenin başlatıldığını gösterir.
Iframe ile İndirme Navigasyonu:
Bir sayfa Content-Disposition: attachment
başlığını kullanarak bir dosya indirmesini tetiklediğinde, bu bir navigasyon olayı oluşturmaz.
İçeriği bir iframe'de yükleyerek ve navigasyon olaylarını izleyerek, içerik durumunun bir dosya indirmesine neden olup olmadığını kontrol etmek mümkündür (navigasyon yok) veya olmadığını kontrol edebilirsiniz.
Iframe Olmadan İndirme Navigasyonu:
Iframe tekniğine benzer şekilde, bu yöntem bir iframe yerine window.open
kullanmayı içerir.
Yeni açılan penceredeki navigasyon olaylarını izlemek, bir dosya indirmenin tetiklenip tetiklenmediğini (navigasyon yok) veya içeriğin satır içi olarak görüntülenip görüntülenmediğini (navigasyon gerçekleşir) ortaya çıkarabilir.
Sadece giriş yapmış kullanıcıların bu tür indirmeleri tetikleyebildiği senaryolarda, bu teknikler kullanıcının kimlik doğrulama durumunu dolaylı olarak çıkarma amacıyla kullanılabilir.
Inclusion Methods: Pop-ups
Detectable Difference: Zamanlama
Summary: Bir saldırgan, iframe'leri kullanarak dosya indirmelerini ayırt edebilir; iframe'in sürekli erişilebilirliği, dosya indirmenin başarılı olduğunu gösterir.
Bu tekniğin ilginç olmasının nedeni: Chrome artık önbellek bölümlendirmesi yapıyor ve yeni açılan sayfanın önbellek anahtarı: (https://actf.co, https://actf.co, https://sustenance.web.actf.co/?m =xxx)
; ancak bir ngrok sayfası açıp içinde fetch kullanırsam, önbellek anahtarı: (https://myip.ngrok.io, https://myip.ngrok.io, https://sustenance.web.actf.co/?m=xxx)
olacaktır; önbellek anahtarı farklıdır, bu nedenle önbellek paylaşılmaz. Daha fazla ayrıntıyı burada bulabilirsiniz: Önbelleği bölümlendirerek güvenlik ve gizlilik kazanma
(Buradan gelen yorum)
Eğer bir site example.com
, *.example.com/resource
adresinden bir kaynak içeriyorsa, o kaynak, kaynağın doğrudan üst düzey navigasyon ile istek yapılmış gibi aynı önbellek anahtarına sahip olacaktır. Çünkü önbellek anahtarı, üst düzey eTLD+1 ve çerçeve eTLD+1'den oluşur.
Önbelleğe erişim, bir kaynağı yüklemekten daha hızlı olduğundan, bir sayfanın konumunu değiştirmeyi ve durdurduktan sonra 20ms (örneğin) sonra iptal etmeyi denemek mümkündür. Eğer durdurmadan sonra köken değiştiyse, bu, kaynağın önbelleğe alındığı anlamına gelir. Ya da sadece önbelleğe alınmış sayfaya bazı fetch istekleri gönderip geçen süreyi ölçebilirsiniz.
Inclusion Methods: Fetch API
Detectable Difference: Yönlendirmeler
Summary: Bir fetch isteğine verilen yanıtın bir yönlendirme olup olmadığını bulmak mümkündür.
Code Example:
Inclusion Methods: Fetch API
Detectable Difference: Zamanlama
Summary: Bir kaynağı yüklemeyi denemek ve yüklenmeden önce yüklemeyi kesmek mümkündür. Bir hata tetiklenip tetiklenmediğine bağlı olarak, kaynak önbelleğe alınmış veya alınmamıştır.
fetch ve setTimeout kullanarak bir AbortController ile hem kaynağın önbelleğe alınıp alınmadığını tespit etmek hem de belirli bir kaynağı tarayıcı önbelleğinden çıkarmak mümkündür. Ayrıca, bu işlem yeni içerik önbelleğe alınmadan gerçekleşir.
Inclusion Methods: HTML Öğeleri (script)
Detectable Difference: Sayfa İçeriği
Summary: Yerleşik fonksiyonları aşmak ve bunların argümanlarını okumak mümkündür; bu, çapraz kökenli script'ten bile (doğrudan okunamaz) değerli bilgileri sızdırabilir.
Inclusion Methods: Pop-ups
Detectable Difference: Sayfa İçeriği
Summary: Service worker kullanarak bir webin yürütme süresini ölçün.
Code Example:
Verilen senaryoda, saldırgan, kendi alanlarından biri olan "attacker.com" içinde bir service worker kaydetme girişiminde bulunur. Ardından, saldırgan ana belgeden hedef web sitesinde yeni bir pencere açar ve service worker'a bir zamanlayıcı başlatmasını talimatını verir. Yeni pencere yüklenmeye başladığında, saldırgan önceki adımda elde edilen referansı service worker tarafından yönetilen bir sayfaya yönlendirir.
Önceki adımda başlatılan isteğin varışında, service worker 204 (No Content) durum kodu ile yanıt verir ve navigasyon sürecini etkili bir şekilde sonlandırır. Bu noktada, service worker daha önce ikinci adımda başlatılan zamanlayıcıdan bir ölçüm alır. Bu ölçüm, navigasyon sürecinde gecikmelere neden olan JavaScript'in süresinden etkilenir.
Yürütme zamanlamasında, daha kesin ölçümler elde etmek için ağ faktörlerini ortadan kaldırmak mümkündür. Örneğin, sayfa yüklenmeden önce sayfanın kullandığı kaynakları yükleyerek.
Inclusion Methods: Fetch API
Detectable Difference: Zamanlama (genellikle Sayfa İçeriği, Durum Kodu nedeniyle)
Summary: Bir isteği gerçekleştirmek için geçen süreyi ölçmek için performance.now() kullanın. Diğer saatler de kullanılabilir.
Inclusion Methods: Pop-ups
Detectable Difference: Zamanlama (genellikle Sayfa İçeriği, Durum Kodu nedeniyle)
Summary: window.open
kullanarak bir isteği gerçekleştirmek için geçen süreyi ölçmek için performance.now() kullanın. Diğer saatler de kullanılabilir.
Trickest kullanarak dünyanın en gelişmiş topluluk araçlarıyla iş akışlarını kolayca oluşturun ve otomatikleştirin. Bugün Erişim Alın:
Burada, HTML içeriği enjekte ederek çapraz kökenli bilgileri dışa aktarma tekniklerini bulabilirsiniz. Bu teknikler, herhangi bir nedenle HTML enjekte edebiliyorsanız ancak JS kodu enjekte edemiyorsanız ilginçtir.
Eğer içeriği dışa aktarmanız gerekiyorsa ve gizli olanın öncesine HTML ekleyebiliyorsanız, yaygın dangling markup tekniklerini kontrol etmelisiniz. Ancak, herhangi bir nedenle karakter karakter yapmanız GEREKİYORSA (belki iletişim bir önbellek vuruşu aracılığıyla) bu hileyi kullanabilirsiniz.
HTML'deki resimlerin "loading" özelliği, değeri "lazy" olabilir. Bu durumda, resim, sayfa yüklenirken değil, görüntülendiğinde yüklenecektir:
Bu nedenle, yapabileceğiniz şey birçok gereksiz karakter eklemek (örneğin binlerce "W") ve gizli bilgiden önce web sayfasını doldurmak veya <br><canvas height="1850px"></canvas><br>
gibi bir şey eklemektir.
Sonra, örneğin enjekte etmemiz bayraktan önce görünüyorsa, görüntü yüklenir, ancak bayraktan sonra görünüyorsa, bayrak + gereksiz karakter yüklenmesini engelleyecektir (ne kadar gereksiz karakter ekleyeceğinizle oynamanız gerekecek). Bu, bu yazıda olan şeydir.
Başka bir seçenek, izin verilirse scroll-to-text-fragment kullanmaktır:
Ancak, botun sayfaya erişmesini sağlarsınız, bir şeyle
Web sayfası şöyle bir şey olacak: https://victim.com/post.html#:~:text=SECR
Burada post.html, saldırganın gereksiz karakterlerini ve tembel yükleme görüntüsünü içerir ve ardından botun sırrı eklenir.
Bu metin, botun sayfadaki SECR
metnini içeren herhangi bir metne erişmesini sağlayacaktır. Bu metin sırdır ve görüntünün hemen altında yer alır, görüntü yalnızca tahmin edilen sır doğruysa yüklenir. Böylece, sırrı karakter karakter dışarı sızdırmak için oracliniz olur.
Bunu istismar etmek için bazı kod örnekleri: https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e
Eğer harici bir görüntüyü yüklemek mümkün değilse, bu, saldırgana görüntünün yüklendiğini gösterebilir, başka bir seçenek ise karakteri birkaç kez tahmin etmeye çalışmak ve bunu ölçmektir. Eğer görüntü yüklenirse, tüm istekler görüntü yüklenmediğinde olduğundan daha uzun sürecektir. Bu, bu yazının çözümünde özetlenen şeydir:
Event Loop Blocking + Lazy imagesEğer jQuery(location.hash)
kullanılıyorsa, zamanlama yoluyla bazı HTML içeriğinin var olup olmadığını bulmak mümkündür, çünkü main[id='site-main']
seçici eşleşmezse, seçicilerin geri kalanını kontrol etmesine gerek yoktur:
Bu tekniklere karşı nasıl korunacağınız hakkında daha fazla bilgi için https://xsinator.com/paper.pdf ve wiki'nin her bölümünde https://xsleaks.dev/ önerilen önlemler bulunmaktadır.
Trickest kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen iş akışlarını kolayca oluşturun ve otomatikleştirin. Bugün Erişim Alın:
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)