Script inter-applications

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 sur True 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 est False. Pour vous assurer que l’accès au fichier n’est pas autorisé, définir explicitement setAllowFileAccess sur False
  • Désactivez l'accès au contenu. La valeur par défaut de setAllowContentAccess est True. 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éfinissez setAllowContentAccess sur False 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