mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/ios-pentesting/ios-universal-links.md
This commit is contained in:
parent
6c64845e95
commit
3ba3ea7c4e
@ -4,7 +4,7 @@
|
||||
|
||||
## 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.
|
||||
I link universali offrono un **esperienza di reindirizzamento** senza soluzione di continuità per gli utenti aprendo direttamente il contenuto nell'app, bypassando la necessità di reindirizzamento a 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 collegamento 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.
|
||||
|
||||
@ -18,19 +18,31 @@ Gli sviluppatori abilitano i link universali configurando i **Domini Associati**
|
||||
<string>applinks:t.me</string>
|
||||
</array>
|
||||
```
|
||||
Per ulteriori informazioni dettagliate, fare riferimento alla [documentazione Apple Developer archiviata](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).
|
||||
Per ulteriori approfondimenti, fare riferimento alla [documentazione Apple Developer archiviata](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).
|
||||
|
||||
Se si lavora con un'applicazione compilata, le autorizzazioni possono essere estratte come descritto in [questa guida](extracting-entitlements-from-compiled-application.md).
|
||||
|
||||
### **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)](https://branch.io/resources/aasa-validator/) possono aiutare in questo processo.
|
||||
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` (o `/.well-known/apple-app-site-association`). Strumenti come il [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/) possono aiutare in questo processo.
|
||||
|
||||
> **Enumerazione rapida da una shell macOS/Linux**
|
||||
>
|
||||
> ```bash
|
||||
> # assumendo di aver estratto le autorizzazioni in ent.xml
|
||||
> doms=$(plutil -extract com.apple.developer.associated-domains xml1 -o - ent.xml | \
|
||||
> grep -oE 'applinks:[^<]+' | cut -d':' -f2)
|
||||
> for d in $doms; do
|
||||
> echo "[+] Recupero AASA per $d";
|
||||
> curl -sk "https://$d/.well-known/apple-app-site-association" | jq '.'
|
||||
> done
|
||||
> ```
|
||||
|
||||
### **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:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). È fondamentale che lo schema degli URL gestiti sia HTTP o HTTPS, poiché altri non saranno supportati.
|
||||
|
||||
#### **Validazione del metodo del gestore dei dati**
|
||||
#### **Validazione del metodo di gestione 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:
|
||||
```swift
|
||||
@ -70,15 +82,36 @@ 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.
|
||||
Attraverso **una configurazione e validazione diligente**, gli sviluppatori possono garantire che i link universali migliorino l'esperienza dell'utente mantenendo standard di sicurezza e privacy.
|
||||
|
||||
## Vulnerabilità comuni e controlli di pentesting
|
||||
|
||||
| # | Vulnerabilità | Come testare | Sfruttamento / Impatto |
|
||||
|---|---------------|--------------|-------------------------|
|
||||
| 1 | **`paths` / `components` troppo ampi** nel file AASA (ad es. `"/": "*"` o caratteri jolly come `"/a/*"`). | • Ispezionare l'AASA scaricato e cercare `*`, barre finali o regole `{"?": …}`.<br>• Provare a richiedere risorse sconosciute che corrispondono ancora alla regola (`https://domain.com/a/evil?_p_dp=1`). | Hijacking del link universale: un'app iOS malevola che registra lo stesso dominio potrebbe rivendicare tutti quei link e presentare un'interfaccia di phishing. Un esempio reale è il rapporto di bug bounty di Temu.com di maggio 2025, dove un attaccante poteva reindirizzare qualsiasi percorso `/a/*` alla propria app. |
|
||||
| 2 | **Mancanza di validazione lato server** dei percorsi deep-link. | Dopo aver identificato i percorsi consentiti, emettere richieste `curl`/Burp a risorse non esistenti e osservare i codici di stato HTTP. Qualsiasi cosa diversa da `404` (ad es. 200/302) è sospetta. | Un attaccante può ospitare contenuti arbitrari dietro un percorso consentito e servirli tramite il dominio legittimo, aumentando il tasso di successo di phishing o furto di token di sessione. |
|
||||
| 3 | **Gestione degli URL lato app senza whitelist di schema/host** (CVE-2024-10474 – Mozilla Focus < 132). | Cercare chiamate dirette `openURL:`/`open(_:options:)` o ponti JavaScript che inoltrano URL arbitrari. | Le pagine interne possono contrabbandare URL `myapp://` o `https://` che bypassano i controlli di sicurezza della barra degli URL del browser, portando a spoofing o azioni privilegiate non intenzionali. |
|
||||
| 4 | **Uso di sottodomini wildcard** (`*.example.com`) nell'entitlement. | `grep` per `*.` negli entitlement. | Se un sottodominio viene preso (ad es. tramite un bucket S3 non utilizzato), l'attaccante guadagna automaticamente il binding del link universale. |
|
||||
|
||||
### Checklist rapida
|
||||
|
||||
* [ ] Estrarre gli entitlement e enumerare ogni voce `applinks:`.
|
||||
* [ ] Scaricare l'AASA per ogni voce e controllare i caratteri jolly.
|
||||
* [ ] Verificare che il server web restituisca **404** per i percorsi non definiti.
|
||||
* [ ] Nel binario, confermare che **solo** host/schemi fidati siano gestiti.
|
||||
* [ ] Se l'app utilizza la nuova sintassi `components` (iOS 11+), fuzzare le regole dei parametri di query (`{"?":{…}}`).
|
||||
|
||||
## Strumenti
|
||||
|
||||
- [GetUniversal.link](https://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.
|
||||
- [GetUniversal.link](https://getuniversal.link/): Aiuta a semplificare il testing e la gestione dei link universali e del file AASA della tua app. 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.
|
||||
- [Knil](https://github.com/ethanhuang13/knil): Utility iOS open-source che recupera, analizza e ti consente di **testare** ogni link universale dichiarato da un dominio direttamente sul dispositivo.
|
||||
- [universal-link-validator](https://github.com/urbangems/universal-link-validator): Validatore CLI / web che esegue controlli di conformità AASA rigorosi e evidenzia caratteri jolly pericolosi.
|
||||
|
||||
## Riferimenti
|
||||
|
||||
- [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)
|
||||
- [https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e](https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e)
|
||||
- [https://nvd.nist.gov/vuln/detail/CVE-2024-10474](https://nvd.nist.gov/vuln/detail/CVE-2024-10474)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user