7.6 KiB
iOS Universal Links
Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF Controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri La Famiglia PEASS, 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 repos di github.
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 redirezionamento tramite Safari. Questi collegamenti sono unici e sicuri, poiché 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 tester di penetrazione, 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'Abilitazione 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, fare riferimento alla 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 dell'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:
. È cruciale che lo schema degli URL gestiti sia HTTP o HTTPS, poiché altri non saranno supportati.
Convalida del metodo del gestore dei dati
Quando un collegamento 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 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 dovrebbero essere attentamente analizzati e convalidati, specialmente se includono parametri, per proteggersi da possibili tentativi di 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.
Strumenti
- GetUniversal.link: Aiuta a semplificare il testing e la gestione dei collegamenti universali e del file AASA dell'app. Basta inserire il proprio dominio per verificare l'integrità del file AASA o utilizzare il pannello personalizzato per testare facilmente il comportamento del collegamento. Questo strumento aiuta anche a determinare quando Apple indicizzerà il prossimo 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
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se desideri vedere la tua azienda pubblicizzata in HackTricks o scaricare HackTricks in PDF Controlla i PIANI 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.