Uygulamalar arası komut dosyası çalıştırma

OWASP kategorisi: MASVS-CODE: Kod Kalitesi

Genel Bakış

WebView, Android uygulamalarına yerleştirilmiş bir tarayıcı bileşenidir ve web içeriğinin uygulama içinde gösterilmesini kolaylaştırır. HTML, CSS ve JavaScript'i uygulamanın kullanıcı arayüzünde oluşturur.

Uygulama Arası Komut Dosyası Çalıştırma, genel olarak kötü amaçlı kodun kurban uygulama bağlamında yürütülmesiyle ilişkilendirilir. Bu dokümantasyonun amaçları doğrultusunda konu, özellikle güvenlik açığı olan bir WebView'a kötü amaçlı JavaScript kodu ekleme ile sınırlı olacaktır.

Bir uygulama, yeterli doğrulama veya temizleme olmadan kötü amaçlı JavaScript'i WebView'e kabul ettiğinde uygulama, uygulama genelinde komut dosyası güvenlik açığına karşı savunmasız kalır.

Etki

Uygulamalar arası komut dosyası güvenlik açıkları, saldırgan tarafından kontrol edilen JavaScript içeriği doğrulanmadan veya temizlenmeden güvenlik açığı olan uygulamanın WebView'ına aktarıldığında kötüye kullanılabilir. Sonuç olarak, saldırgan tarafından sağlanan JavaScript kodu, kurban uygulamasının WebView'u bağlamında yürütülür. Kötü amaçlı JavaScript kodu daha sonra saldırıya uğrayan uygulamanın izinlerini kullanabilir. Bu durum, hassas kullanıcı verilerinin çalınmasına ve hesabın ele geçirilmesine yol açabilir.

Çözümler

JavaScript'i devre dışı bırak

Uygulamanızın JavaScript gerektirmemesi durumunda, JavaScript'i devre dışı bırakmak uygulamanızın tehdit oluşturmasını önler:

Kotlin

// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings

// Disable JavaScript
webSettings.javaScriptEnabled = false

Java

// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();

// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);

Uygulamanız JavaScript gerektiriyorsa WebView'a iletilen tüm JavaScript'in sahibi veya denetleyicisi olduğunuzdan emin olun. WebView'ın rastgele JavaScript yürütmesine izin vermeyin. Sonraki bölümdeki yönergeleri inceleyin.

WebView'a yalnızca beklenen içeriğin yüklendiğinden emin olun

shouldOverrideUrlLoading(), loadUrl() veya evaluateJavascript(), gibi yöntemleri kullanırken bunlara iletilen tüm URL'lerin kontrol edildiğinden emin olun. Daha önce belirtildiği gibi, WebView'a iletilen tüm JavaScript'ler yalnızca beklenen alanlardan gelmelidir. Bu nedenle, yüklenenlerin doğrulanması önemlidir.

İyi tavsiyeler ve örnekler için OWASP'nin giriş doğrulama dokümanlarını ve WebView'lar için bu Android güvenlik kontrol listesini inceleyin.

WebView için güvenli dosya erişimi ayarlarını belirleme

Dosyalara erişilememesini sağlamak, WebView'larda rastgele JavaScript'in yürütülmesini önleyebilir.Dosya erişimini güvenli hale getirirken aşağıdaki WebSettings dikkate alınmalıdır:

  • Dosya erişimini devre dışı bırakın. Varsayılan olarak, setAllowFileAccess, API düzeyi 29 ve daha düşük sürümlerde True olarak ayarlanır. Bu, yerel dosyalara erişime izin verir. API düzeyi 30 ve sonraki sürümlerde varsayılan değer False'dır. Dosya erişimine izin verilmediğinden emin olmak için setAllowFileAccess değerini açıkça False olarak ayarlayın.
  • İçeriğe erişimi devre dışı bırakın. setAllowContentAccess için varsayılan ayar True'dir. İçerik URL'sine erişim, WebView'un sistemde yüklü bir içerik sağlayıcıdan içerik yüklemesine olanak tanır. Uygulamanız içerik erişimi gerektirmiyorsa uygulamalar arası komut dosyası saldırısı durumunda olası kötüye kullanımı önlemek için setAllowContentAccess değerini False olarak ayarlayın.

  • kotlin kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = false

  • java java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);

Güvenli Taramayı etkinleştir

WebView'a iletilen URL'leri kimlik avı veya kötü amaçlı alanlar için taramak üzere AndroidManifest.xml içinde Güvenli Tarama'yı etkinleştirin:

<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
   android:value="true" />

Kaynaklar