Translated ['src/mobile-pentesting/ios-pentesting/ios-universal-links.md

This commit is contained in:
Translator 2025-07-17 14:10:19 +00:00
parent fefc07fbe4
commit f9f12fbbc0

View File

@ -4,13 +4,13 @@
## Wprowadzenie
Universal links oferują **bezproblemowe przekierowanie** użytkowników, otwierając bezpośrednio treści w aplikacji, omijając potrzebę przekierowania do Safari. Te linki są **unikalne** i bezpieczne, ponieważ nie mogą być przejęte przez inne aplikacje. Zapewnia to umieszczenie pliku `apple-app-site-association` w głównym katalogu witryny, co ustanawia weryfikowalny link między witryną a aplikacją. W przypadkach, gdy aplikacja nie jest zainstalowana, Safari przejmuje kontrolę i kieruje użytkownika na stronę internetową, utrzymując obecność aplikacji.
Universal links oferują **bezproblemowe przekierowanie** użytkowników, otwierając treści bezpośrednio w aplikacji, omijając potrzebę przekierowania do Safari. Te linki są **unikalne** i bezpieczne, ponieważ nie mogą być przejmowane przez inne aplikacje. Zapewnia to umieszczenie pliku `apple-app-site-association` w głównym katalogu witryny, co ustanawia weryfikowalny link między witryną a aplikacją. W przypadkach, gdy aplikacja nie jest zainstalowana, Safari przejmuje kontrolę i kieruje użytkownika na stronę internetową, utrzymując obecność aplikacji.
Dla testerów penetracyjnych plik `apple-app-site-association` jest szczególnie interesujący, ponieważ może ujawniać **wrażliwe ścieżki**, potencjalnie w tym te związane z niewydanymi funkcjami.
### **Analiza uprawnienia Associated Domains**
Programiści włączają Universal Links, konfigurując **Associated Domains** w zakładce Capabilities w Xcode lub przeglądając plik `.entitlements`. Każda domena jest poprzedzona `applinks:`. Na przykład, konfiguracja Telegrama może wyglądać następująco:
Programiści włączają Universal Links, konfigurując **Associated Domains** w zakładce Capabilities w Xcode lub sprawdzając plik `.entitlements`. Każda domena jest poprzedzona `applinks:`. Na przykład, konfiguracja Telegrama może wyglądać następująco:
```xml
<key>com.apple.developer.associated-domains</key>
<array>
@ -24,15 +24,27 @@ Jeśli pracujesz z skompilowaną aplikacją, uprawnienia można wyodrębnić zgo
### **Pobieranie pliku Apple App Site Association**
Plik `apple-app-site-association` powinien być pobrany z serwera przy użyciu domen określonych w uprawnieniach. Upewnij się, że plik jest dostępny przez HTTPS bezpośrednio pod adresem `https://<domain>/apple-app-site-association`. Narzędzia takie jak [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/) mogą pomóc w tym procesie.
Plik `apple-app-site-association` powinien być pobrany z serwera przy użyciu domen określonych w uprawnieniach. Upewnij się, że plik jest dostępny przez HTTPS bezpośrednio pod adresem `https://<domain>/apple-app-site-association` (lub `/.well-known/apple-app-site-association`). Narzędzia takie jak [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/) mogą pomóc w tym procesie.
> **Szybka enumeracja z powłoki macOS/Linux**
>
> ```bash
> # zakładając, że wyodrębniłeś uprawnienia do ent.xml
> doms=$(plutil -extract com.apple.developer.associated-domains xml1 -o - ent.xml | \
> grep -oE 'applinks:[^<]+' | cut -d':' -f2)
> for d in $doms; do
> echo "[+] Pobieranie AASA dla $d";
> curl -sk "https://$d/.well-known/apple-app-site-association" | jq '.'
> done
> ```
### **Obsługa linków uniwersalnych w aplikacji**
Aplikacja musi zaimplementować konkretne metody, aby poprawnie obsługiwać linki uniwersalne. Główną metodą, na którą należy zwrócić uwagę, jest [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). Ważne jest, aby schemat obsługiwanych adresów URL był HTTP lub HTTPS, ponieważ inne nie będą wspierane.
Aplikacja musi zaimplementować określone metody, aby poprawnie obsługiwać linki uniwersalne. Główną metodą, na którą należy zwrócić uwagę, jest [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). Ważne jest, aby schemat obsługiwanych adresów URL był HTTP lub HTTPS, ponieważ inne nie będą wspierane.
#### **Walidacja metody obsługi danych**
Gdy link uniwersalny otwiera aplikację, obiekt `NSUserActivity` jest przekazywany do aplikacji z adresem URL. Przed przetworzeniem tego adresu URL ważne jest, aby go zwalidować i oczyścić, aby zapobiec zagrożeniom bezpieczeństwa. Oto przykład w Swift, który ilustruje ten proces:
Gdy link uniwersalny otwiera aplikację, obiekt `NSUserActivity` jest przekazywany do aplikacji z adresem URL. Przed przetworzeniem tego adresu URL ważne jest, aby go zwalidować i oczyścić, aby zapobiec ryzyku bezpieczeństwa. Oto przykład w Swift, który ilustruje ten proces:
```swift
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
@ -44,7 +56,7 @@ application.open(url, options: [:], completionHandler: nil)
return true
}
```
URL-e powinny być starannie analizowane i walidowane, szczególnie jeśli zawierają parametry, aby chronić przed potencjalnym podszywaniem się lub źle sformatowanymi danymi. API `NSURLComponents` jest przydatne w tym celu, jak pokazano poniżej:
URL-e powinny być starannie analizowane i walidowane, szczególnie jeśli zawierają parametry, aby chronić przed potencjalnym fałszowaniem lub źle sformatowanymi danymi. API `NSURLComponents` jest przydatne w tym celu, jak pokazano poniżej:
```swift
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
@ -70,15 +82,36 @@ return false
}
}
```
Dzięki **starannemu konfigurowaniu i walidacji** deweloperzy mogą zapewnić, że uniwersalne linki poprawiają doświadczenia użytkowników, jednocześnie utrzymując standardy bezpieczeństwa i prywatności.
Poprzez **staranną konfigurację i walidację**, deweloperzy mogą zapewnić, że uniwersalne linki poprawiają doświadczenia użytkowników, jednocześnie utrzymując standardy bezpieczeństwa i prywatności.
## Powszechne podatności i kontrole pentestingowe
| # | Słabość | Jak testować | Wykorzystanie / Wpływ |
|---|----------|------------|-----------------------|
| 1 | **Zbyt szerokie `paths` / `components`** w pliku AASA (np. `"/": "*"` lub znaki wieloznaczne takie jak `"/a/*"`). | • Sprawdź pobrany plik AASA i poszukaj `*`, końcowych ukośników lub reguł `{"?": …}`.<br>• Spróbuj zażądać nieznanych zasobów, które nadal pasują do reguły (`https://domain.com/a/evil?_p_dp=1`). | Przechwytywanie uniwersalnych linków: złośliwa aplikacja iOS, która rejestruje tę samą domenę, może przejąć wszystkie te linki i przedstawić interfejs phishingowy. Przykładem z życia jest raport o bug-bounty z maja 2025 roku dotyczący Temu.com, gdzie atakujący mógł przekierować dowolną ścieżkę `/a/*` do swojej aplikacji. |
| 2 | **Brak walidacji po stronie serwera** ścieżek deep-link. | Po zidentyfikowaniu dozwolonych ścieżek, wydaj żądania `curl`/Burp do nieistniejących zasobów i obserwuj kody statusu HTTP. Wszystko inne niż `404` (np. 200/302) jest podejrzane. | Atakujący może hostować dowolne treści za dozwoloną ścieżką i serwować je przez legalną domenę, zwiększając wskaźnik sukcesu phishingu lub kradzieży tokenów sesji. |
| 3 | **Obsługa URL po stronie aplikacji bez białej listy schematów/gospodarzy** (CVE-2024-10474 Mozilla Focus < 132). | Szukaj bezpośrednich wywołań `openURL:`/`open(_:options:)` lub mostków JavaScript, które przekazują dowolne URL. | Strony wewnętrzne mogą przemycać URL `myapp://` lub `https://`, które omijają kontrole bezpieczeństwa paska adresu przeglądarki, prowadząc do oszustw lub niezamierzonych działań z uprawnieniami. |
| 4 | **Użycie subdomen z dzikimi znakami** (`*.example.com`) w uprawnieniach. | `grep` dla `*.` w uprawnieniach. | Jeśli jakakolwiek subdomena zostanie przejęta (np. przez nieużywaną wiązkę S3), atakujący automatycznie zyskuje powiązanie z Uniwersalnym Linkiem. |
### Szybka lista kontrolna
* [ ] Wyodrębnij uprawnienia i wymień każdy wpis `applinks:`.
* [ ] Pobierz AASA dla każdego wpisu i sprawdź pod kątem znaków wieloznacznych.
* [ ] Zweryfikuj, że serwer internetowy zwraca **404** dla nieokreślonych ścieżek.
* [ ] W binarnym potwierdź, że **tylko** zaufane hosty/schematy są obsługiwane.
* [ ] Jeśli aplikacja używa nowszej składni `components` (iOS 11+), przetestuj reguły parametrów zapytania (`{"?":{…}}`).
## Narzędzia
- [GetUniversal.link](https://getuniversal.link/): Pomaga uprościć testowanie i zarządzanie uniwersalnymi linkami oraz plikiem AASA Twojej aplikacji. Wystarczy wpisać swoją domenę, aby zweryfikować integralność pliku AASA lub skorzystać z niestandardowego pulpitu nawigacyjnego, aby łatwo przetestować zachowanie linków. To narzędzie pomaga również określić, kiedy Apple ponownie zindeksuje Twój plik AASA.
- [GetUniversal.link](https://getuniversal.link/): Pomaga uprościć testowanie i zarządzanie uniwersalnymi linkami aplikacji oraz plikiem AASA. Wystarczy wpisać swoją domenę, aby zweryfikować integralność pliku AASA lub skorzystać z niestandardowego pulpitu nawigacyjnego, aby łatwo testować zachowanie linków. To narzędzie pomaga również określić, kiedy Apple ponownie zindeksuje twój plik AASA.
- [Knil](https://github.com/ethanhuang13/knil): Narzędzie iOS typu open-source, które pobiera, analizuje i pozwala na **testowanie dotykowe** każdego uniwersalnego linku zadeklarowanego przez domenę bezpośrednio na urządzeniu.
- [universal-link-validator](https://github.com/urbangems/universal-link-validator): Walidator CLI / webowy, który przeprowadza ścisłe kontrole zgodności AASA i podkreśla niebezpieczne znaki wieloznaczne.
## Odniesienia
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis)
- [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8)
- [https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e](https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e)
- [https://nvd.nist.gov/vuln/detail/CVE-2024-10474](https://nvd.nist.gov/vuln/detail/CVE-2024-10474)
{{#include ../../banners/hacktricks-training.md}}