mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/ios-pentesting/ios-universal-links.md
This commit is contained in:
parent
9188d8857f
commit
cb68ef9b72
@ -4,13 +4,13 @@
|
||||
|
||||
## Вступ
|
||||
|
||||
Універсальні посилання пропонують **безшовний редирект** для користувачів, безпосередньо відкриваючи контент в додатку, обходячи необхідність редиректу в Safari. Ці посилання є **унікальними** та безпечними, оскільки їх не можуть вимагати інші додатки. Це забезпечується розміщенням файлу `apple-app-site-association` у кореневому каталозі вебсайту, встановлюючи перевіряємий зв'язок між вебсайтом та додатком. У випадках, коли додаток не встановлено, Safari візьме на себе управління і перенаправить користувача на вебсторінку, зберігаючи присутність додатку.
|
||||
Універсальні посилання пропонують **безшовний редирект** для користувачів, безпосередньо відкриваючи контент в додатку, обходячи необхідність редиректу в Safari. Ці посилання є **унікальними** та безпечними, оскільки їх не можуть привласнити інші додатки. Це забезпечується розміщенням файлу `apple-app-site-association` у кореневому каталозі вебсайту, встановлюючи перевіряємий зв'язок між вебсайтом та додатком. У випадках, коли додаток не встановлено, Safari візьме на себе управління і перенаправить користувача на вебсторінку, зберігаючи присутність додатку.
|
||||
|
||||
Для тестувальників на проникнення файл `apple-app-site-association` є особливо цікавим, оскільки він може розкрити **чутливі шляхи**, потенційно включаючи ті, що стосуються не випущених функцій.
|
||||
Для тестувальників на проникнення файл `apple-app-site-association` є особливим інтересом, оскільки він може розкрити **чутливі шляхи**, потенційно включаючи ті, що стосуються не випущених функцій.
|
||||
|
||||
### **Аналіз прав на асоційовані домени**
|
||||
|
||||
Розробники активують Універсальні посилання, налаштовуючи **Асоційовані домени** у вкладці можливостей Xcode або перевіряючи файл `.entitlements`. Кожен домен має префікс `applinks:`. Наприклад, конфігурація Telegram може виглядати наступним чином:
|
||||
Розробники активують Універсальні Посилання, налаштовуючи **Асоційовані домени** у вкладці можливостей Xcode або перевіряючи файл `.entitlements`. Кожен домен має префікс `applinks:`. Наприклад, конфігурація Telegram може виглядати наступним чином:
|
||||
```xml
|
||||
<key>com.apple.developer.associated-domains</key>
|
||||
<array>
|
||||
@ -24,15 +24,27 @@
|
||||
|
||||
### **Отримання файлу асоціації сайту Apple App**
|
||||
|
||||
Файл `apple-app-site-association` слід отримати з сервера, використовуючи домени, зазначені в правах доступу. Переконайтеся, що файл доступний через HTTPS безпосередньо за адресою `https://<domain>/apple-app-site-association`. Інструменти, такі як [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/), можуть допомогти в цьому процесі.
|
||||
Файл `apple-app-site-association` слід отримати з сервера, використовуючи домени, зазначені в правах доступу. Переконайтеся, що файл доступний через HTTPS безпосередньо за адресою `https://<domain>/apple-app-site-association` (або `/.well-known/apple-app-site-association`). Інструменти, такі як [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/), можуть допомогти в цьому процесі.
|
||||
|
||||
> **Швидка нумерація з оболонки macOS/Linux**
|
||||
>
|
||||
> ```bash
|
||||
> # припускаючи, що ви витягли права доступу в 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:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). Важливо, щоб схема URL, що обробляються, була HTTP або HTTPS, оскільки інші не підтримуються.
|
||||
Додаток повинен реалізувати специфічні методи для правильної обробки універсальних посилань. Основний метод, на який слід звернути увагу, це [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). Важливо, щоб схема URL, що обробляються, була HTTP або HTTPS, оскільки інші не підтримуватимуться.
|
||||
|
||||
#### **Валідація методу обробника даних**
|
||||
|
||||
Коли універсальне посилання відкриває додаток, об'єкт `NSUserActivity` передається додатку з URL. Перед обробкою цього URL важливо перевірити та очистити його, щоб запобігти ризикам безпеки. Ось приклад на Swift, який демонструє процес:
|
||||
Коли універсальне посилання відкриває додаток, об'єкт `NSUserActivity` передається додатку з URL. Перед обробкою цього URL важливо перевірити та очистити його, щоб запобігти ризикам безпеки. Ось приклад на Swift, який демонструє цей процес:
|
||||
```swift
|
||||
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
|
||||
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
|
||||
@ -72,13 +84,34 @@ return false
|
||||
```
|
||||
Через **дбайливу конфігурацію та валідацію** розробники можуть забезпечити, що універсальні посилання покращують користувацький досвід, зберігаючи при цьому стандарти безпеки та конфіденційності.
|
||||
|
||||
## Загальні вразливості та перевірки пентестингу
|
||||
|
||||
| # | Слабкість | Як перевірити | Експлуатація / Вплив |
|
||||
|---|----------|------------|-----------------------|
|
||||
| 1 | **Занадто широкі `paths` / `components`** у файлі AASA (наприклад, `"/": "*"` або шаблони, такі як `"/a/*"`). | • Перевірте завантажений AASA і шукайте `*`, зайві слеші або правила `{"?": …}`.<br>• Спробуйте запитати невідомі ресурси, які все ще відповідають правилу (`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](https://getuniversal.link/): Допомагає спростити тестування та управління універсальними посиланнями вашого додатку та файлом AASA. Просто введіть свій домен, щоб перевірити цілісність файлу AASA, або використовуйте спеціальну панель для легкого тестування поведінки посилань. Цей інструмент також допомагає визначити, коли Apple наступного разу проіндексує ваш файл AASA.
|
||||
- [GetUniversal.link](https://getuniversal.link/): Допомагає спростити тестування та управління універсальними посиланнями вашого додатка та файлом AASA. Просто введіть свій домен, щоб перевірити цілісність файлу AASA або використовуйте спеціальну панель для легкого тестування поведінки посилань. Цей інструмент також допомагає визначити, коли Apple наступного разу проіндексує ваш файл AASA.
|
||||
- [Knil](https://github.com/ethanhuang13/knil): Відкритий iOS утиліта, яка отримує, парсить і дозволяє вам **тестувати** кожне універсальне посилання, оголошене доменом, безпосередньо на пристрої.
|
||||
- [universal-link-validator](https://github.com/urbangems/universal-link-validator): CLI / веб-валідатор, який виконує строгі перевірки відповідності AASA та підкреслює небезпечні шаблони.
|
||||
|
||||
## Посилання
|
||||
|
||||
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis](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://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://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e)
|
||||
- [https://nvd.nist.gov/vuln/detail/CVE-2024-10474](https://nvd.nist.gov/vuln/detail/CVE-2024-10474)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user