Öncelikle bir yanlışı düzelteyim, content-type XML olması durumunda XSS gerçekleştirilebilir.
Örnek Kod ;
Kod:
<html>
<body>
<something:script xmlns:something="http://www.w3.org/1999/xhtml">alert('jonturk @ vvHack.Org')</something:script>
<a:script xmlns:a="http://www.w3.org/1999/xhtml">alert(2)</a:script>
<info>
<name>
<value>Jonturk @ JRBops</value>
</name>
</info>
</body>
Soruyu tam olarak doğru anladığımdan emin değilim fakat sanırım örneğin "
.txt
dosyasıyla “plain/text
” content-type üzerinden XSS gerçekleştirilebilir mi ?" gibi bişey sormak istiyorsun.
Bu şekilde bir güvenlik önlemi almak kısmen mantıklı olabilir fakat tam anlamıyla doğru bir önlemdir diyemeyiz. Çünkü bu önlem bazı durumlarda bypass edilebilir.
Bazı tarayıcılar bilinmeyen içerik türlerinde “Content-Type” başlığını görmezden gelerek, kendisine gelen içeriğin türünü inceleyerek uygun Content-Type kendisi belirliyor. Bu durum sunucu yapılandırmalarında ki hatalardan da kaynaklanabilir. Bu durumda Content-Type güvenilir bir önlem olmaz.
Bu duruma benzer örnek olarak
CVE-2010-1420 zafiyetine göz atabilirsiniz.
Detaylı araştırmak isterseniz “
Mime Sniffing” şeklinde araştırma yapabilirsiniz Fakat bu durum genellikle güncel olmayan eski version tarayıcılardan kaynaklanıyor. Ayrıca Mime Sniffing olayının önüne geçmek adına “
X-Content-Type-Options” adında bir HTTP Header bulunmakta.
X-Content-Type-Options: nosniff
olarak ayarlandığında bu problemin önüne geçilebilmekte.
Ayrıca CSP ile önlem alınmış bir siteye ait senaryo düşünürseniz, “test.txt” dosyasının yüklenmesini Content-Type esas alarak izin veren bir sitenin CSP ile aldığı güvenlik önlemi
<script src="https://target.com/text.txt" ></script>
şeklindeki bir payload ile bypass edilebilir. Bu nedenle Content-Type yerine dosya içeriğinin incelenerek yüklenemeye izin verilmesi daha mantıklı bir önlem olur.
Bir saldırgan olarak bakarsanız, kullanmak istediğimiz kodları farklı Content-Type tanımlanmış dosyalar olsa bile test etmek gerekiyor. Mime Sniffing ile XSS veya WebShell elde etmeniz mümkün.
Sormak istediğiniz tam olarak bu değilse, daha detaylı açıklayarak sorarsanız yardımcı olabilirim.