Catégorie OWASP : MASVS-CODE : qualité du code
Présentation
Une WebView est un composant de navigateur intégré aux applications Android qui facilite l'affichage de contenu Web dans une application. Elle affiche du code HTML, CSS et JavaScript dans l'interface utilisateur de l'application.
Les scripts multi-applications sont généralement associés à l'exécution de code malveillant dans le contexte d'une application victime. Aux fins de cette documentation, l'objet sera limité spécifiquement à l'injection de code JavaScript malveillant dans une WebView vulnérable.
Lorsqu'une application accepte du code JavaScript malveillant dans une WebView sans de validation ou d'assainissement, l'application est vulnérable aux failles L'écriture de script.
Impact
Les failles de script inter-applications peuvent être exploitées lorsque Le contenu JavaScript est transmis à la WebView de l'application vulnérable sans être validées ou désinfectées. Par conséquent, le code JavaScript fourni par le pirate informatique est exécuté dans le contexte de la 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 requiert pas JavaScript, vous pouvez le désactiver ne deviennent 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 de posséder ou de contrôler tout code JavaScript transmis à WebView. Évitez d'autoriser WebView à exécuter du code JavaScript arbitraire. Pour en savoir plus, consultez la section suivante.
Assurez-vous que seul le contenu attendu est chargé dans WebView
Lorsque vous utilisez des méthodes telles que shouldOverrideUrlLoading()
, loadUrl()
ou evaluateJavascript()
,
, assurez-vous que les URL qui leur sont transmises sont vérifiées. Comme indiqué précédemment, tout code JavaScript transmis à WebView ne doit
proviennent des domaines attendus. Il est donc important de vérifier ce qui est chargé.
Consultez la documentation sur la validation des entrées de l'OWASP et la checklist de sécurité Android pour les WebViews pour obtenir de bons conseils et des exemples.
Définir les paramètres d'accès sécurisé aux fichiers pour WebView
Vous assurer que les fichiers ne sont pas accessibles peut empêcher du code JavaScript arbitraire
en cours d'exécution dans WebViews.Le WebSettings
suivant doit être
pour sécuriser l'accès aux fichiers:
- Désactivez l'accès aux fichiers. Par défaut,
setAllowFileAccess
est défini surTrue
au niveau d'API 29 ou version antérieure, ce qui permet d'accéder aux fichiers locaux. Au niveau d'API 30 et supérieur, la valeur par défaut estFalse
. Pour vous assurer que l’accès au fichier n’est pas autorisé, définir explicitementsetAllowFileAccess
surFalse
Désactivez l'accès au contenu. La valeur par défaut de
setAllowContentAccess
estTrue
. L'accès à l'URL de contenu permet à WebView de charger du contenu à partir d'un contenu d'un fournisseur de services agréé dans le système. Si votre application ne nécessite pas d'accès au contenu, définissezsetAllowContentAccess
surFalse
pour éviter un usage abusif potentiel en cas d' d'une attaque de script inter-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 à la recherche de 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 de WebSettings pour WebView
- Documentation pour les développeurs sur setAllowFileAccess
- Documentation de référence pour les développeurs sur setAllowContentAccess