UTF7 ile XSS
resim bulunamadi Hani bazen, html kodlarken charset tanımlamayız(var mı hâla tanımlamayan?) veya olur da ne bileyim, charset tanımlamasının daha da üstünde kullanıcı tarafından değiştirilebilen bir şeyler bırakırız (title???). İşte o zaman, XSS (Cross site scripting) açıklarına maruz kalabilirmişiz az önce okudum, şaşırdım.

Tarayıcıların "otomatik dil seçimi", sayfa içinde bazı karakterler arayıp, o karakterleri belli karakter kodlamaları ile eşleştirmesiyle gerçekleşiyor. Yani, siz HTTP headerlarda veya meta charset ile karakter kodlaması belirtmezseniz, ve kodlarınızın içinde utf-8'e özel bir karakter varsa, tarayıcı tüm sayfayı utf-8 gibi yorumlayabilir.

Bu açık da bu davranışın kötü kullanılması ile oluşuyor aslında. Şöyle ki; herhangi bir karakter kodlaması belirtmediğiniz takdirde, sayfa içinde utf-7 karakterleri varsa (ki az sonra anlatacağım) sayfa, utf-7 olarak işleniyor ve siz XSS'e maruz kalabiliyorsunuz.

Açığı, şurası detaylıca anlatıyor : http://openmya.hacker.jp/hasegawa/public/20071107/s6/h6.html?file=datae.txt

Kısaca, UTF-7'de bazı özel karaterler (< veya > gibi) encode ediliyor (+ADw- veya +AD4- gibi). Tarayıcı bunları decode edince normal olarak yorumlayıp yoluna devam ediyor. En basit XSS atak denemesi olan

<script>alert('foo')</script>

bu durumda aslında

+ADw-script+AD4- alert('foo'); +ADw-/script+AD4-



Basitçe yaptığınız "özel html karakterlerini temizle(htmlspecialchars)" veya "html tag'lerini uçur(strip_tags)" gibi yöntemler yukarıdaki örnekte işe yaramamış oluyor böylece. Ve eğer bir şekilde tarayıcınız bu kodu UTF-7 olarak yorumlarsa XSS ile güzel günler sizi bekliyor oluyor.


Korunmak için;
1) HTTP header'larda ve/veya meta tag'lerinde hangi karakter setini kullandığınızı özellikle belirtin. Yapılan en büyük hatalardan bir tanesi de utf-8 karakter seti kullanmak için utf8 belirtmektir. Doğrusu utf-8 olmalıdır.

2) meta charset tanımlamasından önce kullanıcı tarafından değiştirilebilir bir veri olmadığından emin olun. Burada en çok <title> etiketi kullanılabilir. Kullanıcıdan alınan veriden bir şekilde <title> etiketi arasındaki metin üretiliyor olabilir.
<title>Hoşgeldin +ADw-script+AD4- alert('foo'); +ADw-/script+AD4-</title> gibi bir kod, eğer Explorer kullanıyorsanız(damn!) ve karakter seti tanımlamadıysanız canınızı yakabilir.

Google'da "utf-7 xss" keyword'ü ile bir çok sonuç bulabilirsiniz. Güvenlik zor zanaât vesselam.

23.Mayıs.2011 Pazartesi :: 17:45:41   23408 kere okundu

Konular
Opera {39}
Müzik {70}
Qt {12}
Ben {122}
Debian {26}
Sinema {24}
php/web {44}
Link {58}
KDE {7}

[Konular]


Takvim
<  Ağustos 2018  >
PSÇPCCtPz
12345
6789101112
13141516171819
20212223242526
2728293031


Temalar
xmas
yesilozAskerEdition
yellos
yesiloz
uira
yesilozHtml5
darksight
greeny
opera
default
dx

Es Dost
Altan
Tuğrul
Selçuk
Timu
Mehmet
Ünal
Gökhan
Koray Taylan
Yaşar
Özgür
Orhan
Kemali
Ahmet
Emrah
Kıvanç
BilgiFrekans
Bünyamin
Bedava Site

Gez Gör Arpacık
Opera Türkiye
Uira
Ma"Cess"teleri


Projeler
Beedon
sozluQ
qPod
SourPHP
Ekşigator
Ekşigator-qt
Soccer Madness