Safari Crash Güvenlik Zafiyeti (JavaScript History.pushState)

Merhabalar,

Bu yazıda kimi çevrelerce epey pohpohlanan, yanlış lanse edilen, sanki sadece “Apple” ürünlerinin bir zafiyetiymiş gibi apple ürünlerinde test edilip servis edilen bir güvenlik zafiyetinden bahsedeceğim. Öncelikle baştan anlaşalım; Apple milliyetçisi değilim. Sadece “Apple’ın açığını bulduk yia” gibi cümleler kurulmasın diye olayın altyapısından, zafiyetin neden kaynaklandığınından bahsedeceğim.

crashsafari.com (kesinlikle girmeyin!) sitesi üzerinden canlı örneğini görebileceğiniz bu zafiyet; JavaScript’in “History Object” üzerindeki “pushState” metodundan kaynaklanıyor. JavaScript’teki History objesi, adından da anlaşılacağı üzere browser geçmişi ile ilgili işlemler yapmanıza yarayan bir obje. Obje üzerindeki pushState methodu ile browser geçmişine url ekleyebiliyorsunuz.

Güvenlik zafiyeti ise burada devreye giriyor; pushState metodunu bir döngü içinde çok kez (örneğin 100000) döndürürseniz url’i browser geçmişine 100000 kez kaydetmeye çalışıyor ve browser crash oluyor.

İşin Apple kısmına gelecek olursak; çok tuhaf bir şekilde bu kod betiğini çalıştıran bir web sitesini iOS yüklü cihazlarda (iPhone, iPad etc) Safari üzerinden açtığınızda sadece safari değil komple iOS crash oluyor. Basitçe kullanımını gösterdiğim kod betiği aşağıdaki gibidir. Bir sonraki yazıda görüşmek üzere…

<script>
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for(var i=0; i<100000; i++) {
    for(var i=0; i<10; i++){
        text += possible.charAt(Math.floor(Math.random() * possible.length));
    }
    history.pushState(0,0, text);
    text = "";
}
</script>

JavaScript History.pushState Method : https://developer.mozilla.org/en-US/docs/Web/API/History/pushState

Comments on this post

No comments.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Trackbacks and Pinbacks

No trackbacks.

TrackBack URL