Translated ['src/mobile-pentesting/ios-pentesting/ios-universal-links.md

This commit is contained in:
Translator 2025-07-17 14:11:03 +00:00
parent 137f3bfe4b
commit 47723c348b

View File

@ -4,13 +4,13 @@
## Uvod
Universal links nude **besprekorno preusmeravanje** korisnicima otvarajući sadržaj direktno u aplikaciji, zaobilazeći potrebu za preusmeravanjem na Safari. Ove veze su **jedinstvene** i sigurne, jer ih druge aplikacije ne mogu preuzeti. To se osigurava hostovanjem `apple-app-site-association` JSON datoteke u korenskom direktorijumu veb sajta, uspostavljajući verifikovanu vezu između veb sajta i aplikacije. U slučajevima kada aplikacija nije instalirana, Safari će preuzeti kontrolu i usmeriti korisnika na veb stranicu, održavajući prisustvo aplikacije.
Universal links nude **besprekorno preusmeravanje** korisnicima otvarajući sadržaj direktno u aplikaciji, zaobilazeći potrebu za preusmeravanjem na Safari. Ove veze su **jedinstvene** i sigurne, jer ih druge aplikacije ne mogu preuzeti. To se osigurava postavljanjem `apple-app-site-association` JSON datoteke u korenskom direktorijumu veb sajta, uspostavljajući verifikovanu vezu između veb sajta i aplikacije. U slučajevima kada aplikacija nije instalirana, Safari će preuzeti kontrolu i usmeriti korisnika na veb stranicu, održavajući prisustvo aplikacije.
Za testere penetracije, `apple-app-site-association` datoteka je od posebnog interesa jer može otkriti **osetljive putanje**, potencijalno uključujući one vezane za neobjavljene funkcije.
### **Analiza Associated Domains ovlašćenja**
### **Analiza Associated Domains Entitlement**
Programeri omogućavaju Universal Links konfigurisanjem **Associated Domains** u Xcode-ovom tabu Capabilities ili inspekcijom `.entitlements` datoteke. Svaka domena je prefiksirana sa `applinks:`. Na primer, konfiguracija Telegram-a može izgledati ovako:
Programeri omogućavaju Universal Links konfigurisanjem **Associated Domains** u Xcode-ovom Capabilities tabu ili pregledanjem `.entitlements` datoteke. Svaka domena je prefiksovana sa `applinks:`. Na primer, konfiguracija Telegram-a može izgledati ovako:
```xml
<key>com.apple.developer.associated-domains</key>
<array>
@ -20,11 +20,23 @@ Programeri omogućavaju Universal Links konfigurisanjem **Associated Domains** u
```
Za sveobuhvatnije uvide, pogledajte [arhiviranu Apple Developer Documentation](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).
Ako radite sa kompajliranom aplikacijom, prava se mogu izvući kao što je opisano u [ovom vodiču](extracting-entitlements-from-compiled-application.md).
Ako radite sa kompajliranom aplikacijom, prava mogu biti izvučena kao što je opisano u [ovom vodiču](extracting-entitlements-from-compiled-application.md).
### **Preuzimanje Apple App Site Association Fajla**
Fajl `apple-app-site-association` treba preuzeti sa servera koristeći domene navedene u pravima. Osigurajte da je fajl dostupan putem HTTPS direktno na `https://<domain>/apple-app-site-association`. Alati poput [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/) mogu pomoći u ovom procesu.
Fajl `apple-app-site-association` treba preuzeti sa servera koristeći domene navedene u pravima. Osigurajte da je fajl dostupan putem HTTPS direktno na `https://<domain>/apple-app-site-association` (ili `/.well-known/apple-app-site-association`). Alati poput [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/) mogu pomoći u ovom procesu.
> **Brza enumeracija iz macOS/Linux shell-a**
>
> ```bash
> # pretpostavljajući da ste izvukli prava u 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 "[+] Preuzimanje AASA za $d";
> curl -sk "https://$d/.well-known/apple-app-site-association" | jq '.'
> done
> ```
### **Rukovanje Universal Links u Aplikaciji**
@ -32,7 +44,7 @@ Aplikacija mora implementirati specifične metode za pravilno rukovanje univerza
#### **Validacija Metode Rukovaoca Podacima**
Kada univerzalni link otvori aplikaciju, `NSUserActivity` objekat se prosleđuje aplikaciji sa URL-om. Pre obrade ovog URL-a, važno je validirati i sanitizovati ga kako bi se sprečili sigurnosni rizici. Evo primera u Swift-u koji prikazuje proces:
Kada univerzalni link otvori aplikaciju, `NSUserActivity` objekat se prosleđuje aplikaciji sa URL-om. Pre obrade ovog URL-a, važno je validirati i sanitizovati ga kako bi se sprečili sigurnosni rizici. Evo primera u Swift-u koji demonstrira proces:
```swift
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
@ -70,15 +82,36 @@ return false
}
}
```
Kroz **pažljivu konfiguraciju i validaciju**, programeri mogu osigurati da univerzalni linkovi poboljšaju korisničko iskustvo, dok održavaju standarde sigurnosti i privatnosti.
Kroz **pažljivu konfiguraciju i validaciju**, programeri mogu osigurati da univerzalni linkovi poboljšaju korisničko iskustvo, dok istovremeno održavaju standarde sigurnosti i privatnosti.
## Uobičajene ranjivosti i Pentesting provere
| # | Slabost | Kako testirati | Eksploatacija / Uticaj |
|---|----------|------------|-----------------------|
| 1 | **Preširoki `paths` / `components`** u AASA datoteci (npr. `"/": "*"` ili džokeri kao `"/a/*"`). | • Istražite preuzetu AASA i tražite `*`, završne kose crte ili `{"?": …}` pravila.<br>• Pokušajte da zatražite nepoznate resurse koji se i dalje poklapaju sa pravilom (`https://domain.com/a/evil?_p_dp=1`). | Otimanje univerzalnog linka: zlonamerna iOS aplikacija koja registruje istu domenu mogla bi da preuzme sve te linkove i prikaže phishing UI. Primer iz stvarnog sveta je izveštaj o bug-bounty programu Temu.com iz maja 2025. godine gde je napadač mogao da preusmeri bilo koji `/a/*` put do svoje aplikacije. |
| 2 | **Nedostatak server-side validacije** dubokih linkova. | Nakon identifikacije dozvoljenih putanja, izdajte `curl`/Burp zahteve za nepostojeće resurse i posmatrajte HTTP status kodove. Sve osim `404` (npr. 200/302) je sumnjivo. | Napadač može hostovati proizvoljan sadržaj iza dozvoljene putanje i servirati ga putem legitimne domene, povećavajući stopu uspeha phishinga ili krađe sesijskih tokena. |
| 3 | **URL rukovanje na strani aplikacije bez belog spiska shema/domaćina** (CVE-2024-10474 Mozilla Focus < 132). | Tražite direktne `openURL:`/`open(_:options:)` pozive ili JavaScript mostove koji prosleđuju proizvoljne URL-ove. | Interni stranice mogu prokrijumčariti `myapp://` ili `https://` URL-ove koji zaobilaze sigurnosne provere URL trake pretraživača, što dovodi do lažiranja ili nepredviđenih privilegovanih akcija. |
| 4 | **Korišćenje džoker poddomena** (`*.example.com`) u ovlašćenju. | `grep` za `*.` u ovlašćenjima. | Ako se bilo koji poddomen preuzme (npr. putem neiskorišćenog S3 bucket-a), napadač automatski dobija vezu za Univerzalni Link. |
### Brza lista provere
* [ ] Izvucite ovlašćenja i nabrojite svaki `applinks:` unos.
* [ ] Preuzmite AASA za svaki unos i proverite za džokere.
* [ ] Potvrdite da web server vraća **404** za neodređene putanje.
* [ ] U binarnom kodu, potvrdite da se obrađuju **samo** pouzdani domaćini/sheme.
* [ ] Ako aplikacija koristi noviji `components` sintaksu (iOS 11+), fuzz pravila za parametre upita (`{"?":{…}}`).
## Alati
- [GetUniversal.link](https://getuniversal.link/): Pomaže u pojednostavljivanju testiranja i upravljanja univerzalnim linkovima i AASA datotekom vaše aplikacije. Jednostavno unesite svoju domenu da biste proverili integritet AASA datoteke ili koristite prilagođenu kontrolnu tablu za lako testiranje ponašanja linkova. Ovaj alat vam takođe pomaže da odredite kada će Apple sledeći put indeksirati vašu AASA datoteku.
- [GetUniversal.link](https://getuniversal.link/): Pomaže u pojednostavljivanju testiranja i upravljanja Univerzalnim Linkovima vaše aplikacije i AASA datotekom. Jednostavno unesite svoju domenu da biste proverili integritet AASA datoteke ili koristite prilagođenu kontrolnu tablu za lako testiranje ponašanja linkova. Ovaj alat vam takođe pomaže da odredite kada će Apple sledeći indeksirati vašu AASA datoteku.
- [Knil](https://github.com/ethanhuang13/knil): Open-source iOS alat koji preuzima, analizira i omogućava vam da **tap-testirate** svaki Univerzalni Link koji je deklarisan od strane domene direktno na uređaju.
- [universal-link-validator](https://github.com/urbangems/universal-link-validator): CLI / web validator koji vrši stroge provere usklađenosti AASA i ističe opasne džokere.
## Reference
- [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}}