7.2 KiB
iOS Universal Links
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF Controlla i PACCHETTI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di NFT esclusivi
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR a HackTricks e HackTricks Cloud github repos.
Introduzione
I collegamenti universali offrono un'esperienza di redirezione senza soluzione di continuità agli utenti aprendo direttamente i contenuti nell'app, evitando la necessità di una redirezione tramite Safari. Questi collegamenti sono unici e sicuri, in quanto non possono essere rivendicati da altre app. Ciò è garantito ospitando un file JSON apple-app-site-association
nella directory radice del sito web, stabilendo un collegamento verificabile tra il sito web e l'app. Nei casi in cui l'app non sia installata, Safari prenderà il controllo e indirizzerà l'utente alla pagina web, mantenendo la presenza dell'app.
Per i penetration tester, il file apple-app-site-association
è di particolare interesse in quanto potrebbe rivelare percorsi sensibili, potenzialmente inclusi quelli relativi a funzionalità non ancora rilasciate.
Analisi dell'Entitlement dei Domini Associati
Gli sviluppatori abilitano i collegamenti 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 approfondimenti più completi, consulta la Documentazione degli sviluppatori Apple archiviata.
Se si lavora con un'applicazione compilata, i diritti possono essere estratti 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 nei diritti. Assicurarsi che il file sia accessibile tramite HTTPS direttamente su https://<dominio>/apple-app-site-association
. Strumenti come il Validatore Apple App Site Association (AASA) possono aiutare in questo processo.
Gestione dei collegamenti universali nell'app
L'app deve implementare metodi specifici per gestire correttamente i collegamenti universali. Il metodo principale da cercare è application:continueUserActivity:restorationHandler:
. È fondamentale che lo schema degli URL gestiti sia HTTP o HTTPS, poiché gli altri non saranno supportati.
Convalida del metodo di gestione dei dati
Quando un collegamento universale apre un'app, viene passato all'app un oggetto NSUserActivity
con l'URL. Prima di elaborare questo URL, è essenziale convalidarlo e sanificarlo per prevenire rischi per la sicurezza. Ecco un esempio in Swift che illustra 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 attentamente analizzati e convalidati, specialmente se includono parametri, per proteggersi da possibili 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 convalida diligenti, gli sviluppatori possono garantire che i collegamenti universali migliorino l'esperienza dell'utente mantenendo gli standard di sicurezza e privacy.
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
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF, controlla i PACCHETTI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di esclusive NFT
- Unisciti al 💬 gruppo Discord o al gruppo Telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR ai repository GitHub di HackTricks e HackTricks Cloud.