hacktricks/mobile-pentesting/ios-pentesting/ios-universal-links.md

110 lines
7.6 KiB
Markdown
Raw Normal View History

2024-02-08 03:08:28 +00:00
# iOS Universal Links
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:03:23 +00:00
Altri modi per supportare HackTricks:
2022-04-28 16:01:33 +00:00
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
2024-02-10 13:03:23 +00:00
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
2024-02-10 13:03:23 +00:00
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 13:03:23 +00:00
## Introduzione
2021-05-21 16:38:18 +00:00
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.
2021-05-21 16:38:18 +00:00
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.
2021-05-21 16:38:18 +00:00
### **Analisi dell'Abilitazione dei Domini Associati**
2021-05-21 16:38:18 +00:00
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:
2024-02-08 03:08:28 +00:00
```xml
2024-02-10 13:03:23 +00:00
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
2021-05-21 16:38:18 +00:00
```
Per approfondimenti più completi, fare riferimento alla [Documentazione degli sviluppatori Apple archiviata](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).
2021-05-21 16:38:18 +00:00
2024-02-10 13:03:23 +00:00
Se si lavora con un'applicazione compilata, i diritti possono essere estratti come descritto in [questa guida](extracting-entitlements-from-compiled-application.md).
2021-05-21 16:38:18 +00:00
2024-02-10 13:03:23 +00:00
### **Recupero del file Apple App Site Association**
2021-05-21 16:38:18 +00:00
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)](https://branch.io/resources/aasa-validator/) possono aiutare in questo processo.
2021-05-21 16:38:18 +00:00
2024-02-10 13:03:23 +00:00
### **Gestione dei collegamenti universali nell'app**
2021-05-21 16:38:18 +00:00
L'app deve implementare metodi specifici per gestire correttamente i collegamenti universali. Il metodo principale da cercare è [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). È cruciale che lo schema degli URL gestiti sia HTTP o HTTPS, poiché altri non saranno supportati.
2021-05-21 16:38:18 +00:00
#### **Convalida del metodo del gestore dei dati**
2021-05-21 16:38:18 +00:00
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:
2021-05-21 16:38:18 +00:00
```swift
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
2024-02-10 13:03:23 +00:00
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)
}
2021-05-21 16:38:18 +00:00
2024-02-10 13:03:23 +00:00
return true
2021-05-21 16:38:18 +00:00
}
```
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:
2021-05-21 16:38:18 +00:00
```swift
func application(_ application: UIApplication,
2024-02-10 13:03:23 +00:00
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
2021-05-21 16:38:18 +00:00
}
2024-02-10 13:03:23 +00:00
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
2024-02-08 03:08:28 +00:00
2024-02-10 13:03:23 +00:00
return true
2024-02-08 03:08:28 +00:00
2024-02-10 13:03:23 +00:00
} else {
// Handle invalid or missing parameters
2024-02-08 03:08:28 +00:00
2024-02-10 13:03:23 +00:00
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](https://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.
2021-05-21 16:38:18 +00:00
2024-02-10 13:03:23 +00:00
## Riferimenti
2024-02-08 03:08:28 +00:00
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis](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](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8)
2021-05-21 16:38:18 +00:00
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:03:23 +00:00
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:03:23 +00:00
Altri modi per supportare HackTricks:
2022-04-28 16:01:33 +00:00
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
2024-02-10 13:03:23 +00:00
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>