El equipo técnico de F-Secure, consigue explotar una cadena de vulnerabilidades presente en la versión 4.5.19.13 Samsung Galaxy Store que permite a un atacante la instalación de cualquier aplicación sin consentimiento del usuario.
Durante la última edición de la Pwn2Own, el equipo técnico de F-Secure ha conseguido explotar los dispositivos Samsung S20 a través de la aplicación ‘Galaxy Store’, instalada por defecto en todos los sistemas Samsung.
La aplicación Galaxy Store (com.sec.android.app.samsungapps) que se utiliza para instalar aplicaciones desde el repositorio oficial de Samsung, adolece de un fallo que permitiría a un atacante la instalación de cualquier aplicación sin consentimiento del usuario. Pudiendo en teoría ejecutar código arbitrario en el dispositivo afectado.
El fallo se encuentra en el módulo encargado de la instalación y ejecución de aplicaciones «com.sec.android.app.samsungapps.slotpage.EditorialActivity». Esta función puede ser ejecutada de dos formas distintas:
- A través de un enlace al «intent» que contenga el payload: intent://apps.samsung.com/appquery/EditorialPage.as?url=http://img.samsungapps.com/yaypayloadyay.html#Intent;action=android.intent
.action.VIEW;scheme=http;end. Los «intents» son mecanismos en Android que permiten la ejecución de otras funciones. - A través de una etiqueta NFC que contenga el payload:
- Data MIME type: application/com.sec.android.app.samsungapps.detail
- Data URI: http://apps.samsung.com/appquery/EditorialPage.as?url=http://img.samsungapps.com/yaypayloadyay.html
La función «EditorialActivity» recibirá una URL, que considerará válida si comienza de alguna de estas dos formas:
Como podemos ver en el método que hace esta comprobación:
public boolean isValidUrl(String str) { return str.startsWith("http://img.samsungapps.com/") || str.startsWith("https://img.samsungapps.com/"); }
Si la función vista anteriormente devuelve «true», el WebView cargará la URL proporcionada por el usuario y una interfaz en JavaScript para interactuar con este WebView (EditorialScriptInterface). Esta interfaz contiene dos métodos interesantes: «downloadApp» y «openApp«.
El primero de estos métodos, como se podría adivinar, descarga la aplicación del repositorio de Samsung que coincida con el nombre de paquete proporcionado y la instalará en nuestro sistema.
@JavascriptInterface public void downloadApp(String str) { EditorialScriptInterface.this.e(str); } public void e(String str) { if (EditorialActivity.isValidUrl(WebView.getUrl() == false)) { Log.d("Editorial", "Url is not valid" + EditorialActivity.isValidUrl(WebView.getUrl()); return; } String GUID = str; if (Store.search(GUID) == true) { Store.download(GUID); } }
El segundo método, «openApp», tiene una funcionalidad similar: comprueba si la URL es válida e intentará ejecutar alguna aplicación ya instalada que coincida con el nombre de paquete proporcionado.
@JavascriptInterface public void openApp(String str) { EditorialScriptInterface.this.d(str); } public void d(String str) { if (EditorialActivity.isValidUrl(WebView.getUrl() == false)) { Log.d("Editorial", "Url is not valid" + this.c.getUrl()); return; } String GUID = str; if (Device.isInstalled(GUID) == true) { Device.openApp(GUID); } }
La cadena de ataques que el equipo de F-Secure utilizó para comprometer el dispositivo se explica a continuación:
- El dispositivo se conecta a una red WiFi controlada por el atacante.
- El teléfono escanea una etiqueta NFC especialmente manipulada y lanza la aplicación de Galaxy Store.
- Galaxy Store ejecuta la «activity» «EditorialActivity», que a su vez creará la interfaz «EditorialScriptInterface» anteriormente descrita.
- El WebView cargará la URL con el payload «http://img.samsungapps.com/yaypayloadyay.html».
- El atacante intercepta el tráfico HTTP e inyecta código JavaScript malicioso en la respuesta del servidor.
- Este código malicioso forzará al dispositivo a instalar una aplicación que el atacante haya subido utilizando la aplicación Galaxy Store (ojo, esto no quiere decir que la aplicación maliciosa se aloje en Galaxy Store).
- Forzará al dispositivo a lanzar la aplicación maliciosa anteriormente instalada.
De momento Samsung ha actualizado su la aplicación de Galaxy Store a la versión 4.5.20.7 la cual corrige el fallo en la función de validación «isValidUrl»:
public boolean isValidUrl(String str) { return str.startsWith("https://img.samsungapps.com/"); }
Como vemos, fuerza el tráfico por HTTPS, lo que dificultaría el ataque MitM necesario para realizar la inyección del código malicioso.
Es recomendable que todos los usuarios de dispositivos Samsung S20 actualicen sus dispositivos a la última versión disponible.