Call to dangerous WebView settings API
Llamada a la API de configuración WebView peligrosa
Descripción
Lista de todos los métodos WebView utilizados en la aplicación.
Recomendación
Para mitigar el uso peligroso de las API de WebView:
Defensa principal: deshabilitar el contenido mixto:
Android nativo (Java):
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_NEVER_ALLOW);
}
Flutter (p. ej., flutter_inappwebview):
InAppWebViewSettings(mixedContentMode: MixedContentMode.MIXED_CONTENT_NEVER_ALLOW)
- Impide que las páginas HTTPS carguen recursos HTTP inseguros
- Detiene los ataques de tipo man-in-the-middle mediante scripts inyectados
Restringir el acceso a archivos:
Android nativo (Java):
webView.getSettings().setAllowFileAccess(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
webView.getSettings().setAllowFileAccessFromFileURLs(false);
webView.getSettings().setAllowUniversalAccessFromFileURLs(false);
}
Flutter (p. ej., flutter_inappwebview):
InAppWebViewSettings(
allowFileAccess: false,
allowFileAccessFromFileURLs: false,
allowUniversalAccessFromFileURLs: false,
)
- Bloquea la explotación del esquema file://
- Evita la fuga de archivos locales y bases de datos
Endurecer la interfaz de JavaScript:
Android nativo (Java):
webView.removeJavascriptInterface("interfaceName"); // Remove if not needed
// If required, only expose minimal @JavascriptInterface methods
Flutter:
Elimine los controladores JS (handlers) no utilizados. Si son necesarios, restrinja de forma segura la lógica dentro de addJavaScriptHandler (flutter_inappwebview) o JavascriptChannel (webview_flutter).
- Evita la ejecución remota de código (RCE) mediante addJavascriptInterface()
- Utilice WebMessagePort o defina una lista de permitidos (allowlist) de orígenes confiables si se requiere un puente JS
Protecciones adicionales:
- Deshabilite la depuración de WebView en producción: Android nativo:
WebView.setWebContentsDebuggingEnabled(false);
Flutter (p. ej., flutter_inappwebview):
InAppWebViewSettings(isInspectable: false, debuggingEnabled: false)
- Habilite la navegación segura (Safe Browsing) (API 26+): Android nativo:
WebView.enableSafeBrowsing(context);
Flutter (p. ej., flutter_inappwebview):
InAppWebViewSettings(safeBrowsingEnabled: true)
Al deshabilitar el contenido mixto, restringir el acceso a archivos y asegurar los puentes de JavaScript, se eliminan los principales vectores de ataque asociados con las API peligrosas de WebView, manteniendo a la vez segura la funcionalidad de WebView de la aplicación.
Enlaces
- 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)
Estándares
- 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