Webview Attacks
WebView Yapılandırmaları ve Güvenliği Rehberi
WebView Zafiyetlerinin Genel Bakışı
Android geliştirmenin kritik bir yönü, WebViews'in doğru şekilde işlenmesini içerir. Bu rehber, WebView kullanımıyla ilişkili riskleri azaltmak için temel yapılandırmaları ve güvenlik uygulamalarını vurgular.
WebViews'de Dosya Erişimi
Varsayılan olarak, WebViews dosya erişimine izin verir. Bu işlevsellik, Android API seviyesi 3 (Cupcake 1.5) ile kullanılabilen setAllowFileAccess()
yöntemi tarafından kontrol edilir. android.permission.READ_EXTERNAL_STORAGE iznine sahip uygulamalar, dosya URL şeması (file://path/to/file
) kullanarak harici depolamadan dosyaları okuyabilir.
Eskimiş Özellikler: Evrensel ve URL'lerden Dosya Erişimi
Dosya URL'lerinden Evrensel Erişim: Bu eskimiş özellik, dosya URL'lerinden çapraz köken isteklere izin veriyordu ve potansiyel XSS saldırıları nedeniyle önemli bir güvenlik riski oluşturuyordu. Android Jelly Bean ve üzeri sürümlere hedeflenen uygulamalar için varsayılan ayar devre dışı bırakılmıştır (
false
).Bu ayarı kontrol etmek için
getAllowUniversalAccessFromFileURLs()
kullanın.Bu ayarı değiştirmek için
setAllowUniversalAccessFromFileURLs(boolean)
kullanın.Dosya URL'lerinden Dosya Erişimi: Bu özellik de eskimiştir ve diğer dosya şema URL'lerinden içeriğe erişimi kontrol eder. Evrensel erişim gibi, artırılmış güvenlik için varsayılan olarak devre dışı bırakılmıştır.
Kontrol etmek için
getAllowFileAccessFromFileURLs()
kullanın ve ayarlamak içinsetAllowFileAccessFromFileURLs(boolean)
kullanın.
Güvenli Dosya Yükleme
Dosya sistemine erişimi devre dışı bırakmak ancak varlıklara ve kaynaklara hala erişmek için setAllowFileAccess()
yöntemi kullanılır. Android R ve üzeri sürümlerde, varsayılan ayar false
'dur.
getAllowFileAccess()
ile kontrol edin.setAllowFileAccess(boolean)
ile etkinleştirin veya devre dışı bırakın.
WebViewAssetLoader
WebViewAssetLoader sınıfı, yerel dosyaları yüklemek için modern bir yaklaşımı temsil eder. Yerel varlıklara ve kaynaklara erişmek için http(s) URL'lerini kullanır ve Aynı Köken politikası ile uyumlu olarak çalışır, böylece CORS yönetimini kolaylaştırır.
loadUrl
Bu, bir web görünümünde keyfi URL'leri yüklemek için yaygın olarak kullanılan bir işlevdir.
Tabii ki, potansiyel bir saldırganın bir uygulamanın yükleyeceği URL'yi kontrol edebilmesi asla mümkün olmamalıdır.
JavaScript ve Intent Scheme İşleme
JavaScript: WebViews'da varsayılan olarak devre dışı bırakılmıştır,
setJavaScriptEnabled()
aracılığıyla etkinleştirilebilir. JavaScript'in uygun korumalar olmadan etkinleştirilmesi, güvenlik açıklarına neden olabilir, bu nedenle dikkatli olunmalıdır.Intent Scheme: WebViews,
intent
şemasını işleyebilir ve dikkatli bir şekilde yönetilmezse, sömürülere yol açabilir. Bir örnek güvenlik açığı, kötü niyetli bir şekilde kullanılabilecek "support_url" adlı açık bir WebView parametresini içeriyordu ve bu durum çapraz site komut dosyası (XSS) saldırılarını gerçekleştirmek için sömürülebilirdi.
adb kullanarak sömürü örneği:
Javascript Köprüsü
Android tarafından sağlanan bir özellik, bir WebView içindeki JavaScript'in yerel Android uygulama işlevlerini çağırmasını sağlar. Bu, JavaScript'i yerel Android işlevleriyle bütünleştiren addJavascriptInterface
yöntemi kullanılarak gerçekleştirilir ve WebView JavaScript köprüsü olarak adlandırılır. Bu yöntem, WebView içindeki tüm sayfaların kayıtlı JavaScript Arayüzü nesnesine erişmesine izin verdiği için dikkatli olunmalıdır, çünkü hassas bilgiler bu arayüzler aracılığıyla ifşa edilirse güvenlik riski oluşturabilir.
Android sürümü 4.2'den düşük hedefleyen uygulamalar için aşırı dikkat gerekir, çünkü kötü amaçlı JavaScript kullanarak yansımayı sömürerek uzaktan kod yürütme izni veren bir zafiyet bulunmaktadır.
Bir JavaScript Köprüsü Uygulamak
JavaScript arayüzleri, bir sınıf yönteminin JavaScript'e açıklandığı örneklerde olduğu gibi yerel kodla etkileşime geçebilir:
JavaScript Köprüsü, WebView'e bir arayüz eklenerek etkinleştirilir:
JavaScript aracılığıyla potansiyel sömürü, örneğin bir XSS saldırısı yoluyla, açığa çıkarılan Java yöntemlerinin çağrılmasını sağlar:
Riskleri azaltmak için JavaScript köprüsü kullanımını kısıtlayın ve JavaScript'in uzaktan kaynaklardan yüklenmesini engelleyin. Daha eski cihazlar için minimum API seviyesini 17 olarak ayarlayın.
Yansıma Tabanlı Uzak Kod Yürütme (RCE)
Belgelenmiş bir yöntem, belirli bir yükü çalıştırarak yansıma aracılığıyla RCE elde etmeyi sağlar. Bununla birlikte,
@JavascriptInterface
açıklaması izinsiz yöntem erişimini önler, saldırı yüzeyini sınırlar.
Uzaktan Hata Ayıklama
Uzaktan hata ayıklama, Chrome Geliştirici Araçları ile mümkündür ve WebView içeriği içinde etkileşim ve keyfi JavaScript yürütme sağlar.
Uzaktan Hata Ayıklamanın Etkinleştirilmesi
Uzaktan hata ayıklama, bir uygulama içindeki tüm WebViews için şu şekilde etkinleştirilebilir:
Uygulamanın hata ayıklanabilir durumuna bağlı olarak hata ayıklamayı koşullu olarak etkinleştirmek için:
Keyfi Dosyaları Dışa Aktarma
Bir XMLHttpRequest kullanarak keyfi dosyaların dışa aktarılmasını gösterir:
Referanslar
Last updated