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 enTrue
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 esFalse
. Para garantizar que no se permita el acceso a los archivos, configura explícitamentesetAllowFileAccess
comoFalse
Inhabilitar el acceso al contenido La configuración predeterminada de
setAllowContentAccess
esTrue
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, establecesetAllowContentAccess
enFalse
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
- Documentación de la Navegación segura
- Referencia para desarrolladores de WebView
- Referencia para desarrolladores de WebSettings para WebView
- Documentación para desarrolladores de setAllowFileAccess
- Referencia para desarrolladores de setAllowContentAccess