iOS Universal Links
Reading time: 5 minutes
tip
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.
Introduzione
I link universali offrono un esperienza di reindirizzamento senza soluzione di continuità agli utenti aprendo direttamente il contenuto nell'app, evitando la necessità di un reindirizzamento su Safari. Questi link sono unici e sicuri, poiché non possono essere rivendicati da altre app. Questo è garantito ospitando un file JSON apple-app-site-association
nella directory radice del sito web, stabilendo un link verificabile tra il sito web e l'app. Nei casi in cui l'app non sia installata, Safari prenderà il controllo e dirigerà l'utente alla pagina web, mantenendo la presenza dell'app.
Per i tester di penetrazione, il file apple-app-site-association
è di particolare interesse poiché potrebbe rivelare percorsi sensibili, potenzialmente inclusi quelli relativi a funzionalità non rilasciate.
Analisi del diritto ai domini associati
Gli sviluppatori abilitano i link universali configurando i Domini Associati nella scheda Capacità di Xcode o ispezionando il file .entitlements
. Ogni dominio è preceduto da applinks:
. Ad esempio, la configurazione di Telegram potrebbe apparire come segue:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
Per ulteriori informazioni dettagliate, fare riferimento alla documentazione Apple Developer archiviata.
Se si lavora con un'applicazione compilata, le autorizzazioni possono essere estratte come descritto in questa guida.
Recupero del file Apple App Site Association
Il file apple-app-site-association
deve essere recuperato dal server utilizzando i domini specificati nelle autorizzazioni. Assicurati che il file sia accessibile tramite HTTPS direttamente a https://<domain>/apple-app-site-association
. Strumenti come il validatore Apple App Site Association (AASA) possono aiutare in questo processo.
Gestione dei link universali nell'app
L'app deve implementare metodi specifici per gestire correttamente i link universali. Il metodo principale da cercare è application:continueUserActivity:restorationHandler:
. È fondamentale che lo schema degli URL gestiti sia HTTP o HTTPS, poiché altri non saranno supportati.
Validazione del metodo del gestore dei dati
Quando un link universale apre un'app, un oggetto NSUserActivity
viene passato all'app con l'URL. Prima di elaborare questo URL, è essenziale convalidarlo e sanificarlo per prevenire rischi per la sicurezza. Ecco un esempio in Swift che dimostra il processo:
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
}
Gli URL devono essere analizzati e convalidati con attenzione, specialmente se includono parametri, per proteggere contro potenziali spoofing o dati malformati. L'API NSURLComponents
è utile a questo scopo, come dimostrato di seguito:
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
}
}
Attraverso una configurazione e una validazione diligenti, gli sviluppatori possono garantire che i link universali migliorino l'esperienza dell'utente mantenendo standard di sicurezza e privacy.
Strumenti
- GetUniversal.link: Aiuta a semplificare il testing e la gestione dei link universali della tua app e del file AASA. Basta inserire il tuo dominio per verificare l'integrità del file AASA o utilizzare il dashboard personalizzato per testare facilmente il comportamento dei link. Questo strumento ti aiuta anche a determinare quando Apple indicizzerà nuovamente il tuo file AASA.
Riferimenti
- 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
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.