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,
setAllowFileAccessest défini surTruedans 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 estFalse. Pour vous assurer que l'accès aux fichiers n'est pas autorisé, définissez explicitementsetAllowFileAccesssurFalse. Désactiver l'accès au contenu. Le paramètre par défaut de
setAllowContentAccessestTrue. 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éfinissezsetAllowContentAccesssurFalsepour é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 = falsejava
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
- Documentation sur la navigation sécurisée
- Documentation de référence pour les développeurs WebView
- Documentation de référence pour les développeurs WebSettings pour WebView
- Documentation pour les développeurs setAllowFileAccess
- Documentation de référence pour les développeurs setAllowContentAccess