iOS Universal Links
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Introduction
Універсальні посилання пропонують безшовний редирект для користувачів, безпосередньо відкриваючи контент в додатку, обходячи необхідність редиректу в Safari. Ці посилання є унікальними та безпечними, оскільки їх не можуть вимагати інші додатки. Це забезпечується розміщенням файлу apple-app-site-association
у кореневому каталозі вебсайту, встановлюючи перевіряємий зв'язок між вебсайтом та додатком. У випадках, коли додаток не встановлено, Safari візьме на себе управління і перенаправить користувача на вебсторінку, зберігаючи присутність додатку.
Для тестувальників на проникнення файл apple-app-site-association
є особливим інтересом, оскільки він може розкрити чутливі шляхи, потенційно включаючи ті, що стосуються не випущених функцій.
Аналіз прав на асоційовані домени
Розробники активують Універсальні посилання, налаштовуючи Асоційовані домени у вкладці можливостей Xcode або перевіряючи файл .entitlements
. Кожен домен має префікс applinks:
. Наприклад, конфігурація Telegram може виглядати наступним чином:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
Для більш детальних відомостей зверніться до архівної документації Apple Developer.
Якщо ви працюєте з скомпільованим додатком, права доступу можна витягти, як описано в цьому посібнику.
Отримання файлу асоціації сайту Apple App
Файл apple-app-site-association
слід отримати з сервера, використовуючи домени, зазначені в правах доступу. Переконайтеся, що файл доступний через HTTPS безпосередньо за адресою https://<domain>/apple-app-site-association
(або /.well-known/apple-app-site-association
). Інструменти, такі як Apple App Site Association (AASA) Validator, можуть допомогти в цьому процесі.
Швидка нумерація з оболонки macOS/Linux
# припускаючи, що ви витягли права доступу в ent.xml doms=$(plutil -extract com.apple.developer.associated-domains xml1 -o - ent.xml | \ grep -oE 'applinks:[^<]+' | cut -d':' -f2) for d in $doms; do echo "[+] Fetching AASA for $d"; curl -sk "https://$d/.well-known/apple-app-site-association" | jq '.' done
Обробка універсальних посилань у додатку
Додаток повинен реалізувати специфічні методи для правильної обробки універсальних посилань. Основний метод, на який слід звернути увагу, це application:continueUserActivity:restorationHandler:
. Важливо, щоб схема URL, що обробляються, була HTTP або HTTPS, оскільки інші не підтримуватимуться.
Валідація методу обробника даних
Коли універсальне посилання відкриває додаток, об'єкт NSUserActivity
передається додатку з URL. Перед обробкою цього URL важливо перевірити та очистити його, щоб запобігти ризикам безпеки. Ось приклад на Swift, який демонструє цей процес:
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// Check for web browsing activity and valid URL
if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
application.open(url, options: [:], completionHandler: nil)
}
return true
}
URL-адреси слід ретельно аналізувати та перевіряти, особливо якщо вони містять параметри, щоб захиститися від потенційного спуфінгу або неправильно сформованих даних. API NSURLComponents
корисний для цієї мети, як показано нижче:
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL,
let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true),
let path = components.path,
let params = components.queryItems else {
return false
}
if let albumName = params.first(where: { $0.name == "albumname" })?.value,
let photoIndex = params.first(where: { $0.name == "index" })?.value {
// Process the URL with album name and photo index
return true
} else {
// Handle invalid or missing parameters
return false
}
}
Через дбайливу конфігурацію та валідацію розробники можуть забезпечити, що універсальні посилання покращують користувацький досвід, зберігаючи при цьому стандарти безпеки та конфіденційності.
Загальні вразливості та перевірки пентестингу
# | Слабкість | Як перевірити | Експлуатація / Вплив |
---|---|---|---|
1 | Занадто широкі paths / components у файлі AASA (наприклад, "/": "*" або шаблони, такі як "/a/*" ). | • Перевірте завантажений AASA і шукайте * , зайві слеші або правила {"?": …} .• Спробуйте запитати невідомі ресурси, які все ще відповідають правилу ( https://domain.com/a/evil?_p_dp=1 ). | Викрадення універсальних посилань: шкідливий iOS додаток, який реєструє той же домен, може захопити всі ці посилання та представити фішинговий інтерфейс. Реальний приклад - звіт про баг-баунті Temu.com у травні 2025 року, де зловмисник міг перенаправити будь-який шлях /a/* на свій додаток. |
2 | Відсутня валідація на стороні сервера глибоких посилань. | Після визначення дозволених шляхів, надішліть запити curl /Burp до неіснуючих ресурсів і спостерігайте за кодами статусу HTTP. Будь-який код, крім 404 (наприклад, 200/302), є підозрілим. | Зловмисник може розмістити довільний контент за дозволеним шляхом і надавати його через легітимний домен, підвищуючи ймовірність фішингу або крадіжки токенів сесії. |
3 | Обробка URL на стороні додатка без білого списку схем/хостів (CVE-2024-10474 – Mozilla Focus < 132). | Шукайте прямі виклики openURL: /open(_:options:) або JavaScript мости, які пересилають довільні URL. | Внутрішні сторінки можуть підсовувати URL myapp:// або https:// , які обходять перевірки безпеки рядка URL браузера, що призводить до спуфінгу або ненавмисних привілейованих дій. |
4 | Використання піддоменів з шаблоном (*.example.com ) у праві. | grep для *. у правах. | Якщо будь-який піддомен буде захоплено (наприклад, через невикористовуване S3 відро), зловмисник автоматично отримує зв'язок з універсальним посиланням. |
Швидкий контрольний список
-
Витягніть права та перераховуйте кожен запис
applinks:
. - Завантажте AASA для кожного запису та перевірте на наявність шаблонів.
- Перевірте, що веб-сервер повертає 404 для невизначених шляхів.
- У бінарному файлі підтвердіть, що обробляються тільки довірені хости/схеми.
-
Якщо додаток використовує новіший синтаксис
components
(iOS 11+), протестуйте правила параметрів запиту ({"?":{…}}
).
Інструменти
- GetUniversal.link: Допомагає спростити тестування та управління універсальними посиланнями вашого додатка та файлом AASA. Просто введіть свій домен, щоб перевірити цілісність файлу AASA або використовуйте спеціальну панель для легкого тестування поведінки посилань. Цей інструмент також допомагає визначити, коли Apple наступного разу проіндексує ваш файл AASA.
- Knil: Відкритий iOS утиліта, яка отримує, парсить і дозволяє вам тестувати кожне універсальне посилання, оголошене доменом, безпосередньо на пристрої.
- universal-link-validator: CLI / веб-валідатор, який виконує строгі перевірки відповідності AASA та підкреслює небезпечні шаблони.
Посилання
- https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis
- https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8
- https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e
- https://nvd.nist.gov/vuln/detail/CVE-2024-10474
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.