# iOS Custom URI Handlers / Deeplinks / Custom Schemes {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 馃挰 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} ## Basic Information Los esquemas de URL personalizados permiten que las aplicaciones se comuniquen utilizando un protocolo personalizado, como se detalla en la [Documentaci贸n para Desarrolladores de Apple](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple\_ref/doc/uid/TP40007072-CH6-SW1). Estos esquemas deben ser declarados por la aplicaci贸n, que luego maneja las URL entrantes siguiendo esos esquemas. Es crucial **validar todos los par谩metros de la URL** y **descartar cualquier URL malformada** para prevenir ataques a trav茅s de este vector. Se da un ejemplo donde la URI `myapp://hostname?data=123876123` invoca una acci贸n espec铆fica de la aplicaci贸n. Una vulnerabilidad se帽alada estaba en la aplicaci贸n Skype Mobile, que permit铆a acciones de llamada no permitidas a trav茅s del protocolo `skype://`. Los esquemas registrados se pueden encontrar en el `Info.plist` de la aplicaci贸n bajo `CFBundleURLTypes`. Las aplicaciones maliciosas pueden explotar esto volviendo a registrar URIs para interceptar informaci贸n sensible. ### Application Query Schemes Registration Desde iOS 9.0, para verificar si una aplicaci贸n est谩 disponible, `canOpenURL:` requiere declarar esquemas de URL en el `Info.plist` bajo `LSApplicationQueriesSchemes`. Esto limita los esquemas que una aplicaci贸n puede consultar a 50, mejorando la privacidad al prevenir la enumeraci贸n de aplicaciones. ```xml LSApplicationQueriesSchemes url_scheme1 url_scheme2 ``` ### Testing URL Handling and Validation Los desarrolladores deben inspeccionar m茅todos espec铆ficos en el c贸digo fuente para entender la construcci贸n y validaci贸n de rutas URL, como `application:didFinishLaunchingWithOptions:` y `application:openURL:options:`. Por ejemplo, Telegram emplea varios m茅todos para abrir URLs: ```swift func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool { self.openUrl(url: url) return true } func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { self.openUrl(url: url) return true } func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { self.openUrl(url: url) return true } func application(_ application: UIApplication, handleOpen url: URL) -> Bool { self.openUrl(url: url) return true } ``` ### Testing URL Requests to Other Apps M茅todos como `openURL:options:completionHandler:` son cruciales para abrir URLs e interactuar con otras aplicaciones. Identificar el uso de tales m茅todos en el c贸digo fuente de la aplicaci贸n es clave para entender las comunicaciones externas. ### Testing for Deprecated Methods Los m茅todos obsoletos que manejan la apertura de URLs, como `application:handleOpenURL:` y `openURL:`, deben ser identificados y revisados por sus implicaciones de seguridad. ### Fuzzing URL Schemes El fuzzing de esquemas de URL puede identificar errores de corrupci贸n de memoria. Herramientas como [Frida](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/) pueden automatizar este proceso abriendo URLs con diferentes cargas 煤tiles para monitorear fallos, ejemplificado por la manipulaci贸n de URLs en la aplicaci贸n iGoat-Swift: ```bash $ frida -U SpringBoard -l ios-url-scheme-fuzzing.js [iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}") Watching for crashes from iGoat... No logs were moved. Opened URL: iGoat://?contactNumber=0&message=0 ``` ## Secuestro de esquemas de URL personalizados Seg煤n [**esta publicaci贸n**](https://evanconnelly.github.io/post/ios-oauth/), las aplicaciones maliciosas podr铆an **registrar los esquemas personalizados de otras aplicaciones,** luego la aplicaci贸n maliciosa puede abrir un navegador que tiene todas las cookies de la aplicaci贸n Safari con [ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession/2990952-init#parameters). Con el navegador, la aplicaci贸n maliciosa puede cargar una p谩gina web controlada por el atacante y TCC pedir谩 al usuario m贸vil permisos para abrir esa aplicaci贸n. Luego, la p谩gina web maliciosa podr铆a redirigir a una p谩gina de v铆ctima, por ejemplo, un flujo de OAuth con el par谩metro `prompt=none`. Si el usuario ya hab铆a iniciado sesi贸n en el flujo de OAuth, el flujo de OAuth enviar谩 el secreto de vuelta a la aplicaci贸n v铆ctima utilizando el esquema personalizado de la aplicaci贸n v铆ctima.\ Sin embargo, debido a que la aplicaci贸n maliciosa tambi茅n lo registr贸 y porque el navegador utilizado est谩 dentro de la aplicaci贸n maliciosa, el esquema personalizado ser谩 manejado en este caso por la aplicaci贸n maliciosa, que podr谩 robar el token de OAuth. ## Referencias * [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/) * [https://evanconnelly.github.io/post/ios-oauth/](https://evanconnelly.github.io/post/ios-oauth/) {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 馃挰 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}