iOS Custom URI Handlers / Deeplinks / Custom Schemes

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Questa è una sintesi delle informazioni correlate da https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/

Informazioni di base

I custom URL schemes consentono alle app di comunicare utilizzando un protocollo personalizzato, come descritto nella Documentazione per sviluppatori Apple. Questi schemi devono essere dichiarati dall'app, che gestisce quindi gli URL in ingresso seguendo tali schemi. È fondamentale validare tutti i parametri URL e scartare eventuali URL non validi per prevenire attacchi attraverso questo vettore.

Viene fornito un esempio in cui l'URI myapp://hostname?data=123876123 invoca una specifica azione dell'applicazione. È stata riscontrata una vulnerabilità nell'app Skype Mobile, che consentiva azioni di chiamata non autorizzate tramite il protocollo skype://. Gli schemi registrati possono essere trovati nell'Info.plist dell'app sotto CFBundleURLTypes. Le applicazioni malevole possono sfruttare ciò registrando nuovamente gli URI per intercettare informazioni sensibili.

Registrazione degli Application Query Schemes

A partire da iOS 9.0, per verificare se un'app è disponibile, canOpenURL: richiede la dichiarazione degli URL schemes nell'Info.plist sotto LSApplicationQueriesSchemes. Ciò 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>

Testare la gestione e la validazione degli URL

Gli sviluppatori dovrebbero ispezionare metodi specifici nel codice sorgente per comprendere la costruzione e la validazione del percorso dell'URL, come application:didFinishLaunchingWithOptions: e application:openURL:options:. Ad esempio, Telegram utilizza vari metodi per aprire gli 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
}

Test delle richieste URL verso altre app

Metodi come openURL:options:completionHandler: sono fondamentali per aprire URL e interagire con altre app. Identificare l'uso di tali metodi nel codice sorgente dell'app è essenziale per comprendere le comunicazioni esterne.

Test dei metodi deprecati

I metodi deprecati che gestiscono l'apertura degli URL, come application:handleOpenURL: e openURL:, devono essere identificati e valutati per le implicazioni sulla sicurezza.

Fuzzing degli URL Scheme

Il fuzzing degli URL Scheme può identificare bug di corruzione della memoria. Strumenti come Frida possono automatizzare questo processo aprendo URL con payload variabili per monitorare eventuali crash, come 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

Riferimenti

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated