iOS Custom URI Handlers / Deeplinks / Custom Schemes

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Ovo je sažetak povezanih informacija sa https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/

Osnovne informacije

Prilagođene URL šeme omogućavaju aplikacijama da komuniciraju koristeći prilagođeni protokol, kako je detaljno opisano u Apple Developer dokumentaciji. Ove šeme moraju biti deklarisane od strane aplikacije, koja zatim obrađuje dolazne URL-ove koji slede te šeme. Važno je validirati sve parametre URL-a i odbaciti bilo kakve neispravne URL-ove kako bi se sprečili napadi putem ovog vektora.

Dato je primer gde URI myapp://hostname?data=123876123 pokreće određenu akciju aplikacije. Primećena ranjivost bila je u Skype Mobile aplikaciji, koja je omogućavala neovlaštene pozive putem skype:// protokola. Registrovane šeme mogu se pronaći u Info.plist datoteci aplikacije pod CFBundleURLTypes. Zlonamerne aplikacije mogu iskoristiti ovo tako što će ponovo registrovati URI-jeve kako bi presrele osetljive informacije.

Registracija šema upita aplikacije

Od iOS 9.0, da bi se proverilo da li je aplikacija dostupna, canOpenURL: zahteva deklarisanje URL šema u Info.plist datoteci pod LSApplicationQueriesSchemes. Ovo ograničava šeme koje aplikacija može koristiti za upite na 50, poboljšavajući privatnost sprečavanjem enumeracije aplikacija.

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

Testiranje obrade i validacije URL-ova

Razvojni programeri trebaju pregledati određene metode u izvornom kodu kako bi razumeli konstrukciju i validaciju putanje URL-a, kao što su application:didFinishLaunchingWithOptions: i application:openURL:options:. Na primer, Telegram koristi različite metode za otvaranje URL-ova:

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
}

Testiranje URL zahteva drugim aplikacijama

Metode poput openURL:options:completionHandler: su ključne za otvaranje URL-ova i interakciju sa drugim aplikacijama. Identifikacija korišćenja ovih metoda u izvornom kodu aplikacije je ključna za razumevanje spoljnih komunikacija.

Testiranje zastarelih metoda

Zastarele metode za obradu otvaranja URL-ova, poput application:handleOpenURL: i openURL:, treba identifikovati i pregledati zbog bezbednosnih implikacija.

Fuzziranje URL šema

Fuzziranje URL šema može identifikovati greške u memoriji. Alati poput Fride mogu automatizovati ovaj proces otvaranjem URL-ova sa različitim payload-ima kako bi se pratili padovi, kao što je manipulacija URL-ovima u iGoat-Swift aplikaciji:

$ 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

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated