iOS Custom URI Handlers / Deeplinks / Custom Schemes

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Dies ist eine Zusammenfassung der relevanten Informationen von https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/

Grundlegende Informationen

Benutzerdefinierte URL-Schemata ermöglichen es Apps, über ein benutzerdefiniertes Protokoll zu kommunizieren, wie in der Apple Developer-Dokumentation beschrieben. Diese Schemata müssen von der App deklariert werden, die dann eingehende URLs gemäß diesen Schemata verarbeitet. Es ist entscheidend, alle URL-Parameter zu validieren und fehlerhafte URLs zu verwerfen, um Angriffe über diesen Vektor zu verhindern.

Ein Beispiel ist gegeben, bei dem die URI myapp://hostname?data=123876123 eine bestimmte Aktion der Anwendung aufruft. Eine bekannte Schwachstelle bestand in der Skype Mobile-App, die unerlaubte Anrufaktionen über das skype://-Protokoll ermöglichte. Die registrierten Schemata finden sich in der Info.plist der App unter CFBundleURLTypes. Bösartige Anwendungen können dies ausnutzen, indem sie URIs erneut registrieren, um sensible Informationen abzufangen.

Registrierung von Anwendungsabfrageschemata

Ab iOS 9.0 erfordert canOpenURL: zur Überprüfung der Verfügbarkeit einer App die Deklaration von URL-Schemata in der Info.plist unter LSApplicationQueriesSchemes. Dadurch werden die Schemata eingeschränkt, die eine App abfragen kann, auf 50 begrenzt, um die Privatsphäre durch Verhinderung der App-Aufzählung zu verbessern.

<key>LSApplicationQueriesSchemes</key>
<array>
<string>url_scheme1</string>
<string>url_scheme2</string>
</array>

Testen der URL-Behandlung und -Validierung

Entwickler sollten bestimmte Methoden im Quellcode überprüfen, um die Konstruktion und Validierung des URL-Pfads zu verstehen, wie z.B. application:didFinishLaunchingWithOptions: und application:openURL:options:. Zum Beispiel verwendet Telegram verschiedene Methoden zum Öffnen von URLs:

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
}

Testen von URL-Anfragen an andere Apps

Methoden wie openURL:options:completionHandler: sind entscheidend, um URLs zu öffnen und mit anderen Apps zu interagieren. Die Identifizierung der Verwendung solcher Methoden im Quellcode der App ist entscheidend, um externe Kommunikation zu verstehen.

Testen veralteter Methoden

Veraltete Methoden zur Behandlung von URL-Öffnungen, wie application:handleOpenURL: und openURL:, sollten identifiziert und auf Sicherheitsimplikationen überprüft werden.

Fuzzing von URL-Schemata

Das Fuzzing von URL-Schemata kann Speicherbeschädigungsfehler identifizieren. Tools wie Frida können diesen Prozess automatisieren, indem sie URLs mit unterschiedlichen Payloads öffnen, um auf Abstürze zu überwachen. Dies wird am Beispiel der Manipulation von URLs in der iGoat-Swift-App veranschaulicht:

$ 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

Referenzen

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated