iOS Universal Links
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Uvod
Universal links nude besprekorno preusmeravanje korisnicima otvaranjem sadržaja direktno u aplikaciji, zaobilazeći potrebu za preusmeravanjem u Safariju. Ove veze su jedinstvene i sigurne, jer ih druge aplikacije ne mogu preuzeti. To se obezbeđuje 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.
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 Entitlement
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:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
Za sveobuhvatnije uvide, pogledajte arhiviranu Apple Developer Documentation.
Ako radite sa kompajliranom aplikacijom, prava se mogu izvući kao što je opisano u ovom vodiču.
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
(ili /.well-known/apple-app-site-association
). Alati poput Apple App Site Association (AASA) Validator mogu pomoći u ovom procesu.
Brza enumeracija iz macOS/Linux shell-a
# 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
Aplikacija mora implementirati specifične metode za pravilno rukovanje univerzalnim linkovima. Primarna metoda koju treba tražiti je application:continueUserActivity:restorationHandler:
. Ključno je da shema URL-ova koji se obrađuju bude HTTP ili HTTPS, jer drugi neće biti podržani.
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:
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-ovi treba pažljivo analizirati i validirati, posebno ako uključuju parametre, kako bi se zaštitili od potencijalnog lažiranja ili neispravnih podataka. NSURLComponents
API je koristan za ovu svrhu, kao što je prikazano u nastavku:
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
}
}
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.• 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 belih lista shema/domena (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 hostovi/sheme.
-
Ako aplikacija koristi noviji
components
sintaksu (iOS 11+), fuzz pravila za parametre upita ({"?":{…}}
).
Alati
- 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: 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: 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://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
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.