Quick Tips Zafiyetler

Ngage Live Chat Stored XSS – Character Filter Bypass

Ngage Live Chat Stored XSS – Character Filter Bypass

Günümüzde internet sitesi sahipleri ziyaretçileriyle kısa yoldan iletişime geçebilmek ve bazı istatistiksel verileri görebilmek için canlı destek yazılımları kullanmaktadır. Bu yazılımlarda doğabilecek bir güvenlik açığı, kullanıcı ile yetkili arasındaki konuşmaları tehlikeye atabileceği gibi diğer tüm kullanıcılarla olan görüşmeleri de tehlikeye atabilir, ifşa edebilir. Bugün Ngage Live Chat yazılımında tespit ettiğimiz Stored XSS zafiyetiyle neler yapabileceğimize bir göz atacağız, ayrıca bu zafiyeti incelerken geliştiricilerin zafiyeti kapatma konusunda izledikleri yanlış stratejiyi de ele almış olacağız.

Öncelikle bu yazılımı kullanan herhangi bir siteye girelim, bu site https://www.raphaelsonlaw.com/ olsun. Sol tarafta bulunan “LIVE CHAT” bağlantısına tıklayalım ve canlı desteğe bağlanalım.

https://secure.ngagelive.com/chat/index.aspx?websiteid=94-200-195-132-174-120-194-46 gibi bir bağlantıya yönlendirildik. Buradan şu sonucu çıkarmamız mümkündür: “bütün siteler için canlı desteğe secure.ngagelive.com üzerinden bağlanılıyor.” URL’in sonunda bir websiteid değeri var fakat tüm siteler için destek domain’i aynı… Dolayısıyla cookie’ler secure.ngagelive.com adresi üzerinde tutulacak, bu da araya başka kaynak girmediği için Ngage kullanan bütün siteleri aynı şekilde exploit edebilmemizi sağlayacak.

Sohbete bağlandık, bir XSS payload deneyelim. <img src onerror=alert(document.domain)>TEST yazalım.

Görüldüğü üzere > ve < karakterleri otomatik silindi. Şimdi bunu bypass etmeyi deneyelim, yasaklı karakterden iki tane koyalım yani aynı payload’u <<img src onerror=alert(document.domain)>> olarak girelim.

Bu sefer JavaScript kodu çalıştı. Burada webmaster’ın hatası, < veya > girildiğinde bunların sadece 1 adetini silecek şekilde yapılandırmasıdır. << yazdığımızda <, <<< yazdığımızda << sonucu dönecek, yani sistem hep 1 karakteri azaltacak. Yapılan bir diğer hata ise sadece <, > karakterlerinin engellenmesi, içeriğe hiç bakılmaması. Örneğin <<img şeklinde bir giriş yaptığımda neticede img tag’i dönüyor. Fakat webmaster < karakterini sildiği için güvende olduğunu zannediyor, bu yanlıştır. Sıradan bir ziyaretçi < veya > olarak mesaj göndermek isteyebilir. Yine, <<img girildiği zaman bir HTML tag’i oluşacaktır. Eğer webmaster burada karakter engellemek yerine içeriğin de kontrolünü sağlasaydı hem bu zafiyet engellenmiş olacaktı hem de kullanıcılar  <, > gibi karakterleri yazabileceklerdi. Bu yüzden özellikle client (istemci) taraflı injection saldırılarında önceliğimiz girilen verinin tümünün değerlendirilmesi olmalıdır, sadece birtakım karakterlerin engellenmesi yetersizdir. Ya da zararlı karakterleri buradaki engelleme şekli gibi silmek yerine girdinin tamamını kapsayacak şekilde HTML encoding yönteminden yararlanılabilir.

Peki XSS açığıyla ne yapılabilir? Zafiyetin doğru şekilde exploit edilmesi sonucunda:

  1. Canlı destek yetkilisinin cookie’leri çalınabilir, bu da yetkili hesabında oturum açmamıza imkan tanıyabilir.
  2. JavaScript keylogger yerleştirerek yetkilinin diğer ziyaretçilerle yapacağı konuşmalar takip edilebilir.
  3. Yetkilinin tarayıcısında kötü amaçlı JavaScript kodları çalıştırılabilir.
  4. Yetkili zararlı internet adreslerine yönlendirilebilir.
  5. Yetkiliyle olan konuşma sürdürüldüğü müddetçe yetkilinin tarayıcısı üzerinden kripto para madenciliği yapılabilir.
  6. Yetkilinin oturumu kapattırılabilir, diğer kullanıcılara mesaj gönderimi yapılabilir.

Zafiyetin önlenmesinde ise server (sunucu) tabanlı çözümler tercih edilmelidir. Örneğin PHP için htmlspecialchars(); fonksiyonu, ASP.NET’de ise AntiXSS kütüphanesi kullanılabilir.

Güvenli günler için…

InfinitumIT

İnfinitumit.com.tr