iOS Universal Links
Reading time: 4 minutes
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
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.
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:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
Aby uzyskać bardziej szczegółowe informacje, zapoznaj się z archiwalną dokumentacją dewelopera Apple.
Jeśli pracujesz z skompilowaną aplikacją, uprawnienia można wyodrębnić zgodnie z opisem w tym przewodniku.
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 mogą pomóc w tym procesie.
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:
. 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:
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// Check for web browsing activity and valid URL
if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
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:
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL,
let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true),
let path = components.path,
let params = components.queryItems else {
return false
}
if let albumName = params.first(where: { $0.name == "albumname" })?.value,
let photoIndex = params.first(where: { $0.name == "index" })?.value {
// Process the URL with album name and photo index
return true
} else {
// Handle invalid or missing parameters
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.
Narzędzia
- 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.
Odniesienia
- 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
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.