7.3 KiB
iOS Universal Links
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź SUBSCRIPTION PLANS!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
Wprowadzenie
Uniwersalne linki oferują użytkownikom bezproblemowe przekierowanie, otwierając zawartość bezpośrednio w aplikacji, omijając konieczność przekierowania przez Safari. Te linki są unikalne i bezpieczne, ponieważ nie mogą być używane przez inne aplikacje. Zapewnione jest to poprzez umieszczenie pliku JSON apple-app-site-association
w katalogu głównym witryny, co tworzy sprawdzalny link między witryną a aplikacją. W przypadku, gdy aplikacja nie jest zainstalowana, Safari przejmie kontrolę i przekieruje użytkownika na stronę internetową, zachowując obecność aplikacji.
Dla testerów penetracyjnych plik apple-app-site-association
jest szczególnie interesujący, ponieważ może ujawnić wrażliwe ścieżki, potencjalnie obejmujące te związane z niepublikowanymi funkcjami.
Analiza uprawnień powiązanych domen
Deweloperzy włączają Uniwersalne Linki, konfigurując Powiązane Domeny w zakładce Zdolności Xcode lub poprzez sprawdzenie pliku .entitlements
. Każda domena jest poprzedzona prefiksem applinks:
. Na przykład, konfiguracja Telegramu 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, odwołaj się do archiwalnej dokumentacji Apple Developer.
Jeśli pracujesz z skompilowaną aplikacją, uprawnienia można wyodrębnić zgodnie z tym przewodnikiem.
Pobieranie pliku Apple App Site Association
Plik apple-app-site-association
powinien zostać pobrany z serwera przy użyciu domen określonych w uprawnieniach. Upewnij się, że plik jest dostępny za pośrednictwem protokołu HTTPS bezpośrednio pod adresem https://<domena>/apple-app-site-association
. Narzędzia takie jak Apple App Site Association (AASA) Validator mogą pomóc w tym procesie.
Obsługa uniwersalnych linków w aplikacji
Aplikacja musi zaimplementować konkretne metody, aby poprawnie obsługiwać uniwersalne linki. 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ą obsługiwane.
Weryfikacja metody obsługi danych
Gdy uniwersalny link otwiera aplikację, do aplikacji przekazywany jest obiekt NSUserActivity
z adresem URL. Przed przetworzeniem tego adresu URL ważne jest jego sprawdzenie i oczyszczenie w celu zapobieżenia ryzyku bezpieczeństwa. Oto przykład w języku 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
}
Adresy URL powinny być starannie analizowane i sprawdzane, zwłaszcza jeśli zawierają parametry, aby zapobiec potencjalnemu podszywaniu się lub nieprawidłowym danym. Interfejs API NSURLComponents
jest przydatny 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
}
}
Poprzez staranne konfigurowanie i weryfikowanie, programiści mogą zapewnić, że uniwersalne linki poprawią doświadczenie użytkownika, jednocześnie zachowując standardy bezpieczeństwa i prywatności.
Odwołania
- 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
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.