Script inter-applications

Catégorie OWASP : MASVS-CODE : qualité du code

Présentation

Un composant WebView est un composant de navigateur intégré aux applications Android qui facilite l'affichage de contenu Web dans une application. Il affiche du code HTML, CSS et JavaScript dans l'interface utilisateur de l'application.

Le script multi-applications est généralement associé à l'exécution de code malveillant dans le contexte d'une application victime. Aux fins de cette documentation, le sujet sera limité spécifiquement à l'injection de code JavaScript malveillant dans un composant WebView vulnérable.

Lorsqu'une application accepte du code JavaScript malveillant dans un composant WebView sans validation ni nettoyage suffisants, elle est vulnérable au script multi-applis.

Impact

Les failles de script multi-applis peuvent être exploitées lorsque du contenu JavaScript contrôlé par un pirate informatique est transmis au composant WebView de l'application vulnérable sans être validé ni nettoyé. Par conséquent, le code JavaScript fourni par le pirate informatique est exécuté dans le contexte du composant WebView de l'application victime. Le code JavaScript malveillant peut ensuite utiliser les mêmes autorisations que celles de l'application victime, ce qui peut entraîner le vol de données utilisateur sensibles et le piratage de compte.

Stratégies d'atténuation

Désactiver JavaScript

Si votre application ne nécessite pas JavaScript, sa désactivation garantira qu'elle ne deviendra pas une menace :

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);

Si votre application nécessite JavaScript, assurez-vous que vous possédez ou contrôlez tout code JavaScript transmis à WebView. Évitez d'autoriser WebView à exécuter du code JavaScript arbitraire. Pour en savoir plus, consultez les conseils de la section suivante.

S'assurer que seul le contenu attendu est chargé dans WebView

Lorsque vous utilisez des méthodes telles que shouldOverrideUrlLoading(), loadUrl(), ou evaluateJavascript(), assurez-vous que toutes les URL qui leur sont transmises sont vérifiées. Comme indiqué précédemment, tout code JavaScript transmis à WebView ne doit provenir que des domaines attendus. Il est donc important de vérifier ce qui est chargé.

Pour obtenir des conseils et des exemples utiles, consultez la documentation sur la validation des entrées d'OWASP et cette checklist de sécurité Android pour les composants WebView.

Définir des paramètres d'accès sécurisé aux fichiers pour WebView

S'assurer que les fichiers ne sont pas accessibles peut empêcher l'exécution de code JavaScript arbitraire dans les composants WebView.Les WebSettings doivent être pris en compte lors de la sécurisation de l'accès aux fichiers :

  • Désactiver l'accès aux fichiers. Par défaut, setAllowFileAccess est défini sur True dans le niveau d'API 29 et inférieur, ce qui autorise l'accès aux fichiers locaux. Dans le niveau d'API 30 et supérieur, la valeur par défaut est False. Pour vous assurer que l'accès aux fichiers n'est pas autorisé, définissez explicitement setAllowFileAccess sur False.
  • Désactiver l'accès au contenu. Le paramètre par défaut de setAllowContentAccess est True. L'accès à l'URL de contenu permet à WebView de charger du contenu à partir d'un fournisseur de contenu installé dans le système. Si votre application ne nécessite pas d'accès au contenu, définissez setAllowContentAccess sur False pour éviter tout usage abusif potentiel en cas d'attaque de script multi-applications.

  • 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);

Activer la navigation sécurisée

Activez la navigation sécurisée dans AndroidManifest.xml pour analyser les URL transmises à WebView afin de détecter les domaines d'hameçonnage ou malveillants :

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

Ressources