# 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
Niestandardowe schematy URL umo偶liwiaj膮 aplikacjom komunikacj臋 za pomoc膮 niestandardowego protoko艂u, jak szczeg贸艂owo opisano w [dokumentacji dewelopera Apple](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple\_ref/doc/uid/TP40007072-CH6-SW1). Te schematy musz膮 by膰 zadeklarowane przez aplikacj臋, kt贸ra nast臋pnie obs艂uguje przychodz膮ce adresy URL zgodnie z tymi schematami. Kluczowe jest **walidowanie wszystkich parametr贸w URL** oraz **odrzucanie wszelkich 藕le sformu艂owanych adres贸w URL**, aby zapobiec atakom przez ten wektor.
Podano przyk艂ad, w kt贸rym URI `myapp://hostname?data=123876123` wywo艂uje okre艣lon膮 akcj臋 aplikacji. Zauwa偶ona podatno艣膰 wyst臋powa艂a w aplikacji Skype Mobile, kt贸ra pozwala艂a na nieautoryzowane akcje po艂膮cze艅 za pomoc膮 protoko艂u `skype://`. Zarejestrowane schematy mo偶na znale藕膰 w `Info.plist` aplikacji w sekcji `CFBundleURLTypes`. Z艂o艣liwe aplikacje mog膮 to wykorzysta膰, ponownie rejestruj膮c URI, aby przechwytywa膰 wra偶liwe informacje.
### Application Query Schemes Registration
Od iOS 9.0, aby sprawdzi膰, czy aplikacja jest dost臋pna, `canOpenURL:` wymaga zadeklarowania schemat贸w URL w `Info.plist` w sekcji `LSApplicationQueriesSchemes`. Ogranicza to schematy, kt贸re aplikacja mo偶e zapyta膰 do 50, zwi臋kszaj膮c prywatno艣膰 poprzez zapobieganie enumeracji aplikacji.
```xml
LSApplicationQueriesSchemes
url_scheme1
url_scheme2
```
### Testing URL Handling and Validation
Programi艣ci powinni zbada膰 konkretne metody w kodzie 藕r贸d艂owym, aby zrozumie膰 konstrukcj臋 i walidacj臋 艣cie偶ek URL, takie jak `application:didFinishLaunchingWithOptions:` i `application:openURL:options:`. Na przyk艂ad, Telegram wykorzystuje r贸偶ne metody do otwierania URL-i:
```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
}
```
### Testowanie 偶膮da艅 URL do innych aplikacji
Metody takie jak `openURL:options:completionHandler:` s膮 kluczowe do otwierania URL-i w celu interakcji z innymi aplikacjami. Identyfikacja u偶ycia takich metod w kodzie 藕r贸d艂owym aplikacji jest kluczowa dla zrozumienia komunikacji zewn臋trznej.
### Testowanie przestarza艂ych metod
Przestarza艂e metody obs艂uguj膮ce otwieranie URL-i, takie jak `application:handleOpenURL:` i `openURL:`, powinny by膰 zidentyfikowane i przeanalizowane pod k膮tem implikacji bezpiecze艅stwa.
### Fuzzing schemat贸w URL
Fuzzing schemat贸w URL mo偶e zidentyfikowa膰 b艂臋dy zwi膮zane z uszkodzeniem pami臋ci. Narz臋dzia takie jak [Frida](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/) mog膮 zautomatyzowa膰 ten proces, otwieraj膮c URL-e z r贸偶nymi 艂adunkami w celu monitorowania awarii, co ilustruje manipulacja URL-ami w aplikacji 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
```
## Przechwytywanie niestandardowych schemat贸w URL
Zgodnie z [**tym postem**](https://evanconnelly.github.io/post/ios-oauth/), z艂o艣liwe aplikacje mog膮 **rejestrowa膰 niestandardowe schematy innych aplikacji,** a nast臋pnie z艂o艣liwa aplikacja mo偶e otworzy膰 przegl膮dark臋, kt贸ra ma wszystkie ciasteczka aplikacji Safari za pomoc膮 [ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession/2990952-init#parameters).
Za pomoc膮 przegl膮darki z艂o艣liwa aplikacja mo偶e za艂adowa膰 stron臋 internetow膮 kontrolowan膮 przez atakuj膮cego, a TCC poprosi u偶ytkownika mobilnego o pozwolenie na otwarcie tej aplikacji. Nast臋pnie z艂o艣liwa strona internetowa mo偶e przekierowa膰 na stron臋 ofiary, na przyk艂ad na przep艂yw OAuth z parametrem `prompt=none`. Je艣li u偶ytkownik by艂 ju偶 zalogowany w przep艂ywie OAuth, przep艂yw OAuth wy艣le sekret z powrotem do aplikacji ofiary, u偶ywaj膮c niestandardowego schematu aplikacji ofiary.\
Jednak偶e, poniewa偶 z艂o艣liwa aplikacja r贸wnie偶 go zarejestrowa艂a i poniewa偶 u偶ywana przegl膮darka znajduje si臋 wewn膮trz z艂o艣liwej aplikacji, niestandardowy schemat b臋dzie w tym przypadku obs艂ugiwany przez z艂o艣liw膮 aplikacj臋, kt贸ra b臋dzie mog艂a ukra艣膰 token OAuth.
## Referencje
* [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 %}