iOS Custom URI Handlers / Deeplinks / Custom Schemes

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Це підсумок відповідної інформації з https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/

Основна інформація

Спеціальні URL-схеми дозволяють додаткам спілкуватися за допомогою спеціального протоколу, як описано в Документації розробника Apple. Ці схеми повинні бути оголошені додатком, який потім обробляє вхідні URL-адреси за цими схемами. Важливо перевіряти всі параметри URL та відкидати будь-які некоректні URL-адреси, щоб запобігти атакам через цей вектор.

Наводиться приклад, де URI myapp://hostname?data=123876123 викликає певну дію додатка. Зазначена уразливість була в додатку Skype Mobile, який дозволяв неповідомлені дії з дзвінками через протокол skype://. Зареєстровані схеми можна знайти в Info.plist додатка під CFBundleURLTypes. Зловмисні додатки можуть використовувати це, повторно реєструючи URIs для перехоплення чутливої інформації.

Реєстрація схем запитів додатків

Починаючи з iOS 9.0, для перевірки доступності додатка, canOpenURL: вимагає оголошення URL-схем в Info.plist під LSApplicationQueriesSchemes. Це обмежує схеми, які додаток може запитувати до 50, підвищуючи конфіденційність шляхом запобігання переліку додатків.

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

Тестування обробки та перевірки URL-адрес

Розробники повинні перевірити конкретні методи в початковому коді, щоб зрозуміти конструкцію та перевірку шляху URL-адрес, такі як application:didFinishLaunchingWithOptions: та application:openURL:options:. Наприклад, Telegram використовує різні методи для відкриття 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
}

Тестування запитів URL до інших додатків

Методи, такі як openURL:options:completionHandler:, є важливими для відкриття URL-адрес для взаємодії з іншими додатками. Виявлення використання таких методів у вихідному коді додатка є ключовим для розуміння зовнішніх комунікацій.

Тестування застарілих методів

Обробка застарілих методів відкриття URL, таких як application:handleOpenURL: та openURL:, повинна бути виявлена та переглянута з точки зору наслідків для безпеки.

Fuzzing URL-схем

Fuzzing URL-схем може виявити помилки корупції пам'яті. Інструменти, такі як Frida, можуть автоматизувати цей процес, відкриваючи URL-адреси з різними навантаженнями для моніторингу аварій, як це показано на прикладі маніпулювання URL-адресами у додатку 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

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated