# 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 %}