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