Secuencia de comandos entre apps

Categoría de OWASP: MASVS-CODE: Calidad de código

Descripción general

Un WebView es un componente de navegador incorporado en aplicaciones para Android que facilita la visualización de contenido web dentro de una app. Renderiza HTML, CSS y JavaScript en la interfaz de usuario de la app.

La escritura de secuencias de comandos entre apps se asocia ampliamente con la ejecución de código malicioso en el contexto de una aplicación víctima. A los efectos de esta documentación, el tema se limitará específicamente a la inserción de código JavaScript malicioso en un WebView vulnerable.

Cuando una app acepta JavaScript malicioso en un WebView sin validación ni limpieza suficientes, la aplicación es vulnerable a la ejecución de secuencias de comandos entre apps.

Impacto

Las vulnerabilidades de secuencias de comandos entre apps pueden aprovecharse cuando las acciones de control El contenido de JavaScript se pasa al WebView de la app vulnerable sin ser si se validan o limpian. Como resultado, el código JavaScript que proporciona el atacante se ejecuta en el contexto del WebView de la aplicación víctima. El código JavaScript malicioso puede usar los mismos permisos que la app víctima lo que podría provocar el robo de datos sensibles de los usuarios y la usurpación de cuentas.

Mitigaciones

Inhabilitar JavaScript

Si tu aplicación no requiere JavaScript, inhabilitarlo garantizará que no se convierte en una amenaza:

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 tu aplicación requiere JavaScript, asegúrate de que el código JavaScript que se pasa a WebView sea de tu propiedad o esté bajo tu control. Evita permitir que WebView ejecute comandos JavaScript, consulta la guía en la siguiente sección.

Asegúrate de que solo se cargue el contenido esperado en WebView

Cuando uses métodos como shouldOverrideUrlLoading(), loadUrl() o evaluateJavascript(), asegúrate de que todas las URLs que se les pasen marcado. Como se indicó anteriormente, cualquier código JavaScript que se pase a WebView solo debe provenir de dominios esperados, por lo que es importante verificar lo que se está cargando.

Consulta la documentación de validación de entradas de OWASP y esta lista de tareas de seguridad de Android para WebViews para obtener buenos consejos y ejemplos.

Configura la configuración de acceso a archivos seguro para WebView

Asegurarse de que no se pueda acceder a los archivos puede evitar que se ejecute JavaScript arbitrario en WebViews. Se debe tener en cuenta el siguiente WebSettings cuando se protege el acceso a los archivos:

  • Inhabilita el acceso a los archivos. De forma predeterminada, setAllowFileAccess se establece en True en el nivel de API 29 y versiones anteriores, lo que permitirá el acceso a archivos locales. En el nivel de API 30 y versiones posteriores, el valor predeterminado es False. Para garantizar que no se permita el acceso a los archivos, configura explícitamente setAllowFileAccess como False
  • Inhabilitar el acceso al contenido La configuración predeterminada de setAllowContentAccess es True El acceso a la URL del contenido permite que WebView cargue contenido de un proveedor de contenido instalado en el sistema. Si tu app no requiere acceso al contenido, establece setAllowContentAccess en False para evitar un posible uso inadecuado en caso de una ataque de secuencia de comandos entre apps.

  • 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);

Habilitar la Navegación segura

Habilita la Navegación segura en AndroidManifest.xml para analizar las URLs que se pasaron a WebView para dominios maliciosos o de phishing:

<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
   android:value="true" />

Recursos