hacktricks/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md

95 lines
6.1 KiB
Markdown
Raw Normal View History

{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* 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.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
To jest podsumowanie związanych informacji z [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/)
2021-05-21 16:38:18 +00:00
2024-02-11 01:46:25 +00:00
## Podstawowe informacje
2021-05-21 16:38:18 +00:00
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 URL-e zgodnie z tymi schematami. Kluczowe jest **walidowanie wszystkich parametrów URL** oraz **odrzucanie wszelkich źle sformułowanych URL-i**, aby zapobiec atakom przez ten wektor.
2021-05-21 16:38:18 +00:00
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 umożliwiała 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.
2021-05-21 16:38:18 +00:00
2024-02-11 01:46:25 +00:00
### Rejestracja schematów zapytań aplikacji
2021-05-21 16:38:18 +00:00
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.
2024-02-08 03:08:28 +00:00
```xml
<key>LSApplicationQueriesSchemes</key>
2021-05-21 16:38:18 +00:00
<array>
2024-02-11 01:46:25 +00:00
<string>url_scheme1</string>
<string>url_scheme2</string>
2021-05-21 16:38:18 +00:00
</array>
```
### Testing URL Handling and Validation
2021-05-21 16:38:18 +00:00
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:
2021-05-21 16:38:18 +00:00
```swift
func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool {
2024-02-11 01:46:25 +00:00
self.openUrl(url: url)
return true
2021-05-21 16:38:18 +00:00
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
annotation: Any) -> Bool {
2024-02-11 01:46:25 +00:00
self.openUrl(url: url)
return true
2021-05-21 16:38:18 +00:00
}
func application(_ app: UIApplication, open url: URL,
options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
2024-02-11 01:46:25 +00:00
self.openUrl(url: url)
return true
2021-05-21 16:38:18 +00:00
}
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
2024-02-11 01:46:25 +00:00
self.openUrl(url: url)
return true
2021-05-21 16:38:18 +00:00
}
```
2024-02-11 01:46:25 +00:00
### Testowanie żądań URL do innych aplikacji
2021-05-21 16:38:18 +00:00
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.
2021-05-21 16:38:18 +00:00
2024-02-11 01:46:25 +00:00
### Testowanie przestarzałych metod
2021-05-21 16:38:18 +00:00
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.
2021-05-21 16:38:18 +00:00
### Fuzzing schematów URL
2021-05-21 16:38:18 +00:00
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:
2021-05-21 16:38:18 +00:00
```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
```
## References
2024-02-08 03:08:28 +00:00
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/)
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Wsparcie HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}