iOS Custom URI Handlers / Deeplinks / Custom Schemes
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Informazioni di Base
Gli schemi URL personalizzati consentono alle app di comunicare utilizzando un protocollo personalizzato, come dettagliato nella Apple Developer Documentation. Questi schemi devono essere dichiarati dallâapp, che gestisce quindi gli URL in arrivo seguendo quegli schemi. Ă fondamentale validare tutti i parametri URL e scartare eventuali URL malformati per prevenire attacchi attraverso questo vettore.
Un esempio è dato dove lâURI myapp://hostname?data=123876123 invoca unâazione specifica dellâapplicazione. Una vulnerabilitĂ nota era nellâapp Skype Mobile, che consentiva azioni di chiamata non autorizzate tramite il protocollo skype://. Gli schemi registrati possono essere trovati nel Info.plist dellâapp sotto CFBundleURLTypes. Le applicazioni malevole possono sfruttare questo registrando nuovamente gli URI per intercettare informazioni sensibili.
Registrazione degli Schemi di Query dellâApplicazione
A partire da iOS 9.0, per controllare se unâapp è disponibile, canOpenURL: richiede di dichiarare gli schemi URL nel Info.plist sotto LSApplicationQueriesSchemes. Questo limita gli schemi che unâapp può interrogare a 50, migliorando la privacy impedendo lâenumerazione delle app.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>url_scheme1</string>
<string>url_scheme2</string>
</array>
Testing URL Handling and Validation
Gli sviluppatori dovrebbero ispezionare metodi specifici nel codice sorgente per comprendere la costruzione e la validazione dei percorsi URL, come application:didFinishLaunchingWithOptions: e application:openURL:options:. Ad esempio, Telegram impiega vari metodi per aprire URL:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool {
self.openUrl(url: url)
return true
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
annotation: Any) -> Bool {
self.openUrl(url: url)
return true
}
func application(_ app: UIApplication, open url: URL,
options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
self.openUrl(url: url)
return true
}
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
self.openUrl(url: url)
return true
}
Testing URL Requests to Other Apps
Metodi come openURL:options:completionHandler: sono cruciali per aprire URL per interagire con altre app. Identificare lâuso di tali metodi nel codice sorgente dellâapp è fondamentale per comprendere le comunicazioni esterne.
Testing for Deprecated Methods
I metodi deprecati che gestiscono lâapertura di URL, come application:handleOpenURL: e openURL:, dovrebbero essere identificati e revisionati per le implicazioni di sicurezza.
Fuzzing URL Schemes
Il fuzzing degli schemi URL può identificare bug di corruzione della memoria. Strumenti come Frida possono automatizzare questo processo aprendo URL con payload variabili per monitorare eventuali crash, esemplificato dalla manipolazione degli URL nellâapp iGoat-Swift:
$ frida -U SpringBoard -l ios-url-scheme-fuzzing.js
[iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}")
Watching for crashes from iGoat...
No logs were moved.
Opened URL: iGoat://?contactNumber=0&message=0
Hijacking di schemi URL personalizzati
Secondo questo post, le app malevole potrebbero registrare schemi personalizzati di altre app, quindi lâapp malevola può aprire un browser che ha tutti i cookie dellâapp Safari con ASWebAuthenticationSession.
Con il browser, lâapp malevola può caricare una pagina web controllata dallâattaccante e TCC chiederĂ allâutente mobile i permessi per aprire quellâapp. Poi, la pagina web malevola potrebbe reindirizzare a una pagina vittima, ad esempio un flusso OAuth con il parametro prompt=none. Se lâutente era giĂ loggato nel flusso OAuth, il flusso OAuth invierĂ il segreto allâapplicazione vittima utilizzando lo schema personalizzato dellâapp vittima.
Tuttavia, poichĂŠ lâapp malevola lâha anche registrato e poichĂŠ il browser utilizzato è allâinterno dellâapp malevola, lo schema personalizzato sarĂ gestito in questo caso dallâapp malevola che sarĂ in grado di rubare il token OAuth.
Riferimenti
- https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/
- https://evanconnelly.github.io/post/ios-oauth/
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

