iOS Custom URI Handlers / Deeplinks / Custom Schemes
Reading time: 4 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Osnovne Informacije
Prilagođeni URL šeme omogućavaju aplikacijama da komuniciraju koristeći prilagođeni protokol, kao što je detaljno objašnjeno 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 putem ovog vektora.
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.
Registracija Šema Upita Aplikacija
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, 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 da otvori tu aplikaciju. 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
- https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/
- https://evanconnelly.github.io/post/ios-oauth/
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.