mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/ios-pentesting/ios-universal-links.md
This commit is contained in:
parent
fefc07fbe4
commit
f9f12fbbc0
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user