OASAM-DV-001: Cross Site Scripting

Descripción
Las vulnerabilidades Cross Site Scripting (XSS) son el resultado de no haber adoptado la práctica de codificar correctamente los datos recibidos de fuentes inseguras antes de utilizarlos en salidas HTML. En el caso de Android, la vulnerabilidad se deriva fundamentalmente del uso de la función “setJavaScriptEnabled()” de la clase Webview. Adicionalmente, el uso de la función “addJavascriptInterface()” de la calse Webview puede incurrir en vulnerabilidad de XSS. Esta función permite la inclusión de objetos Java al contexto JavaScript de Webview, por lo que si los datos proporcionados a la misma no están saneados podría ejecutarse código JavaScript arbitrario.


Riesgos
Las vulnerabilidades Cross-site Scripting (XSS) permiten que un atacante pueda ejecutar código script (HTML, JavaScript, VBScript) en el contexto del navegador del usuario (en el dominio de la aplicación vulnerable). Por ejemplo, un atacante podría explotar una vulnerabilidad XSS para obtener las cookies del usuario (para luego personificar a su víctima en la aplicación vulnerable) o solicitar información al usuario (por ejemplo credenciales). Esta vulnerabilidad, ocurre como resultado de utilizar información insegura en una salida HTML sin haber realizado la codificación correcta previamente.


Recomendaciones
Como regla general, no se debe confiar en información recibida por el usuario. Resulta peligroso utilizar, en la generación de páginas de respuesta, datos recibidos directamente del usuario sin realizar la codificación adecuada según el caso. Por defecto, Webview no ejecuta JavaScript por lo que debe activarse solo en caso de ser estrictamente necesario, controlando el origen de la carga dinámica de código a ejecutar. Aún así, para deshabilitar la ejecución de JavaScript explícitamente, se recomienda introducir la siguiente directiva:
webview.getSettings().setJavaScriptEnabled(false); En el caso de utilizar la función “addJavascriptInterface()”, es recomendable filtrar, a ser posible mediante listas blancas, los objetos Java proporcionados al webview.


Referencias
1. XSS de “Smartphone apps are not that smart: Insecure Development Practices by Vulnex”
2. Flaw 28 de “42+ Best parctices in secure mobile development for iOS and Android”
3. http://labs.mwrinfosecurity.com/blog/2012/04/23/adventures-with-android-webviews/
4. http://developer.android.com/reference/android/webkit/WebSettings.html#setJavaScriptEnabled(boolean)
5. http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)
6. OWASP Top Ten Mobile Risk número 4: Client Side Injection.