Saltar a contenido

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

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