Call to dangerous WebView settings API
Appel à l'API des paramètres WebView dangereux
Description
Liste de toutes les méthodes WebView utilisées dans l'application.
Recommandation
Pour atténuer l'utilisation dangereuse des API WebView :
Défense principale – Désactiver le contenu mixte :
Android natif (Java) :
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_NEVER_ALLOW);
}
Flutter (ex. flutter_inappwebview) :
InAppWebViewSettings(mixedContentMode: MixedContentMode.MIXED_CONTENT_NEVER_ALLOW)
- Empêche les pages HTTPS de charger des ressources HTTP non sécurisées
- Bloque les attaques de l'homme du milieu (man-in-the-middle) via des scripts injectés
Restreindre l'accès aux fichiers :
Android natif (Java) :
webView.getSettings().setAllowFileAccess(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
webView.getSettings().setAllowFileAccessFromFileURLs(false);
webView.getSettings().setAllowUniversalAccessFromFileURLs(false);
}
Flutter (ex. flutter_inappwebview) :
InAppWebViewSettings(
allowFileAccess: false,
allowFileAccessFromFileURLs: false,
allowUniversalAccessFromFileURLs: false,
)
- Bloque l'exploitation du schéma file://
- Empêche la fuite de fichiers locaux et de bases de données
Durcir l'interface JavaScript :
Android natif (Java) :
webView.removeJavascriptInterface("interfaceName"); // Remove if not needed
// If required, only expose minimal @JavascriptInterface methods
Flutter :
Supprimez les gestionnaires JS inutilisés. Si nécessaire, restreignez de façon sécurisée la logique au sein de addJavaScriptHandler (flutter_inappwebview) ou JavascriptChannel (webview_flutter).
- Évite l'exécution de code à distance via addJavascriptInterface()
- Utilisez WebMessagePort ou des listes d'autorisation d'origines de confiance si le pont JS est requis
Protections supplémentaires :
- Désactiver le débogage WebView en production :
Android natif :
WebView.setWebContentsDebuggingEnabled(false);
Flutter (ex. flutter_inappwebview) :
InAppWebViewSettings(isInspectable: false, debuggingEnabled: false)
- Activer la navigation sécurisée (API 26+) :
Android natif :
WebView.enableSafeBrowsing(context);
Flutter (ex. flutter_inappwebview) :
InAppWebViewSettings(safeBrowsingEnabled: true)
En désactivant le contenu mixte, en restreignant l'accès aux fichiers et en sécurisant les ponts JavaScript, vous éliminez les principaux vecteurs d'attaque associés aux API WebView dangereuses tout en gardant la fonctionnalité WebView de l'application sécurisée.
Liens
- DRD02-J. Do not allow WebView to access sensitive local resource through file scheme (CERT Secure Coding)
- DRD13. Do not provide addJavascriptInterface method access in a WebView which could contain untrusted content (CERT Secure Coding)
Normes
- OWASP_MASVS_L1:
- MSTG_PLATFORM_6
- MSTG_PLATFORM_5
- OWASP_MASVS_L2:
- MSTG_PLATFORM_6
- MSTG_PLATFORM_5
- OWASP_MASVS_v2_1:
- MASVS_PLATFORM_2
- MASVS_PLATFORM_3
- OWASP_MOBILE_TOP_10:
- M8_2024