iOS Custom URI Handlers / Deeplinks / Custom Schemes

Support HackTricks

Basic Information

Prilagođeni URL šeme omogućavaju aplikacijama da komuniciraju koristeći prilagođeni protokol, kao što je detaljno opisano u Apple Developer Documentation. Ove šeme moraju biti deklarisane od strane aplikacije, koja zatim obrađuje dolazne URL-ove prema tim šemama. Ključno je validirati sve URL parametre i odbaciti sve neispravne URL-ove kako bi se sprečili napadi kroz ovaj vektor.

Primer je dat gde URI myapp://hostname?data=123876123 poziva specifičnu akciju aplikacije. Zapažena ranjivost bila je u Skype Mobile aplikaciji, koja je omogućila neovlašćene pozivne akcije putem skype:// protokola. Registrovane šeme se mogu naći u Info.plist aplikacije pod CFBundleURLTypes. Zlonamerne aplikacije mogu iskoristiti ovo ponovnim registracijama URI-a kako bi presreli osetljive informacije.

Application Query Schemes Registration

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

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

Testing URL Handling and Validation

Razvijači bi trebali da pregledaju specifične metode u izvor kodu kako bi razumeli konstrukciju i validaciju URL putanja, 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
}

Testing URL Requests to Other Apps

Metode kao što su openURL:options:completionHandler: su ključne za otvaranje URL-ova za interakciju sa drugim aplikacijama. Identifikacija korišćenja takvih metoda u izvor kodu aplikacije je ključna za razumevanje spoljne komunikacije.

Testing for Deprecated Methods

Zastarjeli metodi koji se bave otvaranjem URL-ova, kao što su application:handleOpenURL: i openURL:, treba da budu identifikovani i pregledani zbog bezbednosnih implikacija.

Fuzzing URL Schemes

Fuzzing URL shema može identifikovati greške u oštećenju memorije. Alati kao što je Frida mogu automatizovati ovaj proces otvaranjem URL-ova sa različitim payload-ima kako bi se pratili padovi, što je ilustrovano manipulacijom URL-ova 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

Hijackovanje prilagođenih URL šema

Prema ovom postu, zlonamerne aplikacije mogu registrovati prilagođene šeme drugih aplikacija, a zatim zlonamerna aplikacija može otvoriti pregledač koji ima sve kolačiće Safari aplikacije sa ASWebAuthenticationSession.

Sa pregledačem, zlonamerna aplikacija može učitati veb stranicu koju kontroliše napadač i TCC će tražiti od mobilnog korisnika dozvole za otvaranje te aplikacije. Zatim, zlonamerna veb stranica može preusmeriti na stranicu žrtve, na primer, OAuth tok sa parametrima prompt=none. Ako je korisnik već bio prijavljen u OAuth toku, OAuth tok će poslati tajnu nazad u aplikaciju žrtve koristeći prilagođenu šemu aplikacije žrtve. Međutim, pošto je zlonamerna aplikacija takođe registrovala tu šemu i pošto je korišćeni pregledač unutar zlonamerne aplikacije, prilagođena šema će u ovom slučaju biti obrađena od strane zlonamerne aplikacije koja će moći da ukrade OAuth token.

Reference

Podržite HackTricks

Last updated