From 3ba3ea7c4e8f000fc9e1d7dc96d1f9c417a29d78 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 17 Jul 2025 14:10:08 +0000 Subject: [PATCH] Translated ['src/mobile-pentesting/ios-pentesting/ios-universal-links.md --- .../ios-pentesting/ios-universal-links.md | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/src/mobile-pentesting/ios-pentesting/ios-universal-links.md b/src/mobile-pentesting/ios-pentesting/ios-universal-links.md index 51d8d58c5..bc7ccc401 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-universal-links.md +++ b/src/mobile-pentesting/ios-pentesting/ios-universal-links.md @@ -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** applinks:t.me ``` -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:///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:///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 `{"?": …}`.
• 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}}