iOS Universal Links

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Introduction

Universal links hutoa mwelekeo usio na mshono kwa watumiaji kwa kufungua moja kwa moja maudhui katika programu, bila ya kuhitaji mwelekeo wa Safari. Viungo hivi ni vya kipekee na salama, kwani haviwezi kudaiwa na programu nyingine. Hii inahakikishwa kwa kuhifadhi faili ya apple-app-site-association ya JSON katika saraka ya mizizi ya tovuti, ikianzisha kiungo kinachoweza kuthibitishwa kati ya tovuti na programu. Katika hali ambapo programu haijasanidiwa, Safari itachukua na kuelekeza mtumiaji kwenye ukurasa wa wavuti, ikihifadhi uwepo wa programu.

Kwa wapimaji wa penetration, faili ya apple-app-site-association ni ya umuhimu maalum kwani inaweza kufichua njia nyeti, ikiwa ni pamoja na zile zinazohusiana na vipengele ambavyo havijachapishwa.

Kuchambua Haki za Domains Zinazohusiana

Wakuu wa programu wanawezesha Universal Links kwa kusanidi Domains Zinazohusiana katika tab ya Uwezo ya Xcode au kwa kukagua faili ya .entitlements. Kila domain ina anwani ya applinks:. Kwa mfano, usanidi wa Telegram unaweza kuonekana kama ifuatavyo:

xml
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>

Kwa maelezo zaidi, rejelea archived Apple Developer Documentation.

Ikiwa unafanya kazi na programu iliyokusanywa, ruhusa zinaweza kutolewa kama ilivyoelezwa katika hiki kiongozi.

Kurejesha Faili ya Muungano wa Tovuti ya Apple App

Faili ya apple-app-site-association inapaswa kurejeshwa kutoka kwa seva kwa kutumia maeneo yaliyoainishwa katika ruhusa. Hakikisha faili inapatikana kupitia HTTPS moja kwa moja kwenye https://<domain>/apple-app-site-association (au /.well-known/apple-app-site-association). Zana kama Apple App Site Association (AASA) Validator zinaweza kusaidia katika mchakato huu.

Uhesabuji wa haraka kutoka kwa shell ya macOS/Linux

# tukichukulia umepata ruhusa kwenye 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

Kushughulikia Viungo vya Ulimwengu katika Programu

Programu lazima itekeleze mbinu maalum ili kushughulikia viungo vya ulimwengu kwa usahihi. Mbinu kuu ya kutafuta ni application:continueUserActivity:restorationHandler:. Ni muhimu kwamba mpango wa URLs zinazoshughulikiwa ni HTTP au HTTPS, kwani zingine hazitasaidiwa.

Kuthibitisha Mbinu ya Kushughulikia Data

Wakati kiungo cha ulimwengu kinapofungua programu, kitu cha NSUserActivity kinapitishwa kwa programu na URL. Kabla ya kushughulikia URL hii, ni muhimu kuthibitisha na kusafisha ili kuzuia hatari za usalama. Hapa kuna mfano katika Swift unaoonyesha mchakato:

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
}

URLs zinapaswa kuchambuliwa na kuthibitishwa kwa makini, hasa ikiwa zinajumuisha vigezo, ili kujilinda dhidi ya uwezekano wa udanganyifu au data isiyo sahihi. API ya NSURLComponents ni ya manufaa kwa ajili ya hili, kama inavyoonyeshwa hapa chini:

swift
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
}
}

Kupitia mipangilio na uthibitisho wa makini, waendelezaji wanaweza kuhakikisha kwamba viungo vya ulimwengu vinaboresha uzoefu wa mtumiaji huku wakihifadhi viwango vya usalama na faragha.

Ukatili wa Kawaida & Ukaguzi wa Pentesting

#UkatiliJinsi ya kupimaUtekelezaji / Athari
1paths / components za kupita kiasi katika faili la AASA (mfano "/": "*" au wildcards kama "/a/*").• Kagua AASA iliyopakuliwa na uangalie *, slashes za mwisho, au sheria za {"?": …}.
• Jaribu kuomba rasilimali zisizojulikana ambazo bado zinakidhi sheria hiyo (https://domain.com/a/evil?_p_dp=1).
Utekwaji wa kiungo cha ulimwengu: programu mbaya ya iOS inayosajili kikoa sawa inaweza kudai viungo vyote na kuwasilisha UI ya udukuzi. Mfano halisi ni ripoti ya bug-bounty ya Temu.com ya Mei 2025 ambapo mshambuliaji angeweza kuelekeza njia yoyote ya /a/* kwa programu yao.
2Uthibitisho wa upande wa seva ulio missing wa njia za deep-link.Baada ya kubaini njia zinazoruhusiwa, tolea maombi ya curl/Burp kwa rasilimali zisizopo na uangalie misimbo ya hali ya HTTP. Kila kitu kingine isipokuwa 404 (mfano 200/302) ni cha kutia shaka.Mshambuliaji anaweza kuhifadhi maudhui yasiyo na mipaka nyuma ya njia inayoruhusiwa na kuyatoa kupitia kikoa halali, kuongeza kiwango cha mafanikio cha udukuzi au wizi wa tokeni za kikao.
3Kushughulikia URL upande wa programu bila orodha ya mikoa/jeshi (CVE-2024-10474 – Mozilla Focus < 132).Tafuta wito wa moja kwa moja wa openURL:/open(_:options:) au madaraja ya JavaScript yanayopitisha URL zisizo na mipaka.Kurasa za ndani zinaweza kupeleka myapp:// au https:// URLs ambazo zinapita ukaguzi wa usalama wa URL-bar wa kivinjari, na kusababisha udanganyifu au vitendo vya kibali visivyokusudiwa.
4Matumizi ya sub-domains za wildcard (*.example.com) katika haki.grep kwa *. katika haki.Ikiwa sub-domain yoyote itachukuliwa (mfano kupitia S3 bucket isiyotumika), mshambuliaji moja kwa moja anapata uhusiano wa Universal Link.

Orodha ya Haraka

  • Toa haki na uhesabu kila kipengee cha applinks:.
  • Pakua AASA kwa kila kipengee na ukaguzi wa wildcards.
  • Thibitisha kwamba seva ya wavuti inarudisha 404 kwa njia zisizofafanuliwa.
  • Katika binary, thibitisha kwamba tu mikoa/schemas zinazotambulika zinashughulikiwa.
  • Ikiwa programu inatumia sintaksia mpya ya components (iOS 11+), fuzz sheria za query-parameter ({"?":{…}}).

Zana

  • GetUniversal.link: Inasaidia kurahisisha upimaji na usimamizi wa Viungo vya Ulimwengu vya programu yako na faili la AASA. Ingiza tu kikoa chako ili kuthibitisha uhalali wa faili la AASA au tumia dashibodi maalum kupima tabia ya kiungo kwa urahisi. Zana hii pia inakusaidia kubaini wakati Apple itakapofanya index faili yako ya AASA.
  • Knil: Zana ya iOS ya chanzo wazi inayopata, inachambua na inakuwezesha tap-test kila Kiungo cha Ulimwengu kilichotangazwa na kikoa moja kwa moja kwenye kifaa.
  • universal-link-validator: CLI / validator ya wavuti inayofanya ukaguzi mkali wa ufanano wa AASA na kuonyesha wildcards hatari.

Marejeleo

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks