iOS Custom URI Handlers / Deeplinks / Custom Schemes
Reading time: 4 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Основна інформація
Custom URL schemes дозволяють додаткам спілкуватися, використовуючи власний протокол, як детально описано в Apple Developer Documentation. Ці схеми повинні бути оголошені додатком, який потім обробляє вхідні URL відповідно до цих схем. Важливо перевіряти всі параметри URL та відкидати будь-які неправильно сформовані URL, щоб запобігти атакам через цей вектор.
Наводиться приклад, де URI myapp://hostname?data=123876123
викликає певну дію програми. Відзначена вразливість була в Skype Mobile, яка дозволяла неприпустимі дії дзвінків через протокол skype://
. Зареєстровані схеми можна знайти в Info.plist
додатка під CFBundleURLTypes
. Зловмисні програми можуть використовувати це, повторно реєструючи URI для перехоплення чутливої інформації.
Реєстрація схем запитів додатків
З 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:
, повинні бути виявлені та переглянуті на предмет безпекових наслідків.
Фаззинг URL схем
Фаззинг 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
Викрадення користувацьких URL-схем
Згідно з цим постом, шкідливі програми можуть реєструвати інші програми з користувацькими схемами, тоді шкідлива програма може відкрити браузер, який має всі куки програми Safari з ASWebAuthenticationSession.
За допомогою браузера шкідлива програма може завантажити веб-сторінку, контрольовану зловмисником, і TCC запитає у мобільного користувача дозволи на відкриття цієї програми. Потім шкідлива веб-сторінка може перенаправити на сторінку жертви, наприклад, на OAuth потік з параметром prompt=none
. Якщо користувач вже увійшов у OAuth потік, OAuth потік надішле секрет назад до жертви, використовуючи користувацьку схему жертви.
Однак, оскільки шкідлива програма також зареєструвала її і оскільки використовуваний браузер знаходиться всередині шкідливої програми, користувацька схема в цьому випадку буде оброблятися шкідливою програмою, яка зможе вкрасти OAuth токен.
Посилання
- https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/
- https://evanconnelly.github.io/post/ios-oauth/
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.